PyTorchの練習をしている際に出たエラーです。
コード
playground.py
import torch
from torch import nn
from torch.utils.data import Dataset, DataLoader
# 中略:ここまででMockDatasetを定義している
# モデル定義とモックデータの準備
model = nn.Linear(1, 1)
data = MockDataset(torch.Tensor([1 for _ in range(100)]))
# 下準備:データローダーを作る
model.eval()
data = DataLoader(data, batch_size=64, shuffle=True)
# モデル評価
with torch.no_grad():
for input, label in data:
pred = model(input)
# ^^^^^^^^^^^^^^^^^^^ Error: mat1 and mat2...
エラー
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x64 and 1x1)
解決策
入力データを1
ではなく、[1]
とする。
playground.py
# data = MockDataset(torch.Tensor([1 for _ in range(100)]))
data = MockDataset(torch.Tensor([[1] for _ in range(100)]))
# ^ ^
考察
PyTorchがパラメータを更新するには、配列同士の演算をする必要があります。元々の例では、input
の各要素はただのint
であり、配列ではなかったため、エラーが出ていたと思われます。
参考
Qiitaの質問
配列同士の掛け算ができないという根源的な原因を教えてくれました。