在用 PyTorch 编写的神经网络代码中,我们定义并使用了这个自定义损失,它应该复制交叉熵损失的行为:
def my_loss(output, target):
global classes
v = torch.empty(batchSize)
xi = torch.empty(batchSize)
for j in range(0, batchSize):
v[j] = 0
for k in range(0, len(classes)):
v[j] += math.exp(output[j][k])
for j in range(0, batchSize):
xi[j] = -math.log( math.exp( output[j][target[j]] ) / v[j] )
loss = torch.mean(xi)
print(loss)
loss.requires_grad = True
return loss
但它并没有收敛到可接受的精度。