0

在这个 PyTorch 模型中,我有两个具有两种不同模式的流数据,它们同时输入到模型中。数据流是顺序数据块。所以我有模态一M1 = [[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4],[5,5,5,5]]和模态二M2 = [[11,11,11,11],[22,22,22,22],[33,33,33,33],[44,44,44,44]]。我想用一个系统来训练这个模型,在训练过程中,成批的顺序数据将随机包含部分或全部信息。

所以在训练过程中会有三种可能性:M1并且M2将拥有其完整的序列数据,或者M1将被裁剪,这意味着序列数据信息将被设置为零(例如M1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]),同时M2将拥有其完整的序列数据信息,或者M2将被裁剪这意味着 in 中的顺序数据信息M2将设置为零,而M1将具有其完整的顺序数据信息。

是否有任何 PyTorch 功能可以自动为我执行此操作,或者有人知道什么是实现此功能的好方法吗?

4

1 回答 1

1

M1M2为 2D 张量或 3D 批量张量用于训练,让p1和为 M1、M2p2p3两者都不归零的概率:

p1 = 0.5 # for example
p2 = 0.3 # for example
# p3 = 1- p1 - p2 = 0.2

randn = torch.rand(1)

if randn < p1:
   M1 *= 0
elif randn > p1 and randn < p1+p2:
   M2 *= 0

# pass M1 and M2 to your model

作为次要注意,如果可能,您可能需要考虑将已擦除数据的任何模态的梯度归零。你真的不希望你的网络知道零值有任何意义,你有学习的风险。

根据模型的结构,这可能是可能的。例如,如果M1由 1 个网络分支M2处理并由不同的分支处理,您可以进行约束,使损失仅通过接收非零输入的分支反向传播。但是,对于其他网络结构,这可能是不可能的。

于 2021-05-20T15:58:01.633 回答