Bra*_*roy 3 python deep-learning pytorch
在深度学习中,您通常有一个希望优化的目标(例如图像识别)。然而,在我的领域(自然语言处理),我们看到了多任务训练的兴起。例如,在单个系统中的下一个句子预测和句子分类。
我了解如何构建前向传递,例如分类任务(obj1)和回归任务(obj2)
class Net(nn.Module):
def __init__():
super().__init__()
self.linear = Linear(300, 200)
self.obj1 = Linear(200, 5)
self.obj2 = Linear(200, 1)
def forward(inputs):
out = self.linear(inputs)
out_obj1 = self.obj1(out)
out_obj2 = self.obj2(out)
return out_obj1, out_obj2
Run Code Online (Sandbox Code Playgroud)
但问题就变成了,如何优化这一点。您是否分别对这两个损失进行向后传递?或者将它们减少为单一损失(例如总和、平均值)?是否有一种通常用于多任务学习的方法?
为了跟进这一点,也许有人甚至会认为不同层的参数需要不同的优化器。在这种情况下,我认为损失必须单独处理。
它更简单,您可以同时优化所有变量而不会出现问题。只需使用各自的标准计算两个损失,然后将它们添加到单个变量中:
total_loss = loss_1 + loss_2
Run Code Online (Sandbox Code Playgroud)
并调用.backward()这个总损失(仍然是张量),对于两者来说都非常有效。您还可以对损失进行加权,以更加重视其中一个而不是另一个。
查看PyTorch 论坛以获取更多信息。
| 归档时间: |
|
| 查看次数: |
5846 次 |
| 最近记录: |