精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

利用Pytorch進行CNN詳細剖析

開發 前端
本文緣起于一次CNN作業中的一道題,這道題涉及到了基本的CNN網絡搭建,能夠讓人比較全面地對CNN有一個了解,所以想做一下,于是有了本文。

本文緣起于一次CNN作業中的一道題,這道題涉及到了基本的CNN網絡搭建,在MNIST數據集上的分類結果,Batch Normalization的影響,Dropout的影響,卷積核大小的影響,數據集大小的影響,不同部分數據集的影響,隨機數種子的影響,以及不同激活單元的影響等,能夠讓人比較全面地對CNN有一個了解,所以想做一下,于是有了本文。

工具

開源深度學習庫: PyTorch

數據集: MNIST

實現

初始要求

利用Pytorch進行CNN詳細剖析

首先建立基本的BASE網絡,在Pytorch中有如下code:

 

  1. class Net(nn.Module): 
  2.     def __init__(self): 
  3.         super(Net, self).__init__() 
  4.         self.conv1 = nn.Conv2d(1, 20, kernel_size=(5, 5), stride=(1, 1), padding=0) 
  5.         self.conv2 = nn.Conv2d(20, 50, kernel_size=(5, 5), stride=(1, 1), padding=0) 
  6.         self.fc1 = nn.Linear(4*4*50, 500) 
  7.         self.fc2 = nn.Linear(500, 10) 
  8.  
  9.     def forward(self, x): 
  10.         x = F.max_pool2d(self.conv1(x), 2) 
  11.         x = F.max_pool2d(self.conv2(x), 2) 
  12.         x = x.view(-1, 4*4*50) 
  13.         x = F.relu(self.fc1(x)) 
  14.         x = self.fc2(x) 
  15.         return F.log_softmax(x) 

這部分代碼見 base.py 。

問題A:預處理

利用Pytorch進行CNN詳細剖析

即要求將MNIST數據集按照規則讀取并且tranform到適合處理的格式。這里讀取的代碼沿用了BigDL Python Support的讀取方式,無需細說,根據MNIST主頁上的數據格式可以很快讀出,關鍵block有讀取32位比特的函數:

 

  1. def _read32(bytestream): 
  2.     dt = numpy.dtype(numpy.uint32).newbyteorder('>')    # 大端模式讀取,***字節在前(MSB first
  3.     return numpy.frombuffer(bytestream.read(4), dtype=dt)[0] 

讀出后是(N, 1, 28, 28)的tensor,每個像素是0-255的值,首先做一下歸一化,將所有值除以255,得到一個0-1的值,然后再Normalize,訓練集和測試集的均值方差都已知,直接做即可。由于訓練集和測試集的均值方差都是針對歸一化后的數據來說的,所以剛開始沒做歸一化,所以forward輸出和grad很離譜,后來才發現是這里出了問題。

這部分代碼見 preprocessing.py 。

問題B:BASE模型

利用Pytorch進行CNN詳細剖析

將random seed設置為0,在前10000個訓練樣本上學習參數,***看20個epochs之后的測試集錯誤率。***結果為:

  1. Test set: Average loss: 0.0014, Accuracy: 9732/10000 (97.3%) 

可以看到,BASE模型準確率并不是那么的高。

問題C:Batch Normalization v.s BASE

利用Pytorch進行CNN詳細剖析

在前三個block的卷積層之后加上Batch Normalization層,簡單修改網絡結構如下即可:

 

  1. class Net(nn.Module): 
  2.     def __init__(self): 
  3.         super(Net, self).__init__() 
  4.         self.conv1 = nn.Conv2d(1, 20, kernel_size=(5, 5), stride=(1, 1), padding=0) 
  5.         self.conv2 = nn.Conv2d(20, 50, kernel_size=(5, 5), stride=(1, 1), padding=0) 
  6.         self.fc1 = nn.Linear(4*4*50, 500) 
  7.         self.fc2 = nn.Linear(500, 10) 
  8.         self.bn1 = nn.BatchNorm2d(20) 
  9.         self.bn2 = nn.BatchNorm2d(50) 
  10.         self.bn3 = nn.BatchNorm1d(500) 
  11.  
  12.     def forward(self, x): 
  13.         x = self.conv1(x) 
  14.         x = F.max_pool2d(self.bn1(x), 2) 
  15.         x = self.conv2(x) 
  16.         x = F.max_pool2d(self.bn2(x), 2) 
  17.         x = x.view(-1, 4*4*50) 
  18.         x = self.fc1(x) 
  19.         x = F.relu(self.bn3(x)) 
  20.         x = self.fc2(x) 
  21.         return F.log_softmax(x) 

