私は PyTorch のドキュメントを読んでいて、MSELoss と autograd を理解しようとしています。tensor1
2 つのランダム テンソルを取り、各テンソルの値を更新する非常に単純なトレーニング ループを作成してみましたtensor2
。私の例では 100 を使用しました。これをどのように実装したかを次に示します。
import torch.nn as nn
import torch
import torch.optim as optim
loss = nn.MSELoss()
tensor1 = torch.randn(3, 5, requires_grad=True)
tensor2 = torch.randn(3, 5, requires_grad=True)
target_sum = torch.FloatTensor(torch.Tensor([100]))
optimizer = optim.SGD([nn.Parameter(tensor1), nn.Parameter(tensor2)], lr=1e-4)
print(str(tensor1.sum().item()) + str(tensor2.sum().item()))
for i in range(100):
pred = tensor1.sum() + tensor2.sum()
optimizer.zero_grad()
loss(pred, target_sum).backward
optimizer.step()
print(str(tensor1.sum().item()) + str(tensor2.sum().item()))
トレーニング ループの前とトレーニング ループ後のテンソルの合計は同じですが、合計が増加し、100 に近づくはずです。ここで何が欠けているのかわかりません。トレーニング ループはドキュメンテーションの例からほぼそのままなので、オプティマイザーに関係があるのではないかと思います。私は PyTorch が初めてで、助けていただければ幸いです!