【发布时间】:2020-03-17 13:02:53
【问题描述】:
在深度学习中,您通常有一个希望优化的目标(例如图像识别)。不过,在我的领域(自然语言处理)中,我们看到了多任务训练的兴起。例如,在单个系统中进行下一句预测和句子分类。
我了解如何构建前向传球,例如用于分类任务(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
但是问题就变成了,如何优化这个。您是否分别对这两种损失进行了反向传递?或者你是否将它们减少到一个单一的损失(例如总和,平均)?是否有通常用于多任务学习的方法?
接下来,也许有人甚至会争辩说,不同层的参数需要不同的优化器。在这种情况下,我认为损失必须单独处理。
【问题讨论】:
-
不为obj1克隆对象“out”有什么影响。即out_obj1 = self.obj1(out.clone())
标签: python deep-learning pytorch