同樣的參數run一下,得出加了BN的結果為:

  1. Test set: Average loss: 0.0009, Accuracy: 9817/10000 (98.2%) 

由此可見,有明顯的效果提升。

關于Batch Normalization的更多資料參見[2],[5]。

問題D: Dropout Layer

利用Pytorch進行CNN詳細剖析

在***一層即 fc2 層后加一個 Dropout(p=0.5) 后,在BASE和BN上的結果分別為:

 

  1. BASE:Test set: Average loss: 0.0011, Accuracy: 9769/10000 (97.7%) 
  2. BN:  Test set: Average loss: 0.0014, Accuracy: 9789/10000 (97.9%) 

觀察得知,dropout能夠對BASE模型起到一定提升作用,但是對BN模型卻效果不明顯反而降低了。

原因可能在于,BN模型中本身即包含了正則化的效果,再加一層Dropout顯得沒有必要反而可能影響結果。

問題E:SK model

SK model: Stacking two 3x3 conv. layers to replace 5x5 conv. layer

利用Pytorch進行CNN詳細剖析

利用Pytorch進行CNN詳細剖析

如此一番改動后,搭建的SK模型如下:

 

  1. class Net(nn.Module): 
  2.     def __init__(self): 
  3.         super(Net, self).__init__() 
  4.         self.conv1_1 = nn.Conv2d(1, 20, kernel_size=(3, 3), stride=(1, 1), padding=0) 
  5.         self.conv1_2 = nn.Conv2d(20, 20, kernel_size=(3, 3), stride=(1, 1), padding=0) 
  6.         self.conv2 = nn.Conv2d(20, 50, kernel_size=(3, 3), stride=(1, 1), padding=0) 
  7.         self.fc1 = nn.Linear(5*5*50, 500) 
  8.         self.fc2 = nn.Linear(500, 10) 
  9.         self.bn1_1 = nn.BatchNorm2d(20) 
  10.         self.bn1_2 = nn.BatchNorm2d(20) 
  11.         self.bn2 = nn.BatchNorm2d(50) 
  12.         self.bn3 = nn.BatchNorm1d(500) 
  13.         self.drop = nn.Dropout(p=0.5) 
  14.  
  15.     def forward(self, x): 
  16.         x = F.relu(self.bn1_1(self.conv1_1(x))) 
  17.         x = F.relu(self.bn1_2(self.conv1_2(x))) 
  18.         x = F.max_pool2d(x, 2) 
  19.         x = self.conv2(x) 
  20.         x = F.max_pool2d(self.bn2(x), 2) 
  21.         x = x.view(-1, 5*5*50) 
  22.         x = self.fc1(x) 
  23.         x = F.relu(self.bn3(x)) 
  24.         x = self.fc2(x) 
  25.         return F.log_softmax(x) 

在20個epoch后,結果如下,

  1. SK: Test set: Average loss: 0.0008, Accuracy: 9848/10000 (98.5%) 

測試集準確率得到了少許的提高。

這里利用2個3x3的卷積核來代替大的5x5卷積核,參數個數由5x5=25變為了2x3x3=18。實踐表明,這樣使得計算更快了,并且小的卷積層之間的ReLU也很有幫助。

VGG中就使用了這種方法。

問題F:Change Number of channels

利用Pytorch進行CNN詳細剖析

通過將特征圖大小乘上一個倍數,再通過shell程序執行,得到如下結果:

 

  1. SK0.2:  97.7% 
  2. SK0.5:  98.2% 
  3. SK1:    98.5% 
  4. SK1.5:  98.6% 
  5. SK2:    98.5%  (max 98.7%) 

在特征圖分別為4,10, 30, 40時,最終的準確度基本是往上提升的。這在一定程度上說明,在沒有達到過擬合前,增大特征圖的個數,即相當于提取了更多的特征,提取特征數的增加有助于精度的提高。

