Я читал документацию по PyTorch и пытался выяснить MSELoss и autograd. Я попытался создать очень простой обучающий цикл, который принимает два случайных тензора и обновляет значения в каждом тензоре так, чтобы сумма всех значений в tensor1
плюс сумма всех значений в 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, и я ценю любую помощь!