如何从PyTorch中获取过程特征图实例详解

 更新时间:2023年01月10日 11:43:28   作者:ViperL1  
特征提取是图像处理过程中常需要用到的一种方法,其效果好坏对模型的泛化能力有至关重要的影响,下面这篇文章主要给大家介绍了关于如何从PyTorch中获取过程特征图的相关资料,需要的朋友可以参考下

一、获取Tensor

神经网络在运算过程中实际上是以Tensor为格式进行计算的,我们只需稍稍改动一下forward函数即可从运算过程中抓到Tensor

代码如下:

base_feature = self.extractor.forward(x)    #正常的前向传递
feature=base_feature.detach()               #抓取tensor
feature_imshow(feature)                     #展示函数(关键代码)

通过将过程张量赋值给一个临时变量,即可将其从前向传递中分离出来且不影响原来的前向传递函数,这种方法远比复杂的hook函数更实用。

将Tensor数据取到后到可视化还需要进行以下几步:

①类型转换

如果网络是在cuda中进行运算,则需要将提取到的tensor转换为cpu类型才能进行接下来的运算

inp = inp.cpu()        #类型转换

②张量拆解

网络中的张量一般是高维度的,需要对其进行降维,一般降至两维即可进行显示。这里以Faster R-CNN中的resnet50特征提取网络为例:输出其特征图尺寸为:[1,1024,68,38],可以很明显的看出,第一维实际上是batch_size,在图像显示中不需要,可以直接去除;第二维1024则是网络提取到的特征图张数,故可以对第二维进行遍历;而第3,4维是特征图的尺寸,直接显示即可。

inp=inp.squeeze(0)    #除去第一维
 
for i in range(len(inp)):
    plt.imshow(transforms.ToPILImage()(inp[i]))    #遍历第二维并将其转换为图像

③图像展示

选取你需要的特征图像,进行保存或使用plt进展示

完整的展示函数如下:

def feature_imshow(inp, title=None):
    inp = inp.cpu()
    inp=inp.squeeze(0)
    print(inp.shape)
    plt.figure(figsize=(12, 7))
    for i in range(len(inp)):
        plt.subplot(4, 5, i+1)    #第一二个参数为图像个数,第三参数为图像位置
        plt.imshow(transforms.ToPILImage()(inp[i]))
        i+=1
    plt.show()
    plt.pause(0.001)

总结

到此这篇关于如何从PyTorch中获取过程特征图的文章就介绍到这了,更多相关PyTorch获取过程特征图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 制作子弹图

    Python 制作子弹图

    这篇文章主要介绍了Python 制作子弹图,众所周知,Python 的应用是非常广泛的,今天我们就通过 matplotlib 库学习下如何制作精美的子弹图,需要的朋友可以参考一下
    2021-12-12
  • 解决pytorch-gpu 安装失败的记录

    解决pytorch-gpu 安装失败的记录

    这篇文章主要介绍了解决pytorch-gpu 安装失败的记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python用分数表示矩阵的方法实例

    python用分数表示矩阵的方法实例

    这篇文章主要给大家介绍了关于python如何利用分数表示矩阵的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python3爬虫中异步协程的用法

    python3爬虫中异步协程的用法

    在本篇文章里小编给大家整理的是关于python3爬虫中异步协程的用法,需要的朋友们可以学习参考下。
    2020-07-07
  • python 如何获取文件夹中的全部文件

    python 如何获取文件夹中的全部文件

    在神经网络准备训练集的时候,经常需要从文件夹中读取全部图片。经常遇到的有两种方式,一种是os.listdir()另一种是glob,本文结合示例代码对python获取文件夹中全部文件讲解的非常详细,需要的朋友参考下吧
    2023-01-01
  • Tkinter组件Checkbutton的具体使用

    Tkinter组件Checkbutton的具体使用

    Checkbutton组件用于实现确定是否选择的按钮,本文主要介绍了Tkinter组件Checkbutton的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python深拷贝与浅拷贝引用

    Python深拷贝与浅拷贝引用

    这篇文章主要介绍了Python深拷贝与浅拷贝引用,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用,下文具体的相关介绍需要的小伙伴可以参考一下
    2022-04-04
  • python 添加环境变量及配置方法

    python 添加环境变量及配置方法

    这篇文章主要介绍了python 添加环境变量的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • pd.read_csv读取文件路径出现的问题解决

    pd.read_csv读取文件路径出现的问题解决

    本文主要介绍了pd.read_csv读取文件路径出现的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • pytorch之关于PyTorch结构介绍

    pytorch之关于PyTorch结构介绍

    这篇文章主要介绍了pytorch之关于PyTorch结构的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论