這部分代碼見 SK_s.py 和 runSK.sh 。

問題G:Use different training set sizes

利用Pytorch進行CNN詳細剖析

同樣通過腳本運行,增加參數

 

  1. parser.add_argument('--usedatasize', type=intdefault=60000, metavar='SZ'
  2.                     help='use how many training data to train network'

表示使用的數據大小,從前往后取 usebatchsize 個數據。

這部分程序見 SK_s.py 和 runTrainingSize.sh 。

運行的結果如下:

 

  1. 500:   84.2% 
  2. 1000:  92.0% 
  3. 2000:  94.3% 
  4. 5000:  95.5% 
  5. 10000: 96.6% 
  6. 20000: 98.4% 
  7. 60000: 99.1% 

由此可以明顯地看出,數據越多,結果的精度越大。

太少的數據無法準確反映數據的整體分布情況,而且容易過擬合,數據多到一定程度效果也會不明顯,不過,大多數時候我們總還是嫌數據太少,而且更多的數據獲取起來也有一定難度。

問題H:Use different training sets

利用Pytorch進行CNN詳細剖析

采用腳本完成,這部分程序見 SK_0.2.py 和 diffTrainingSets.sh 。

運行結果如下:

 

  1.  0-10000: 98.0% 
  2. 10000-20000: 97.8% 
  3. 20000-30000: 97.8% 
  4. 30000-40000: 97.4% 
  5. 40000-50000: 97.5% 
  6. 50000-60000: 97.7% 

由此可見,采用不同的訓練樣本集合訓練出來的網絡有一定的差異,雖不是很大,但是畢竟顯示出了不穩定的結果。

問題I:Random Seed’s effects

利用Pytorch進行CNN詳細剖析

采用 runSeed.sh 腳本完成,用到了全部60000個訓練集。

運行的結果如下:

 

  1. Seed      0:  98.9% 
  2. Seed      1:  99.0% 
  3. Seed     12:  99.1% 
  4. Seed    123:  99.0% 
  5. Seed   1234:  99.1% 
  6. Seed  12345:  99.0% 
  7. Seed 123456:  98.9% 

事實上在用上整個訓練集的時候,隨機數生成器的種子設置對于***結果的影響不大。

問題J:ReLU or Sigmoid?

利用Pytorch進行CNN詳細剖析

將ReLU全部換成Sigmoid后,用全部60000個訓練集訓練,有對比結果如下:

 

  1. ReLU SK_0.2:  99.0% 
  2. igmoid SK_0.2:  98.6% 

由此可以看出,在訓練CNN時,使用ReLU激活單元比Sigmoid激活單元要更好一些。原因可能在于二者機制的差別,sigmoid在神經元輸入值較大或者較小時,輸出值會近乎0或者1,這使得許多地方的梯度幾乎為0,權重幾乎得不到更新。而ReLU雖然增加了計算的負擔,但是它能夠顯著加速收斂過程,并且也不會有梯度飽和問題。

 

責任編輯:未麗燕 來源: Whatbeg's blog
相關推薦

2009-12-30 10:02:37

ADO.NET Ent

2009-12-01 18:07:12

VS 2003工具

2009-12-28 13:53:01

ADO.NET記錄集

2024-01-03 10:23:11

卷積神經網絡CNNpytorch

2009-09-02 10:26:23

JSP和BEAN

2009-09-29 10:00:40

Spring AOP框

2009-08-27 17:14:36

C# Socket

2011-06-15 12:36:58

JSPBEAN

2009-09-03 16:58:49

C#內存管理

2010-03-03 14:30:35

Linux睡眠休眠

2009-12-16 11:16:03

VS 2005開發環境

2010-03-08 14:40:27

Linux進程調度

2009-08-31 17:26:32

C#異常處理

2009-08-27 17:51:34

C#匿名方法

2009-09-18 10:00:17

C#數組操作

2010-02-23 10:32:20

Python 腳本

2010-03-15 14:58:58

交換技術

2010-03-04 17:36:01

Linux系統分區

2009-09-11 11:17:04

C#引用類型

2020-03-26 15:16:26

EdgeBoard
點贊
收藏

51CTO技術棧公眾號

亚洲熟妇无码av在线播放| 国产日韩欧美黄色| 亚洲av无码国产精品久久| gay欧美网站| 欧美激情一区二区三区蜜桃视频| 国产中文字幕亚洲| 日韩乱码一区二区| 日韩电影免费网站| 精品国产1区二区| 国产精品视频分类| 国产v日韩v欧美v| 日本一区二区成人在线| 国产精品成人一区二区三区| 免费视频网站在线观看入口| 亚洲激情中文| 在线播放国产精品| 久久久久久久久久影视| 国产精品无码久久久久| 欧美日韩国产区| 日韩第一页在线观看| 亚州av在线播放| 国产一区不卡精品| 国产精品免费一区| 狠狠躁夜夜躁人人爽天天高潮| 日韩欧美精品一区| 亚洲美女激情视频| 无码人妻久久一区二区三区蜜桃| av在线不卡精品| 婷婷成人综合网| 中文字幕日韩精品无码内射| 色网站在线视频| 国模私拍在线观看| 福利一区在线| 色噜噜狠狠一区二区三区果冻| 欧美 日韩 国产精品| 在线观看二区| 久久久蜜臀国产一区二区| 国产精品日韩一区二区| 国产日韩免费视频| 精品系列免费在线观看| 国产精品日韩在线播放| 免费污污视频在线观看| 在线综合欧美| 国内成人精品视频| 欧美人妻精品一区二区免费看| 日韩精品免费一区二区在线观看| 亚洲日韩中文字幕| 亚洲黄色在线网站| 免费看成人哺乳视频网站| 亚洲精品国产欧美| 一级欧美一级日韩片| 一区二区在线视频观看| 日韩写真欧美这视频| 亚洲免费成人在线视频| 96sao精品免费视频观看| 欧美日韩综合一区| 一级做a免费视频| 97久久精品一区二区三区的观看方式| 欧美日韩亚洲综合在线| 日日干夜夜操s8| 国精品产品一区| 欧美人妇做爰xxxⅹ性高电影| 向日葵污视频在线观看| 欧美一区二区三区婷婷| 6080午夜不卡| 丰满饥渴老女人hd| 成人福利一区| 亚洲乱码一区二区| 四虎国产精品成人免费入口| 精品视频国产| 日韩视频亚洲视频| 国产一级在线观看视频| 日韩视频一区二区三区在线播放免费观看| 97精品在线视频| 69视频免费看| 激情五月激情综合网| 91免费看网站| 视频午夜在线| 国产精品视频一二三| 手机在线视频你懂的| 欧美另类tv| 日韩欧美在线视频免费观看| 国产情侣av自拍| 成人51免费| 亚洲精品av在线| 一区二区三区在线观看免费视频| 天天av综合| 性日韩欧美在线视频| 欧美另类高清videos的特点| 国产一区不卡精品| 欧美成熟毛茸茸复古| 自拍视频在线播放| 亚洲成人高清在线| 91网址在线播放| 日韩一二三区| 亚洲欧洲国产伦综合| 希岛爱理中文字幕| 国产亚洲在线观看| 国产综合福利在线| 手机在线精品视频| 久久精品水蜜桃av综合天堂| 国产成人精品免费看在线播放| 1024在线看片你懂得| 欧美性色黄大片| 丰满少妇xbxb毛片日本| 第四色成人网| 97久久超碰福利国产精品…| 国产尤物在线观看| 久久久亚洲午夜电影| 激情成人开心网| 国产伊人久久| 亚洲欧美视频在线| 国产一级一级片| 精品一区二区三区在线观看国产| 蜜桃传媒视频麻豆第一区免费观看 | 日本久久综合| 97高清免费视频| 国产美女自慰在线观看| 国产色91在线| 国产91在线免费| 999在线精品| 久久精品亚洲一区| wwwwww在线观看| 91首页免费视频| 亚洲精品久久久久久久蜜桃臀| 亚洲网站免费| 中文字幕欧美国内| 91黑人精品一区二区三区| av爱爱亚洲一区| 成人一级生活片| 国产精品一区二区精品| 日韩在线免费视频| 中文字幕视频免费观看| 国产日韩欧美精品电影三级在线 | 91小视频xxxx网站在线| 欧美日韩国产乱码电影| 亚洲第一视频区| 久久精品九九| 久久久久久九九| 欧美日韩国产观看视频| 亚洲国产福利在线| 麻豆一区产品精品蜜桃的特点| 国产一区二区毛片| 久久视频免费在线| 久久精品免视看国产成人| 久久国内精品一国内精品| 精品乱码一区内射人妻无码| 国产日韩精品一区二区三区| 国产精品涩涩涩视频网站| 一区二区三区韩国免费中文网站| 68精品国产免费久久久久久婷婷| 国产成人短视频| 91丨九色丨蝌蚪丨对白| 亚洲欧洲日韩一区二区三区| 91高清国产视频| 日韩精品免费| 成人黄色片网站| 成人看av片| 日韩三级视频中文字幕| 免费中文字幕在线| 国产不卡视频在线观看| 欧日韩免费视频| 六月丁香久久丫| www.cao超碰| 日韩制服诱惑| 色噜噜狠狠狠综合曰曰曰88av| 国产一区二区视频免费| 久久精品人人爽人人爽| 精品999在线| 欧美丰满日韩| 91视频免费在线| 欧美videos另类精品| 亚洲精品成人久久电影| 国产成人一级片| 国产清纯在线一区二区www| 国产wwwxx| 久久久国产精品| 国产伦精品一区二区三区照片91 | 一级片在线免费观看视频| 一区在线中文字幕| 亚洲色偷偷色噜噜狠狠99网| 亚洲欧美日本视频在线观看| 亚洲免费精品视频| 亚洲综合影院| 情事1991在线| 精品国产99久久久久久| 精品成人佐山爱一区二区| 亚洲男人第一av| 中文字幕亚洲综合久久菠萝蜜| 性生交大片免费看l| 久久久久久婷| 最新中文字幕久久| 性欧美lx╳lx╳| 成人a级免费视频| 中文字幕色婷婷在线视频| xxxxx成人.com| 午夜一区在线观看| 制服.丝袜.亚洲.中文.综合| 日日夜夜综合网| 亚洲日穴在线视频| 人妻精品久久久久中文字幕| 精品一区二区三区免费视频| 久久国产亚洲精品无码| 国产精品久久久久久久久妇女 | 精品一级毛片| 国产精品久久波多野结衣| 欧美精品资源| 午夜精品久久久久久久99热| 免费观看在线午夜影视| 亚洲色图18p| 人妻无码中文字幕免费视频蜜桃| 欧美美女网站色| 高清乱码免费看污| 亚洲图片欧美视频| 永久免费看mv网站入口| 久久久久久电影| 丝袜熟女一区二区三区 | 69亚洲乱人伦| 精品一区二区三区免费观看 | 欧美黑人一级片| 国产精品视频你懂的| 亚洲中文字幕无码av| 国产精品1区2区| 成年人免费在线播放| 在线成人欧美| 8x8ⅹ国产精品一区二区二区| 久久网站免费观看| 日韩高清在线播放| 免费成人高清在线视频theav| 国产精品日韩欧美一区二区三区| 久久亚洲精精品中文字幕| 国产美女高潮久久白浆| 国产成+人+综合+亚洲欧美| 国产精品成人一区二区| 吉吉日韩欧美| 欧美一级黑人aaaaaaa做受| 爱看av在线| 欧美激情视频在线| 日本在线观看大片免费视频| 欧美成人手机在线| 国产网站在线免费观看| www.亚洲男人天堂| 国产鲁鲁视频在线观看特色| 日韩在线中文视频| 黄视频网站在线看| 久久综合久久八八| 中文字幕伦理免费在线视频 | 日韩亚洲欧美综合| av在线资源观看| 欧美va亚洲va香蕉在线 | 日韩精品久久久久| 四虎影视2018在线播放alocalhost| 亚洲韩国日本中文字幕| 三级黄视频在线观看| 亚洲色图校园春色| 国产精品二线| 色一区av在线| 黄色网址在线免费| 欧美黑人性视频| av丝袜在线| 国产91精品高潮白浆喷水| 黄色成人免费网| 国产日本欧美一区二区三区在线| 亚洲男女网站| 国产激情美女久久久久久吹潮| 欧美日韩导航| 日韩欧美精品一区二区三区经典| 欧美韩日一区| 日本人妻伦在线中文字幕| 亚洲经典在线看| 黄色一级一级片| 青青草视频一区| 国产老头和老头xxxx×| eeuss国产一区二区三区| 黄瓜视频污在线观看| 国产精品人成在线观看免费| 欧美黑吊大战白妞| 欧美色道久久88综合亚洲精品| 波多野结衣在线观看一区| 91精品国产综合久久小美女| 日日夜夜精品免费| 国产小视频国产精品| 亚洲www色| 日韩免费精品视频| 精品一区91| 欧美专区一二三 | 久久嫩草精品久久久久| 91ts人妖另类精品系列| 亚洲福利视频导航| 中文字幕一区二区人妻| 欧美精品一区二区高清在线观看| 国产在线视频你懂得| 免费91麻豆精品国产自产在线观看| 国产乱码午夜在线视频| 成人激情视频在线观看| 欧美亚洲大陆| 国产日韩欧美大片| 日韩影院在线观看| 久久精品aⅴ无码中文字字幕重口| 91麻豆精东视频| a级片在线观看免费| 日本韩国一区二区三区| 超碰在线人人干| 在线性视频日韩欧美| 瑟瑟视频在线看| 91九色在线观看| 成人在线亚洲| 国产欧美在线一区| 成人一区在线看| www欧美com| 欧美色男人天堂| 手机亚洲第一页| 午夜精品一区二区三区在线视频| 只有精品亚洲| 天天综合色天天综合色hd| 一区二区三区国产盗摄| 亚洲av午夜精品一区二区三区| 国产精品美女久久久久久2018 | 欧美精品在线视频| 欧洲一级在线观看| 97精品国产97久久久久久| 日韩精品一级| 伊人久久大香线蕉成人综合网 | 亚洲午夜久久久久久久久电影网 | 日韩久久精品一区| 欧美精品hd| 国产精品日韩欧美大师| 欧美美乳视频| 鲁一鲁一鲁一鲁一澡| 成人少妇影院yyyy| 久久免费视频播放| 精品日韩99亚洲| 亚洲91av| 99视频免费观看| 欧美日韩国产高清| 永久av免费在线观看| 亚洲欧洲日产国码二区| 亚洲一区二区视频在线播放| 一本色道久久综合狠狠躁篇怎么玩 | 国产精品伦理一区二区| 9i看片成人免费看片| 亚洲欧美精品一区| 欧美日韩美女| 日本10禁啪啪无遮挡免费一区二区| 一本色道久久精品| 免费观看一级一片| 日韩欧美福利视频| 青青操在线视频| 日韩美女在线观看| 精品精品久久| 日本黄色的视频| 一区二区三区日韩精品视频| 国产黄a三级三级三级| 欧美国产视频一区二区| 国产91精品入| 日日碰狠狠添天天爽超碰97| 久久影院电视剧免费观看| 三级网站在线播放| 色妞久久福利网| 91成人精品观看| 成年人视频网站免费| 成人av电影在线| 99久久精品国产亚洲| 一区二区三区四区在线观看视频 | aa成人免费视频| 亚洲高清激情| 熟女俱乐部一区二区| 欧美日韩一区二区三区在线 | 在线观看av日韩| 国产精品大尺度| 亚洲精品无遮挡| 欧美在线观看视频| 日韩理论电影大全| 超碰人人cao| 欧美日韩亚洲精品内裤| a天堂中文在线88| 亚洲一区二区三区四区视频| 亚洲激情偷拍| 国产7777777| 日韩你懂的电影在线观看| 伊人成综合网站| 婷婷视频在线播放| 91在线精品一区二区三区| 中文字幕日韩第一页| 久久久久久久香蕉网| 国内精品久久久久久久久电影网| 黄色a级三级三级三级| 五月婷婷综合激情| 亚洲xxxxxx| 久久人人97超碰人人澡爱香蕉| 美日韩一区二区| 日韩成人高清视频| 中文字幕久热精品在线视频| 99re6热只有精品免费观看| 人妻无码视频一区二区三区| 亚洲综合色婷婷| a中文在线播放| 久久av一区二区三区亚洲| 精品一区二区在线免费观看| 欧美bbbbbbbbbbbb精品|