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求解最大公约数的实现方法
Aug 20 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
python保存网页图片到本地的方法
Jul 24 Python
Python中关键字global和nonlocal的区别详解
Sep 03 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 Python
python实现logistic分类算法代码
Feb 28 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
php生成xml简单实例代码
2009/12/16 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
smarty中常用方法实例总结
2015/08/07 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
php compact 通过变量创建数组
2016/11/15 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
JavaScript类的写法
2016/09/17 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
python的中异常处理机制
2018/08/30 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
顶撞领导检讨书
2014/01/29 职场文书
教师党员个人总结
2015/02/10 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
python实现简单的井字棋
2021/05/26 Python
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL