如何将输出特征图保存在“转发”功能中?
Posted
技术标签:
【中文标题】如何将输出特征图保存在“转发”功能中?【英文标题】:How can i save the output feature maps in the “forward” function? 【发布时间】:2021-08-29 18:44:53 【问题描述】:我尝试将输出特征图保存在“前进”功能中。
功能是
def forward(self, x):
x = self.forward_features(x)
x = self.head(x)
return x
我尝试的是
y=x[-1].cpu().numpy()
with open('res.pkl', 'wb') as df_file:
pickle.dump(y, file = df_file)
但是一张图片得到了张量,我怎么能得到所有图片的张量?
我做对了吗?
这样的张量
tensor([[0.8981, 0.4641, 0.5740, ..., 0.4593, 0.0317, 0.2112],
[0.2477, 0.8282, 0.1286, ..., 0.9769, 0.5973, 0.4928],
[0.1353, 0.3044, 0.8599, ..., 0.9786, 0.2175, 0.0837],
...,
[0.1227, 0.1812, 0.0287, ..., 0.3544, 0.9123, 0.4494],
[0.9301, 0.2900, 0.1742, ..., 0.0343, 0.6522, 0.9424],
[0.4368, 0.0536, 0.2494, ..., 0.5699, 0.3439, 0.6585]])
【问题讨论】:
输入张量的形状是什么?您可以通过打印x.shape
来检查。顺便说一句,考虑使用torch.save
和torch.load
而不是泡菜。
请看更新帖。那么我所做的是否适合保存输出特征图?对不起,你能写吗?我的意思是“torch.save 和 torch.load 而不是 pickle”。
你打印了张量本身,我要求你打印它的形状print(x.shape)
。在您的示例中,了解代表批次、通道、高度和宽度的维度非常重要。 PyTorch 约定是将输入和输出保存在形状为 BxCxHXW 的 4 维张量中。
关于其他部分,您应该使用方法torch.save(x, 'file_name.pth')
保存任何pytorch 对象,并使用x = torch.load('file_name.pth')
稍后加载它。它包装了 pickle 模型,但更适合 Pytorch 对象。见Pytorch Documentations
我会尝试,但需要很长时间才能完成......但为什么尺寸很重要,或者我能从中得到什么?
【参考方案1】:
如果您希望保存“输出特征图”(即网络倒数第二层的输出,在将它们组合起来以在“头部”中给出最终预测之前),您需要将它们导出到forward
像这样:
def forward(self, x):
feats = self.forward_features(x)
output = self.head(feats)
return output, feats
### ...
my_model = My_Model()
my_model.eval()
_, features = my_model(inputs)
【讨论】:
非常感谢您的回复。这些代码会给我中间功能吗? @User 它为您提供最终输出 (head
) 和“中间特征 (forward_features)
.
我试过了,但每次运行代码时,同一张图片都会得到不同的张量。我该如何解决?
@User 你把你的模型设置为eval
mode了吗?
是的,我做到了 :-(..以上是关于如何将输出特征图保存在“转发”功能中?的主要内容,如果未能解决你的问题,请参考以下文章
mfc做的一个程序,如何将绘画的矩形、圆形保存到位图?保存成.bmp格式?