1
私はすでに自分自身の損失機能を定義しています。それは動作します。フィードフォワードに問題がない可能性があります。しかし、backward()を定義していないので、正しいかどうかはわかりません。カスタム損失機能でbackward()を定義する必要がありますか?
class _Loss(nn.Module):
def __init__(self, size_average=True):
super(_Loss, self).__init__()
self.size_average = size_average
class MyLoss(_Loss):
def forward(self, input, target):
loss = 0
weight = np.zeros((BATCH_SIZE,BATCH_SIZE))
for a in range(BATCH_SIZE):
for b in range(BATCH_SIZE):
weight[a][b] = get_weight(target.data[a][0])
for i in range(BATCH_SIZE):
for j in range(BATCH_SIZE):
a_ij= (input[i]-input[j]-target[i]+target[j])*weight[i,j]
loss += F.relu(a_ij)
return loss
私が聞きたい質問は
1)私は損失関数に)(後方を定義する必要がないということですか?
2)backward()を定義する方法は?
3)トーチでSGDを実行中にデータのインデックスを作成する方法はありますか?
ありがとうございました。しかし、もし私が後ろに書いておきたいのであれば?私は勾配を計算するためにチェーンルールを使用する方法を知っていますが、私は神経ネットワークの各重量またはバイアスのために微分を書くことはできないと思います。何かガイダンスがありますか? – Ruijian
pyTorch変数を計算すると、backward関数を呼び出すと、すべての従属変数のグラデーションが作成されます。手動で行う必要はありません。 –