【发布时间】:2020-03-15 22:19:55
【问题描述】:
我有大约 5 个模型可以单独训练,但我想将它们融合在一起,以便拥有一个大模型。 我正在研究它,因为一个大模型比许多小模型更容易更新(在生产中) 这是我想要实现的图像。
我的问题是,这样可以吗? 每个头部模型有一个数据集,我应该如何训练整个模型?
【问题讨论】:
标签: machine-learning deep-learning pytorch
我有大约 5 个模型可以单独训练,但我想将它们融合在一起,以便拥有一个大模型。 我正在研究它,因为一个大模型比许多小模型更容易更新(在生产中) 这是我想要实现的图像。
我的问题是,这样可以吗? 每个头部模型有一个数据集,我应该如何训练整个模型?
【问题讨论】:
标签: machine-learning deep-learning pytorch
我的问题是,这样可以吗
当然可以。这种方法称为multi-task learning。根据您的数据集和您正在尝试做的事情,它甚至可能会提高性能。 Microsoft 使用multi-task model 为 NLP Glue 基准测试取得了一些不错的结果,但他们还指出,您可以通过微调每个单独任务的联合模型来进一步提高性能。
每个头部模型有一个数据集,我应该如何训练整个模型?
你只需要 pytorch ModuleList:
#please note this is just pseudocode and I'm not well versed with computer vision
#therefore you need to check if resnet50 import is correct and look
#for the imports of the task specific stuff
from torch import nn
from torchvision.models import resnet50
class MultiTaskModel(nn.Module):
def __init__(self):
#shared part
self.resnet50 = resnet50()
#task specific stuff
self.tasks = nn.ModuleList()
self.tasks.add_module('depth', Depth())
self.tasks.add_module('denseflow', Denseflow())
#...
def forward(self, tasktag, ...):
#shared part
resnet_output = self.resnet50(...)
#task specific parts
if tasktag == 'depth':
return self.tasks.depth(resnet_output)
elif tasktag == 'denseflow':
return self.tasks.denseflow(resnet_output)
#...
【讨论】:
MultiTaskModel只会创建一个模型(即一个权重文件),但是你真的必须在对一个任务进行微调之后检查每个任务的准确性,如果它仍然可以接受。
【讨论】: