- 以下均爲個人觀點啦~ 隨看隨更
目錄
transforms.Compose() 多種數據變換,容器
torch.utils.data.DataLoader()數據裝載
torchvision.utils.make_grid() 將一個批次的圖片構造成網格模式
首先說,感覺這本書超級適合新手入門的!!!就是從python開始那種
我是已經亂七八糟的學過python,包括一些plt、numpy、opencv,複習了一遍線性代數,嘗試學習過一丟丟神經網絡纔拿到這本書的,所以感覺嗯,1/3 的內容直接略過了(每當這種情況我都有點心疼書錢)但是對於新手我覺得這本書很好的,內容都是有用的,方面都比較全,雖然不是很詳細,但是可以對應再查嘛
書籍目錄:
- 第一章 淺談人工智能、神經網絡和計算機視覺 P1~P14 相當於概論啦
- 第二章 相關的數學知識 矩陣 、導數 (居然列出了教科書上的公式們,還帶簡單例題)
- 第三章 神經網絡基礎 恍然大悟的感覺,一下子懂了幾個之前看別的書怎麼也沒懂得點
- 第四章 卷積神經網絡 沒看呢,待更
- 第五章 python基礎 什麼列表切片啥特基礎的,還有numpy,plt,甚至有Anaconda的安裝...
- 第六章 pyTorch基礎 沒看呢,待更
- 第七章 遷移學習 沒看呢,待更
- 第八章 圖像風格遷移實戰 就是想學這個纔買的哈哈, 沒看呢,待更
- 第九章 多模型融合 沒看呢,待更
- 第十章 循環神經網絡 沒看呢,待更
- 第十一章 自動編碼器 沒看呢,待更
筆記1:數據預覽和數據裝載 書6.4
原書代碼整理:
import torch
from torchvision import datasets,transforms
import torchvision
from torch.autograd import Variable
import numpy as np
import cv2
transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean=[0.5,0.5,0.5],std=[0.5,0.5,0.5])])
data_train=datasets.MNIST(root="./data", transform=transform, train=True,
download=True
)
data_test=datasets.MNIST(root="./data", transform=transform, train=False)
data_loader_train=torch.utils.data.DataLoader(dataset=data_train,
batch_size=16,
shuffle=True)
data_loader_test=torch.utils.data.DataLoader(dataset=data_test,
batch_size=16,
shuffle=True)
images,labels=next(iter(data_loader_train))
img=torchvision.utils.make_grid(images)
img=img.numpy().transpose(1,2,0)
#cv2.imshow('win',img);
std=[0.5,0.5,0.5]
mean=[0.5,0.5,0.5]
img=img*std+mean
print([labels[i] for i in range(16)])
cv2.imshow('win',img);
key_pressed=cv2.waitKey(0);
執行結果:
代碼詳解:
引入包就不說了 *略
#數據變換
transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean=[0.5,0.5,0.5],std=[0.5,0.5,0.5])])
transforms.Compose() 多種數據變換,容器
transforms.Compose() 相當一種容器,對多種數據變換組合,實例代碼中進行了兩種變換
transforms.ToTensor() 數據類型轉換
將數據轉換爲Tensor類型,才能再Pytorch中進行計算
transforms.Normalize() 標準化變換
#下載訓練集和測試集
data_train=datasets.MNIST(root="./data",
transform=transform,
train=True,
download=True
)
data_test=datasets.MNIST(root="./data",
transform=transform,
train=False)
下載訓練集和測試集,下載到了當前路徑中,實現下載的代碼是torchvision.dataset.MNIST
transform用於指定變換,transform之前已經定義過
train=True 代表載入的是數據集的訓練集部分,=False:測試集部分
#數據裝載
data_loader_train=torch.utils.data.DataLoader(dataset=data_train, #指定數據集
batch_size=64,
shuffle=True)
data_loader_test=torch.utils.data.DataLoader(dataset=data_test, batch_size=64, shuffle=True)
torch.utils.data.DataLoader()數據裝載
batch_size 需要將圖片打包送給模型訓練,設定每個包的大小(圖片數量)
shuffle 是否將圖片打亂
images,labels=next(iter(data_loader_train))
iter()生成迭代器
output:
next()返回迭代器的下一個項目
output:
#網格變換前,四個維度(batch_size,channel,height,weight)
img=torchvision.utils.make_grid(images) #三個維度 (channel,height,weight)
img=img.numpy().transpose(1,2,0) #改變維度順序(height,weight,channel)
torchvision.utils.make_grid() 將一個批次的圖片構造成網格模式
一個批次的圖片整合在了一起(如執行結果),減去了batch_size維度
transpose() 改變維度順序
(channel,height,weight) --> img=img.numpy().transpose(1,2,0) -->(height,weight,channel)
std=[0.5,0.5,0.5]
mean=[0.5,0.5,0.5]
img=img*std+mean
這步處理我沒有懂,列出前後對比吧
#打印這批次圖片的標籤
print([labels[i] for i in range(16)])
#顯示
cv2.imshow('win',img);
key_pressed=cv2.waitKey(0);
書中顯示是用的plt,但是我的plt不顯示圖片。。。
我遇到的坑
1.torchvision 我用的是windows,而Anaconda Cloud 裏torchvision沒有win版本的,其實直接用 pip install torchvision 就可以
但是我的安裝成功了,import torchvision卻會報錯,原以爲我之前都是conda安裝的,所以pip安裝不在一個解析器下所以不好使,但是經歷了一天半(包括想放棄win而安裝ubuntu虛擬機吧啦吧啦)後,終於發現哪出了問題:
我的pillow 包版本低,所以找不到image模塊 所以 conda update pillow 之後就ok了,import torchvision終於正常
2. 我用matplotlib中的pyplot時(plt) plt.imshow()不顯示圖片,受到之前的教訓,把matplotlib升級試了試,問題來了,在它升級過程中,不知道它和pillow有什麼關係,竟將pillow降級了,可想而知,我的torchvision又不能用了
所以最後又把pillow給更新了,用cv2代替plt的顯示功能