シンプルな線形オートエンコーダーを構築し、torch.optim オプティマイザーを使用してトレーニングするにはどうすればよいですか?
autograd (.backward()) を使用して MSE 損失を最適化し、エンコーダーとデコーダーの重みとバイアスの値を学習するにはどうすればよいですか (つまり、エンコーダーの 3 つのパラメーターとデコーダーの 4 つのパラメーター) ? また、学習の実行ごとに、次のようなランダムな重みとバイアスから開始して、データをランダム化する必要があります。
wEncoder = torch.randn(D,1, requires_grad=True)
wDecoder = torch.randn(1,D, requires_grad=True)
bEncoder = torch.randn(1, requires_grad=True)
bDecoder = torch.randn(1,D, requires_grad=True)
ターゲット オプティマイザーは SGD、学習率 0.01、モメンタムなし、1000 ステップ (ランダムな開始から) です。では、損失とエポック (ステップ) をどのようにプロットすればよいでしょうか?
私はこれを試しましたが、損失はすべてのエポックで同じです。
D = 2
x = torch.rand(100,D)
x[:,0] = x[:,0] + x[:,1]
x[:,1] = 0.5*x[:,0] + x[:,1]
loss_fn = nn.MSELoss()
optimizer = optim.SGD([x[:,0],x[:,1]], lr=0.01)
losses = []
for epoch in range(1000):
running_loss = 0.0
inputs = x_reconstructed
targets = x
loss=loss_fn(inputs,targets)
loss.backward(retain_graph=True)
optimizer.step()
optimizer.zero_grad()
running_loss += loss.item()
epoch_loss = running_loss / len(data)
losses.append(running_loss)