pytorch 帶batch的tensor類型圖像顯示操作
項(xiàng)目場(chǎng)景
pytorch訓(xùn)練時(shí)我們一般把數(shù)據(jù)集放到數(shù)據(jù)加載器里,然后分批拿出來訓(xùn)練。訓(xùn)練前我們一般還要看一下訓(xùn)練數(shù)據(jù)長(zhǎng)啥樣,也就是訓(xùn)練數(shù)據(jù)集可視化。
那么如何顯示dataloader里面帶batch的tensor類型的圖像呢?
顯示圖像
繪圖最常用的庫就是matplotlib:
pip install matplotlib
顯示圖像會(huì)用到matplotlib.pyplot.imshow方法。查閱官方文檔可知,該方法接收的圖像的通道數(shù)要放到后面:
數(shù)據(jù)加載器中數(shù)據(jù)的維度是[B, C, H, W],我們每次只拿一個(gè)數(shù)據(jù)出來就是[C, H, W],而matplotlib.pyplot.imshow要求的輸入維度是[H, W, C],所以我們需要交換一下數(shù)據(jù)維度,把通道數(shù)放到最后面,這里用到pytorch里面的permute方法(transpose方法也行,不過要交換兩次,沒這個(gè)方便,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])
代碼示例
#%% 導(dǎo)入模塊 import torch import matplotlib.pyplot as plt from torchvision.utils import make_grid from torch.utils.data import DataLoader from torchvision import datasets, transforms #%% 下載數(shù)據(jù)集 train_file = datasets.MNIST( root='./dataset/', train=True, transform=transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]), download=True ) #%% 制作數(shù)據(jù)加載器 train_loader = DataLoader( dataset=train_file, batch_size=9, shuffle=True ) #%% 訓(xùn)練數(shù)據(jù)可視化 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數(shù)據(jù)集為例,演示一下顯示效果。我這個(gè)代碼其實(shí)還有一點(diǎn)小問題。數(shù)據(jù)增強(qiáng)的時(shí)候我不是進(jìn)行標(biāo)準(zhǔn)化了嘛,就是在第7行代碼:Normalize((0.1307,), (0.3081,))。
所以,如果你想查看訓(xùn)練集的原始圖像,還得反標(biāo)準(zhǔn)化。
標(biāo)準(zhǔn)化:image = (image-mean)/std
反標(biāo)準(zhǔn)化:image = image*std+mean
我拿imagenet中的一個(gè)螞蟻和蜜蜂的子集做了一下實(shí)驗(yàn),標(biāo)準(zhǔn)化前后的區(qū)別還是很明顯的:
最終效果
補(bǔ)充:PIL,plt顯示tensor類型的圖像
該方法針對(duì)顯示Dataloader讀取的圖像
PIL 與plt中對(duì)應(yīng)操作不同,但原理是一樣的,我試過用下方代碼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轉(zhuǎn)為ndarray img = np.transpose(img, (1,2,0)) # 把channel那一維放到最后 # 顯示圖片 plt.imshow(img) plt.show() cnt += 1
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python?ModuleNotFoundError:?No?module?named?‘xxx‘可能的解決方
本文主要介紹了Python?ModuleNotFoundError:?No?module?named?‘xxx‘可能的解決方案大全,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧Chat?Gpt<BR>2023-07-07用python生成mysql數(shù)據(jù)庫結(jié)構(gòu)文檔
大家好,本篇文章主要講的是用python生成mysql數(shù)據(jù)庫結(jié)構(gòu)文檔,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01python pandas 對(duì)series和dataframe的重置索引reindex方法
今天小編就為大家分享一篇python pandas 對(duì)series和dataframe的重置索引reindex方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06python對(duì)站點(diǎn)數(shù)據(jù)做EOF且做插值繪制填色圖
這篇文章主要介紹了python對(duì)站點(diǎn)數(shù)據(jù)做EOF且做插值繪制填色圖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,,需要的小伙伴可以參考一下2022-09-09Django集成富文本編輯器summernote的實(shí)現(xiàn)步驟
在最近的項(xiàng)目中小編使用了這個(gè)富文本編輯器,選擇它的主要原因是配置非常簡(jiǎn)單,默認(rèn)支持普通用戶上傳圖片(不像ckeditor默認(rèn)只有staff user才能上傳圖片。如果要讓普通用戶上傳圖片,還需修改源碼裝飾器)。現(xiàn)在讓我們來看看如何使用這個(gè)富文本編輯器2021-05-05FastApi如何快速構(gòu)建一個(gè)web項(xiàng)目的實(shí)現(xiàn)
本文主要介紹了FastApi如何快速構(gòu)建一個(gè)web項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03一個(gè)簡(jiǎn)單的python爬蟲程序 爬取豆瓣熱度Top100以內(nèi)的電影信息
這篇文章主要為大家詳細(xì)介紹了一個(gè)簡(jiǎn)單的python爬蟲程序,爬取豆瓣熱度Top100以內(nèi)的電影信息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04PyQt彈出式對(duì)話框的常用方法及標(biāo)準(zhǔn)按鈕類型
這篇文章主要為大家詳細(xì)介紹了PyQt彈出式對(duì)話框的常用方法及標(biāo)準(zhǔn)按鈕類型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02Python中Numpy和Matplotlib的基本使用指南
numpy庫處理的最基礎(chǔ)數(shù)據(jù)類型是由同種元素構(gòu)成的多維數(shù)組(ndarray),而matplotlib 是提供數(shù)據(jù)繪圖功能的第三方庫,其pyplot子庫主要用于實(shí)現(xiàn)各種數(shù)據(jù)展示圖形的繪制,這篇文章主要給大家介紹了關(guān)于Python中Numpy和Matplotlib的基本使用指南,需要的朋友可以參考下2021-11-11