在多任务学习(Pytorch)中处理大小不同的数据

时间:2019-03-27 13:57:47

标签: for-loop deep-learning pytorch subsampling

我想用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()

我想知道如何处理这种情况。我以为我可以将zipitertools.cycleIterate 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

我认为这将是最简单的解决方案。但是,我不知道为什么,但是我迷上了必须像以前的模型一样构建模型的想法。

以上所有代码均为伪代码。

谢谢您的建议:)

0 个答案:

没有答案