https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html
を参考に強化学習を試していた時に以下のエラーに遭遇しました。
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x6 and 2x128)
原因と修正方法を調べたので備忘録としてまとめていきます。
原因
まずは原因です。
今回のエラーを日本語訳すると
「mat1 と mat2 のシェイプは乗算できません」
です。
もう少し掘り下げて調べてみると、mat1, mat2はmatrix1, matrix2の略で行列を意味しているようです。
(pytorchのコード中でも頻繁に使われており、よくある省略形らしい)
つまり、今回のエラーは「行列の乗算に失敗している」ということです。
で、なぜ行列の乗算に失敗しているかというと、シェイプつまり行列の形が乗算できる形になっていないからです。
ここは数学の話になってくるのですが、行列Aと行列Bの積ABは、Aの列とBの行が一致する時しか計算ができません。
ということで、数学的に計算できない行列を渡していることが今回のエラーの原因でした。
修正方法
原因が分かれば修正は簡単です。
今回のエラーログは以下となっていました。
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x6 and 2x128)
これは、1×6行列と2×128行列を掛け算しようとして失敗しているということなので、
1×6行列を1×2行列にする
or
2×128行列を6×128行列にする
のどちらかで解決することができます。
今回発生した私のエラー場合、1×6が入力データ、2×128がニューラルネットワークの第1層でした。
入力データは変更したくなかったので2×128を6×128に変更することでエラーを解消しました◎
終わりに
今回はRuntimeError: mat1 and mat2 shapes cannot be multiplied
を修正する方法をまとめました~
内部の変数名でエラーログ出されても…と思ったりもしましたが、とりあえず解決できて良かったです💮
私みたいに行列の計算が遥か彼方の記憶になってる人も少なくはないと思うので、そういった方が機械学習を始めて躓いた時の参考になればと思います◎
p.s.
最近ブログ全然更新してなくて日付見たら更新3か月ぶりでした😇
コメント