一次只针对特定头部进行标签训练的多头神经网络
Training of multi-headed neural network with labels only for certain heads at a time
我正在尝试用 3 个头共享一些初始层来训练 NN。但是我的每个训练目标只有其中两个的输出。
我想创建单独的批次,其中包含仅包含相同头的输出的样本,并使用它们仅更新各自的头。
有什么方法可以在任何 DL 框架中实现这一点?
由于你的问题比较笼统,我假设你使用的是 PyTorchLightning 来回答。
我建议您使用如下所示的模型:
class MyModel(LightningModule):
def training_step(self, batch: MyMultiTaskBatch):
backbone_output = self.backbone(batch.x)
head = self.heads[batch.task_name]
head_output = head(backbone_output)
loss = self.losses[batch.task_name]
return loss(head_output, batch.y)
您的批次告诉模型它应该使用哪个头 运行,以及它应该使用将任务名称映射到头和损失的字典中的哪个损失。您还需要实现一个 returns 一个 MyMultiTaskBatch
作为其批次的数据加载器。
我正在尝试用 3 个头共享一些初始层来训练 NN。但是我的每个训练目标只有其中两个的输出。
我想创建单独的批次,其中包含仅包含相同头的输出的样本,并使用它们仅更新各自的头。
有什么方法可以在任何 DL 框架中实现这一点?
由于你的问题比较笼统,我假设你使用的是 PyTorchLightning 来回答。 我建议您使用如下所示的模型:
class MyModel(LightningModule):
def training_step(self, batch: MyMultiTaskBatch):
backbone_output = self.backbone(batch.x)
head = self.heads[batch.task_name]
head_output = head(backbone_output)
loss = self.losses[batch.task_name]
return loss(head_output, batch.y)
您的批次告诉模型它应该使用哪个头 运行,以及它应该使用将任务名称映射到头和损失的字典中的哪个损失。您还需要实现一个 returns 一个 MyMultiTaskBatch
作为其批次的数据加载器。