日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pytorch dataset_【小白学PyTorch】16.TF2读取图片的方法

發(fā)布時(shí)間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch dataset_【小白学PyTorch】16.TF2读取图片的方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
<>

?擴(kuò)展之tensorflow2.0 | 15 TF2實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服裝分類任務(wù)

小白學(xué)PyTorch | 14 tensorboardX可視化教程

小白學(xué)PyTorch | 13 EfficientNet詳解及PyTorch實(shí)現(xiàn)

小白學(xué)PyTorch | 12 SENet詳解及PyTorch實(shí)現(xiàn)

小白學(xué)PyTorch | 11 MobileNet詳解及PyTorch實(shí)現(xiàn)

小白學(xué)PyTorch | 10 pytorch常見運(yùn)算詳解

小白學(xué)PyTorch | 9 tensor數(shù)據(jù)結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu)

小白學(xué)PyTorch | 8 實(shí)戰(zhàn)之MNIST小試牛刀

小白學(xué)PyTorch | 7 最新版本torchvision.transforms常用API翻譯與講解

小白學(xué)PyTorch | 6 模型的構(gòu)建訪問遍歷存儲(chǔ)(附代碼)

小白學(xué)PyTorch | 5 torchvision預(yù)訓(xùn)練模型與數(shù)據(jù)集全覽

小白學(xué)PyTorch | 4 構(gòu)建模型三要素與權(quán)重初始化

小白學(xué)PyTorch | 3 淺談Dataset和Dataloader

小白學(xué)PyTorch | 2 淺談?dòng)?xùn)練集驗(yàn)證集和測(cè)試集

小白學(xué)PyTorch | 1 搭建一個(gè)超簡(jiǎn)單的網(wǎng)絡(luò)

小白學(xué)PyTorch | 動(dòng)態(tài)圖與靜態(tài)圖的淺顯理解

參考目錄:

  • 1 PIL讀取圖片

  • 2 TF讀取圖片

  • 3 TF構(gòu)建數(shù)據(jù)集

本文的代碼已經(jīng)上傳,在作者公眾號(hào)后臺(tái)回復(fù)【PyTorch】獲取。

1 PIL讀取圖片

想要把一個(gè)圖片,轉(zhuǎn)換成RGB3通道的一個(gè)張量,我們?cè)趺醋瞿?#xff1f;大家第一反應(yīng)應(yīng)該是PIL這個(gè)庫

from?PIL?import?Image
import?numpy?as?np
image?=?Image.open('./bug1.jpg')
image.show()

展示的圖片:

然后我們這個(gè)image現(xiàn)在是PIL格式的,我們使用numpy.array()來將其轉(zhuǎn)換成numpy的張量的形式:

image?=?np.array(image)
print(image.shape)
>>>(326,?312,?3)

可以看到,這個(gè)第三維度是3。對(duì)于pytorch而言,數(shù)據(jù)的第一維度應(yīng)該是樣本數(shù)量,第二維度是通道數(shù),第三四是圖像的寬高,因此PIL讀入的圖片,往往需要把通道數(shù)的這個(gè)維度移動(dòng)到第二維度上才能對(duì)接上pytorch的形式。(transpose方法來實(shí)現(xiàn)這個(gè)功能,這里不細(xì)說)

2 TF讀取圖片

下面是重點(diǎn)啦,對(duì)于tensorflow,tf中自己帶了一個(gè)解碼函數(shù),先看一下我的文件目錄:

import?tensorflow?as?tf
images?=?tf.io.gfile.glob('./*.jpeg')
print(images,type(images))
>?['.\\bug1.jpeg',?'.\\bug2.jpeg']?<class?'list'>

可以看出來:

  • 這個(gè)tensorflow.io.gfile.glob()是讀取路徑下的所有符合條件的文件,并且把路徑做成一個(gè)list返回;
  • 這個(gè)功能也可以用glob庫函數(shù)實(shí)現(xiàn),我記得是glob.glob()方法;
  • 這里的bug1和bug2其實(shí)是同一張圖片,都是上面的那個(gè)小兔子。
image?=?tf.io.read_file('./bug1.jpeg')
image?=?tf.image.decode_jpeg(image,channels=3)
print(image.shape,type(image))
>?(326,?312,?3)?<class?'tensorflow.python.framework.ops.EagerTensor'>

