之前loss用自带的MSE,这样写的
criterion = nn.MSELoss(size_average=False).cuda()
...
loss = criterion(output, target)
loss.backward()
这样是没有问题的
现在需要用自定义loss函数newLoss,因为要逐个像素进行loss运算(算法需要)
#this is in model.py
class newLoss(nn.Module):
def __init__(self):
super(newLoss, self).__init__()
def forward(self, output, gt):
loss = 0
for row_out, row_gt :
for pixel_out, pixel_gt :
loss += something pixelwise
return loss
# this is in train.py
newloss = newLoss()
loss = newloss(output,gt)
这样计算出来的loss是float类型的,下面的代码会报
''AttributeError: 'float' object has no attribute 'backward''
的错
我现在的做法是:把newloss数值加到原来的MSE类型loss上:
criterion = nn.MSELoss(size_average=False).cuda()
...
loss = criterion(output, target)
newloss= newLoss()
loss += newloss(output,gt)
loss.backward()
这样写我新加的newloss在后向传播时能生效吗?