pytorch 带batch的tensor类型图像显示操作


Posted in Python onMay 20, 2021

项目场景

pytorch训练时我们一般把数据集放到数据加载器里,然后分批拿出来训练。训练前我们一般还要看一下训练数据长啥样,也就是训练数据集可视化。

那么如何显示dataloader里面带batch的tensor类型的图像呢?

显示图像

绘图最常用的库就是matplotlib:

pip install matplotlib

显示图像会用到matplotlib.pyplot.imshow方法。查阅官方文档可知,该方法接收的图像的通道数要放到后面:

pytorch 带batch的tensor类型图像显示操作

数据加载器中数据的维度是[B, C, H, W],我们每次只拿一个数据出来就是[C, H, W],而matplotlib.pyplot.imshow要求的输入维度是[H, W, C],所以我们需要交换一下数据维度,把通道数放到最后面,这里用到pytorch里面的permute方法(transpose方法也行,不过要交换两次,没这个方便,numpy中的transpose方法倒是可以一次交换完成)

用法示例如下:

>>> x = torch.randn(2, 3, 5)
>>> x.size()
torch.Size([2, 3, 5])
>>> x.permute(1, 2, 0).size()
torch.Size([3, 5, 2])

代码示例

#%% 导入模块
import torch
import matplotlib.pyplot as plt
from torchvision.utils import make_grid
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
#%% 下载数据集
train_file = datasets.MNIST(
    root='./dataset/',
    train=True,
    transform=transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize((0.1307,), (0.3081,))
    ]),
    download=True
)
#%% 制作数据加载器
train_loader = DataLoader(
    dataset=train_file,
    batch_size=9,
    shuffle=True
)
#%% 训练数据可视化
images, labels = next(iter(train_loader))
print(images.size())  # torch.Size([9, 1, 28, 28])
plt.figure(figsize=(9, 9))
for i in range(9):
    plt.subplot(3, 3, i+1)
    plt.title(labels[i].item())
    plt.imshow(images[i].permute(1, 2, 0), cmap='gray')
    plt.axis('off')
plt.show()

这里以mnist数据集为例,演示一下显示效果。我这个代码其实还有一点小问题。数据增强的时候我不是进行标准化了嘛,就是在第7行代码:Normalize((0.1307,), (0.3081,))。

所以,如果你想查看训练集的原始图像,还得反标准化。

标准化:image = (image-mean)/std

反标准化:image = image*std+mean

我拿imagenet中的一个蚂蚁和蜜蜂的子集做了一下实验,标准化前后的区别还是很明显的:

pytorch 带batch的tensor类型图像显示操作

最终效果

pytorch 带batch的tensor类型图像显示操作

补充:PIL,plt显示tensor类型的图像

该方法针对显示Dataloader读取的图像

PIL 与plt中对应操作不同,但原理是一样的,我试过用下方代码Image的方法在plt上show失败了,原因暂且不知。

# 方法1:Image.show()
 # transforms.ToPILImage()中有一句
 # npimg = np.transpose(pic.numpy(), (1, 2, 0))
 # 因此pic只能是3-D Tensor,所以要用image[0]消去batch那一维
 img = transforms.ToPILImage(image[0])
 img.show()

 # 方法2:plt.imshow(ndarray)
 img = image[0] # plt.imshow()只能接受3-D Tensor,所以也要用image[0]消去batch那一维
 img = img.numpy() # FloatTensor转为ndarray
 img = np.transpose(img, (1,2,0)) # 把channel那一维放到最后
 # 显示图片
 plt.imshow(img)
 plt.show()
 cnt += 1

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python爬取网站数据保存使用的方法
Nov 20 Python
优化Python代码使其加快作用域内的查找
Mar 30 Python
快速入门python学习笔记
Dec 06 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
python实现二分类的卡方分箱示例
Nov 22 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
Django路由层URLconf作用及原理解析
Sep 24 Python
Python pip 常用命令汇总
Oct 19 Python
浅析Python模块之间的相互引用问题
Feb 26 Python
pytorch 中nn.Dropout的使用说明
May 20 #Python
Python 线程池模块之多线程操作代码
May 20 #Python
pytorch中[..., 0]的用法说明
May 20 #Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 #Python
pytorch实现手写数字图片识别
解决python3安装pandas出错的问题
May 20 #Python
python 如何在list中找Topk的数值和索引
May 20 #Python
You might like
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
php mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
jquery cookie插件代码类
2009/05/26 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
Python基于pillow判断图片完整性的方法
2016/09/18 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
python 如何区分return和yield
2020/09/22 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
一些Solaris面试题
2013/03/22 面试题
销售经理工作职责
2014/02/03 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
鲁冰花观后感
2015/06/10 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
POST提交数据常见的四种方式
2022/01/18 HTML / CSS
volatile保证可见性及重排序方法
2022/08/05 Java/Android