Python

【PyTorchエラー解消】RuntimeError: mat1 and mat2 shapes cannot be multiplied

https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html
を参考に強化学習を試していた時に以下のエラーに遭遇しました。

RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x6 and 2x128)

原因と修正方法を調べたので備忘録としてまとめていきます。

原因

まずは原因です。

今回のエラーを日本語訳すると
「mat1 と mat2 のシェイプは乗算できません」
です。

もう少し掘り下げて調べてみると、mat1, mat2matrix1, matrix2の略で行列を意味しているようです。
(pytorchのコード中でも頻繁に使われており、よくある省略形らしい)

つまり、今回のエラーは「行列の乗算に失敗している」ということです。


で、なぜ行列の乗算に失敗しているかというと、シェイプつまり行列の形が乗算できる形になっていないからです。

ここは数学の話になってくるのですが、行列Aと行列Bの積ABは、Aの列とBの行が一致する時しか計算ができません。

行列の積→左側の行列の行方向と右側の行列の列方向で計算する つまり、左側の列の数と右側の行の数が一致しないと計算できない 2x2行列と3x2行列→計算できない 2x2行列と2x3行列→計算できる
2億年ぶりに高校の教科書読んだ気がする


ということで、数学的に計算できない行列を渡していることが今回のエラーの原因でした。

修正方法

原因が分かれば修正は簡単です。

今回のエラーログは以下となっていました。

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か月ぶりでした😇

コメント

タイトルとURLをコピーしました