ubuntu之路——day18 用pytorch完成CNN

本次做業:Andrew Ng的CNN的搭建卷積神經網絡模型以及應用(1&2)做業目錄參考這位博主的整理:https://blog.csdn.net/u013733326/article/details/79827273git

今天要實現的是識別手勢姿式表達的數字github

個人Git傳送門:https://github.com/VVV-LHY/deeplearning.ai/tree/master/CNN/RecognizeGestureNum編程

原本是接着day17用了numpy編了一個卷積層和池化層的前向傳播,而後後向傳播更麻煩了,Andrew Ng的課上也開始用tensorflow和kears了。因此我開始用pytorch完成CNN的編程做業,可是由於Andrew的例子和裏面加載數據全用的tensorflow,我決定發揮主觀能動性,本身轉化pytorch框架。(史前巨坑,由於沒用過pytorch,昨天到今天碰見好多天坑)數組

1.pytorch的默認圖片處理順序網絡

NxCxHxW 意思是通道C在前面,咱們之前的作法是numpy和其餘默認讀法channel在最後面,因此須要下面的方法:數據結構

np的array數組有一個transpose方法,好比:架構

原來的通道是a = (N,H,W,C)框架

轉化 a = a.transpose(0, 3, 1, 2)意思是N不變,C從第三個換到第二個,W和C分別後移一位函數

新的 a = (N, C, H, W)url

2.torchvision包裏面的dataset和dataloader

前者是把數據和標籤合爲dataset而且能夠返回長度、還能夠在方法裏面轉換Tensor,還能夠壓縮(0,255)爲(0,1)用torchvision.transfroms,能夠看官方文檔有不少方法

dataloader能夠加載dataset而且作mini batch的處理 shuffle洗牌等等

可是dataset須要本身重構類裏面的方法,具體能夠自行搜索。

3.損失函數報錯的問題

multi-target not supported at /opt/conda/conda-bld/pytorch_1556653114079/wor

緣由是你loss_func的標籤label的維度不對,須要的是tensor的行向量

yourlabel.squeeze(1)

注意必定要是1,0就變成列向量了。

plus:差很少新手錯誤全是在數據結構上面,由於神經網絡的架構只要一層一層算好(n+2p-kernel_size / s) + 1是絕對不會出錯的,再難再大的網絡畫張圖寫好參數也不可能錯

可是對於沒有用過張量的直接從numpy轉來的新手可能會由於一些方法的不一樣在數據結構上屢屢出錯,因此從載入數據開始就要清楚每一次操做對於數據自己的shape或者size有什麼影響。

相關文章
相關標籤/搜索