需要注意的是:

  • tf.io.read_file()這個(gè)得到的返回值是二進(jìn)制格式,所以需要下面的tf.image.decode_jpeg進(jìn)行一個(gè)解碼;
  • decode_jpeg的第一個(gè)參數(shù)就是讀取的二進(jìn)制文件,然后channels是輸出的圖片的通道數(shù),3就是RPB三個(gè)通道,如果是1的話,就是灰度圖片,ratio是圖片大小的一個(gè)縮小比例,默認(rèn)是1,可以是2和4,一會(huì)看一下ratio=2的情況;
  • 這個(gè)image的type是一個(gè)tensorflow特別的Tensor的形式,而不是pytorch的那種tensor的形式了。
image?=?tf.io.read_file('./bug1.jpeg')
image?=?tf.image.decode_jpeg(image,channels=1,ratio=2)
print(image.shape,type(image))
>?(163,?156,?1)?<class?'tensorflow.python.framework.ops.EagerTensor'>

寬高都變成了原來的一半,然后通道數(shù)是1,都和預(yù)想的一樣。使用decode_jpeg等解碼函數(shù)得到的結(jié)果,是uint8的類型的,簡(jiǎn)單地說就是整數(shù),0到255范圍的。在對(duì)圖片進(jìn)行操作的時(shí)候,我們需要將其標(biāo)準(zhǔn)化到0到1區(qū)間的,因此需要將其轉(zhuǎn)換成float32類型的。所以對(duì)上述代碼進(jìn)行補(bǔ)充:

image?=?tf.io.read_file('./bug1.jpeg')
image?=?tf.image.decode_jpeg(image,channels=1,ratio=2)
print(image.shape,type(image))
image?=?tf.image.resize(image,[256,256])?#?統(tǒng)一圖片大小
image?=?tf.cast(image,tf.float32)?#?轉(zhuǎn)換類型
image?=?image/255?#?歸一化
print(image)

從結(jié)果來看,數(shù)據(jù)類型已經(jīng)改變:

3 TF構(gòu)建數(shù)據(jù)集

下面是dataset更正式的寫法,關(guān)于TF2的問題,不要百度!百度到的都是TF1的解答,看的我暈死了,TF的API的結(jié)構(gòu)真是不太友好。。。

def?read_image(path):
????image?=?tf.io.read_file(path)
????image?=?tf.image.decode_jpeg(image,?channels=3,?ratio=1)
????image?=?tf.image.resize(image,?[256,?256])??#?統(tǒng)一圖片大小
????image?=?tf.cast(image,?tf.float32)??#?轉(zhuǎn)換類型
????image?=?image?/?255??#?歸一化
????return?image
images?=?tf.io.gfile.glob('./*.jpeg')
dataset?=?tf.data.Dataset.from_tensor_slices(images)
AUTOTUNE?=?tf.data.experimental.AUTOTUNE
dataset?=?dataset.map(read_image,num_parallel_calls=AUTOTUNE)
dataset?=?dataset.shuffle(1).batch(1)
for?a?in?dataset.take(2):
????print(a.shape)

代碼中需要注意的是:

  • glob獲取一個(gè)文件的list,本次就兩個(gè)文件名字,一個(gè)bug1.jpeg,一個(gè)bug2.jpeg;
  • tf.data.Dataset.from_tensor_slices()返回的就是一個(gè)tensorflow的dataset類型,可以簡(jiǎn)單理解為一個(gè)可迭代的list,并且有很多其他方法;
  • dataset.map就是用實(shí)現(xiàn)定義好的函數(shù),對(duì)處理dataset中每一個(gè)元素,在上面代碼中是把路徑的字符串變成該路徑讀取的圖片張量,對(duì)圖片的預(yù)處理應(yīng)該也在這部分進(jìn)行吧;
  • dataset.shuffle就是亂序,.batch()就是把dataset中的元素組裝batch;
  • 在獲取dataset中的元素的時(shí)候,TF1中有什么迭代器的定義啊,什么iter,但是TF2不用這些,直接.take(num)就行了,這個(gè)num就是從dataset中取出來的batch的數(shù)量,也就是循環(huán)的次數(shù)吧。
  • AUTOTUNE = tf.data.experimental.AUTOTUNE 就是根據(jù)你的cpu的情況,自動(dòng)判斷多線程的數(shù)量。上面代碼的輸出結(jié)果為:
- END -

往期精彩回顧

適合初學(xué)者入門人工智能的路線及資料下載

機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印

機(jī)器學(xué)習(xí)在線手冊(cè)

深度學(xué)習(xí)筆記專輯

《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯

AI基礎(chǔ)下載

機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯

獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開:

https://t.zsxq.com/662nyZF

本站qq群704220115。

加入微信群請(qǐng)掃碼進(jìn)群(如果是博士或者準(zhǔn)備讀博士請(qǐng)說明):

總結(jié)

以上是生活随笔為你收集整理的pytorch dataset_【小白学PyTorch】16.TF2读取图片的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。