我想用Pytorch创建多任务学习模型。
我设计的模型遵循硬参数共享(http://ruder.io/multi-task/)
问题在于每个数据集的大小不同。因此,不能像这样在模型中的for循环中对它们进行训练:
for epoch in range(EPOCHS):
for data in dataloader_train:
output_a = model(data.a)
output_b = model(data.b)
output_c = model(data.c)
loss_a = criterion(output_a, data.target_a)
loss_b = criterion(output_b, data.target_b)
loss_c = criterion(output_c, data.target_c)
optimizer.zero_grad()
loss.backward([loss_a, loss_b, loss_c])
optimizer.step()
我想知道如何处理这种情况。我以为我可以将zip
与itertools.cycle
(Iterate over two list of different sizes in python)一起使用,但这可能会严重影响模型,因为它会更改某些数据的频率,尤其是位于早期索引中的数据:
data.a data.b
a 1
b 2
c 3
a 4
b 5
c 1
a 2
b 3
另一方面,如果我仅将其视为数据集的历元之间的差异,则似乎没有问题。例如。 data.a
有5个时期,而data.b
有3个时期。
或者如果设计这样的模型没有问题:
EPOCHS == 15
我认为这将是最简单的解决方案。但是,我不知道为什么,但是我迷上了必须像以前的模型一样构建模型的想法。
以上所有代码均为伪代码。
谢谢您的建议:)