序文
線形線形変換について説明する前に、行列変換の例を見てみましょう。
from __future__ import print_function
import torch
in_features = torch.tensor([2,2,2,2], dtype=torch.float32)
weight_matrix = torch.tensor([
[5,5,5],
[3,3,3],
[4,4,4],
[2,2,2]
], dtype=torch.float32)
out_features = in_features.matmul(weight_matrix)
print(out_features)
プリントアウト:
テンソル([28.、28.、28。])
この例では、weight_matrix重み行列の2次元テンソルであるin_featuresと呼ばれる1次元テンソルを作成します。次に、matmul()関数を使用して、1次元テンソルを生成する行列乗算演算を実行します。これは、4つの要素を持つ1Dテンソルを3つの要素を持つ1Dテンソルにマップします。
これがリニアの仕組みです。重み行列を使用して、in_featureスペースをout_featureスペースにマップします。
原理:入力データに線形変換を適用します:y = xA ^ T+b。
関数プロトタイプ
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
パラメータ説明
in_features:入力2次元テンソルのサイズ、つまり入力[batch_size、size]のサイズを参照します。
out_features:出力2次元テンソルのサイズを参照します。つまり、出力2次元テンソルの形状は[batch_size、out_features]です。
記事の冒頭の行列乗算の例に戻ると、作成されたin_featuresの1次元テンソル構造は[1,4]であり、4はLinearによって入力された2次元テンソルのサイズです。 weight_matrix重み行列の2次元テンソルは[4,3]であり、ここで3はLinearによって出力される2次元テンソルのサイズです。行列乗算の線形代数規則に従って、in_features=4およびout_features=3をLinear()関数に渡すと、PyTorchLinearLayerクラスは自動的に4x3の重み行列を作成します。
例
m = torch.nn.Linear(4, 3)
input = torch.tensor([2,2,2,2], dtype=torch.float32)
output = m(input)
print(output)
プリントアウト: