《深度學習之PyTorch實戰計算機視覺》筆記

首先說,感覺這本書超級適合新手入門的!!!就是從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()  標準化變換

x^{norma}=\frac{x-mean}{std}

#下載訓練集和測試集
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的顯示功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章