1
我已經定義了我自己的損失函數。它確實有效。前饋可能沒有問題。但我不確定它是否正確,因爲我沒有定義落後()。我是否需要在自定義丟失函數中定義落後()?
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)如何定義落後()?
3)是否有任何方法可以做torch的SGD時的數據索引?
感謝您的幫助。但是如果我想寫下落後呢?我知道如何使用鏈式法則來計算梯度,但我不認爲我可以爲神經網絡中的每個權重或偏差寫出導數。你有一些指導。 – Ruijian
計算pyTorch變量後,調用後向函數將爲所有因變量創建漸變。你不需要手動做。 –