Pytorch学習(3)線形レイヤー

序文

線形線形変換について説明する前に、行列変換の例を見てみましょう。

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)

プリントアウト:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_44901043/article/details/123765600