質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3130閲覧

PyTorch 全結合層のサイズが合っていない(?)

tomo193

総合スコア6

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/23 17:49

解決したいこと

PyTorchで全結合層のパラメーターの形を見てみたところ、ベクトルと行列のサイズがあっていないと思いました。
例えば、最後の全結合層では入力ベクトルのサイズは(1,512)ですが、全結合層のサイズが(10,512)なので計算ができません。全結合層のサイズが(512,10)だと都合が良いと思うのですが、内部の処理がどうなっているのか教えていただきたいです。

python

1Model structure: NeuralNetwork( 2 (flatten): Flatten(start_dim=1, end_dim=-1) 3 (linear_relu_stack): Sequential( 4 (0): Linear(in_features=784, out_features=512, bias=True) 5 (1): ReLU() 6 (2): Linear(in_features=512, out_features=512, bias=True) 7 (3): ReLU() 8 (4): Linear(in_features=512, out_features=10, bias=True) 9 (5): ReLU() 10 ) 11) 12 13 14Layer: linear_relu_stack.0.weight | Size: torch.Size([512, 784]) | Values : tensor([[-0.0346, 0.0327, 0.0167, ..., 0.0209, -0.0141, 0.0356], 15 [ 0.0102, 0.0071, 0.0073, ..., -0.0241, 0.0041, 0.0159]], 16 device='cuda:0', grad_fn=<SliceBackward>) 17 18Layer: linear_relu_stack.0.bias | Size: torch.Size([512]) | Values : tensor([0.0353, 0.0058], device='cuda:0', grad_fn=<SliceBackward>) 19 20Layer: linear_relu_stack.2.weight | Size: torch.Size([512, 512]) | Values : tensor([[ 0.0287, 0.0135, 0.0429, ..., -0.0268, 0.0441, -0.0108], 21 [-0.0040, 0.0116, 0.0063, ..., 0.0297, 0.0293, -0.0179]], 22 device='cuda:0', grad_fn=<SliceBackward>) 23 24Layer: linear_relu_stack.2.bias | Size: torch.Size([512]) | Values : tensor([-0.0209, -0.0367], device='cuda:0', grad_fn=<SliceBackward>) 25 26Layer: linear_relu_stack.4.weight | Size: torch.Size([10, 512]) | Values : tensor([[ 0.0299, 0.0182, -0.0258, ..., 0.0223, -0.0016, 0.0400], 27 [-0.0118, 0.0364, -0.0230, ..., -0.0393, -0.0152, 0.0244]], 28 device='cuda:0', grad_fn=<SliceBackward>) 29 30Layer: linear_relu_stack.4.bias | Size: torch.Size([10]) | Values : tensor([-0.0238, -0.0124], device='cuda:0', grad_fn=<SliceBackward>)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

全結合層は、入力x、出力y、重みW、バイアスbとして、
y = x・W(t) + b

と、一般的には表記します。(tは転置)
重みは転置しているので、行列のサイズは問題ありませんね。

リファレンスを見ればわかりますが、pytorchも同様の式で計算されます。
https://pytorch.org/docs/stable/generated/torch.nn.Linear.html

投稿2021/03/25 13:11

nanoseeing

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomo193

2021/03/25 16:43

転置して表示する仕様なのですね。 ありがとうございます????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問