如何将输出特征图保存在“转发”功能中?

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.savetorch.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了吗? 是的,我做到了 :-(..

以上是关于如何将输出特征图保存在“转发”功能中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ArcGIS中恢复MapGIS制图表达信息

mfc做的一个程序,如何将绘画的矩形、圆形保存到位图?保存成.bmp格式?

Octave,如何保存绘图图?

如何将 D3 图保存为 django 网站中的图像?

matlab中如何将输出的figure中的图像保存在我的文档中

如何将字典和数组保存在同一个存档中(使用 numpy.savez)