Python 不同批量的pytorch恢复模型

Python 不同批量的pytorch恢复模型,python,neural-network,deep-learning,pytorch,Python,Neural Network,Deep Learning,Pytorch,我有一个关于如何重新加载不同批量的pytorch模型的问题。在培训中,我的批量大小是64,但在推断中,我希望批量大小是1(逐个馈送数据)。这是我用来保存和恢复模型的代码: torch.save(agent.qnetwork_local.state_dict(), './ckpt/checkpoint.pth') saved_model = QNetwork(state_size=37, action_size=4, seed=0) saved_model.load_state_dict(torc

我有一个关于如何重新加载不同批量的pytorch模型的问题。在培训中,我的批量大小是64,但在推断中,我希望批量大小是1(逐个馈送数据)。这是我用来保存和恢复模型的代码:

torch.save(agent.qnetwork_local.state_dict(), './ckpt/checkpoint.pth')
saved_model = QNetwork(state_size=37, action_size=4, seed=0)
saved_model.load_state_dict(torch.load('./ckpt/checkpoint.pth'))
我在运行推理模型时遇到了这个错误:

RuntimeError: size mismatch, m1: [37 x 1], m2: [37 x 64] at /Users/soumith/code/builder/wheel/pytorch-src/aten/src/TH/generic/THTensorMath.cpp:2070
此错误意味着模型的输入必须为37x64,其中37是数据维度,64是训练批大小。但测试输入是37x1,这意味着数据维度是37,批量大小是1

对于重新装载pytorch模型中的不同批量,是否有任何解决方案?
非常感谢。

我最终成功地在中使用了
batch\u size=1


建立模型时,可以使用-1动态表示批大小。 例如,下面是前级代码

def forward(self, x):
     x = self.conv1(x)
     x = self.layer1(x)
     x = self.layer2(x)
     x = self.avgpool(x)
     x = x.view(-1, 37)
 #instead using x.view(64,37) 
     x = self.fc(x)

希望它能帮助您

您使用了
model.eval()
函数吗?没有,我没有使用。这个函数的作用是什么?我是pytorch的新手,对它不太熟悉,谢谢。它使您的模型可以进行推理。请看:在以推理模式将数据馈送到模型之前,我尝试了model.eval(),但仍然犯了同样的错误。@Yanpei您是否解决了在推理时更改批量大小的问题?
def forward(self, x):
     x = self.conv1(x)
     x = self.layer1(x)
     x = self.layer2(x)
     x = self.avgpool(x)
     x = x.view(-1, 37)
 #instead using x.view(64,37) 
     x = self.fc(x)