1

シンプルな線形オートエンコーダーを構築し、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)
4

2 に答える 2