Machine learning Pyrotch重塑以修改forward()中的批大小

Machine learning Pyrotch重塑以修改forward()中的批大小,machine-learning,deep-learning,pytorch,Machine Learning,Deep Learning,Pytorch,我有一个形状张量,比如:[4,10],其中4是批量大小,10是输入样本缓冲区的长度。现在,我知道它实际上是[4,5+5],即输入样本缓冲区由两个长度为5的窗口组成,可以独立处理,最好是并行处理。我所做的是,在模型的forward()内,我首先将张量重塑为[8,5],在其上运行我的层,然后将其重塑为[4,-1]并返回。我希望从中得到的是,Pytorch将在每个窗口(类似于子批处理)上并行运行我的模型,有效地生成并行for循环。它运行正常,Pytorch没有抱怨什么,但我得到了奇怪的结果。在我开始调

我有一个形状张量,比如:
[4,10]
,其中4是批量大小,10是输入样本缓冲区的长度。现在,我知道它实际上是
[4,5+5]
,即输入样本缓冲区由两个长度为5的窗口组成,可以独立处理,最好是并行处理。我所做的是,在模型的forward()内,我首先将张量重塑为[8,5],在其上运行我的层,然后将其重塑为[4,-1]并返回。我希望从中得到的是,Pytorch将在每个窗口(类似于子批处理)上并行运行我的模型,有效地生成并行for循环。它运行正常,Pytorch没有抱怨什么,但我得到了奇怪的结果。在我开始调试我的模型之前,我想知道Pytorch是否可以这样工作。

嗯,它不能。原因是pytorch用于张量整形。这可以通过运行下面的小程序代码看到。 最好在PyTrk中有一个类似“重新批处理”的函数,它将处理正确的内存布局,作为并行构建的基础(前提是它甚至可以在一般情况下高效地完成内存)。
是的,你所描述的并没有什么荒谬之处,pytorch应该能够以这种方式工作。如果您提供一些带有输入和预期输出的代码示例,我们可以帮助您调试所有这些!请将此信息添加到您的问题(作为您已经尝试过的代码的一部分)并删除此答案(因为它不是您问题的真正答案)。干杯
import torch

conv = torch.nn.Conv1d(1,3,1)

def conv_batch(t, conv, window):
    batch = t.shape[0]
    t = t.view(-1, t.shape[1], window)
    t = conv(t)
    t = t.view(batch, t.shape[1], -1)
    return t

batch = 1
channels = 1
width = 4

window = 2

x = torch.arange(batch*channels*width)
x = x.view(batch,channels,width).float()

r1 = conv(x)
r2 = conv_batch(x, conv, window)

print(r1)
print(r2)
print(r1==r2)