如何使用带有部分信息的批次训练pytorch模型

2024-04-26 13:19:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在这个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]]。我想用一个系统来训练这个模型,在训练过程中,成批的顺序数据将随机地包含部分或全部信息

因此,在训练期间将有三种可能性:M1M2将有其完整的顺序数据,或者将对M1进行剪裁,这意味着顺序数据信息将被设置为零(例如M1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]),而M2将有其完整的顺序数据信息,或者M2将被剪裁,这意味着M2中的顺序数据信息将设置为零,而M1将具有其完整的顺序数据信息

是否有任何PyTorch函数可以自动为我实现这一点,或者有人知道实现这一点的好方法吗


Tags: 数据函数模型信息顺序过程系统模式
1条回答
网友
1楼 · 发布于 2024-04-26 13:19:15

M1M2为训练用2D张量或3D批处理张量,设p1p2p3为M1、M2或两者均不为零的概率:

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由一个网络分支处理,而M2由另一个分支处理,则可以进行约束,以便损耗仅通过接收非零输入的分支反向传播。但对于其他网络结构,这可能是不可能的

相关问题 更多 >