Я хочу обратно распространить потери, рассчитанные с помощью nn.CrossEntropyLoss () на уровне экземпляра, но не на уровне пакета.
Более конкретно, следующий код может достичь цели в pytorch 1.0.1:
output = model(x)
criterion = nn.CrossEntropyLoss(reduction='none')
loss = criterion(output, target)
for i in range(loss.size(0)):
loss[i].backward()
Хотя вышеупомянутое разделяет почти те же вычислительные затраты, что и обратные потери в уровне партии, показанные ниже:
output = model(x)
criterion = nn.CrossEntropyLoss()
loss = criterion(output, target)
loss.backward()
Обратное распространение на уровне экземпляра обойдется намного дороже.
Итак, я хочу спросить, есть ли более эффективный способ удовлетворить мои требования?
Спасибо большое!