

下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、卷積神經網絡全面解析之代碼注釋自己平時看了一些論文,但老感覺看完過后就會慢慢的淡忘,某一天重新拾起來的時候又好像沒有看過一樣。所以想習慣地把一些感覺有用的論文中的知識點總結整理一下,一方面在整理過程中,自己的理解也會更深,另一方面也方便未來自己的勘察。更好的還可以放到博客上面與大家交流。因為基礎有限,所以對論文的一些理解可能不太正確, 還望大家不吝指正交流下面是自己對代碼的注釋:cnnexamples mplai n view plain copy1. clear all; close all; clc;2. addpath('./data');3. addpath('
2、./util');4. load mnist_uin t8;5.5. train_x = double(reshape(train_x',28,28,60000)/255;6. test_x = double(reshape(test_x',28,28,10000)/255;7. train_y = double(tra in _y');8. test_y = double(test_y');10.9. % ex110. %will run 1 epoch in about 200 second and get around 11% error.11.
3、%With 100 epochs you'll get around 1.2% error14.12. cnn.layers = 13. struct('type', 'i') %in put layer14. struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %con volutio n layer15. struct('type', 's', 'scale', 2) %sub sam
4、pling layer16. struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolutio n layer17. struct('type', 's', 'scale', 2) %subsampli ng layer18. ;22.23. %這里把cnn的設置給cnnsetup,它會據此構建一個完整的CNN網絡,并返回24. cnn = cnnsetup(cnn, train_x, train_y);25.25.
5、 %學習率26. opts.alpha = 1;27. %每次挑出一個 batchsize 的batch來訓練,也就是每用 batchsize 個樣本就調 整一次權值,而不是28. %把所有樣本都輸入了,計算所有樣本的誤差了才調整一次權值29. opts.batchsize = 50;30. %訓練次數,用同樣的樣本集。我訓練的時候:31. %1 的時候 11.41% error32. %5 的時候 4.2% error33. %10 的時候 2.73% error34. opts.numepochs = 10;36.35. %然后開始把訓練樣本給它,開始訓練這個CNN網絡36. cnn =
6、cnntrain(cnn, train_x, train_y, opts);39.37. %然后就用測試樣本來測試38. er, bad = cnntest(cnn, test_x, test_y);42.39. %plot mean squared error40. plot(cnn.rL);41. %5how test error42. disp(num2str(er*100)'% error');cnnsetup mplai n view plain copy1. function net = cnn setup( net, x, y)2. in putmaps = 1;
7、3. % B=squeeze(A)返回和矩陣A相同元素但所有單一維都移除的矩陣B,單維是滿足size(A,dim)=1 的維。4. % train_x中圖像的存放方式是三維的resh ape(train_x',28,28,60000)前面兩維表示圖像的行與列,%第三維就表示有多少個圖像。這樣squeeze(x(:, :, 1)就相當于取第一個圖像樣本后,再把第三維% 移除,就變成了 28x28的矩陣,也就是得到一幅圖像,再size 一下就得到了訓練樣本圖像的行數與列數了mapsize = size(squeeze(x(:, :, 1);% 下面通過傳入net這個結構體來逐層構建CNN網
8、絡% n = numel(A) 返回數組 A中元素個數% net.layers 中有五個struct 類型的元素,實際上就表示CNN共有五層,這里范圍的是5for l = 1 : nu mel( net.layers) % layerif strcmp( net.layersl.type, 's') %如果這層是 子采樣層% subsampling層的 mapsize,最開始 mapsize 是每張圖的大小28*28%這里除以scale=2,就是pooling之后圖的大小,pooling 域之間沒有重疊,所以 pooli ng 后的圖像為14*14%注意這里的右邊的 mapsi
9、ze保存的都是上一層每張特征map的大小,它會隨著循環進行不斷更新mapsize = floor(mapsize / n et.layersl.scale);for j = 1 : in putmaps % in putmap就是上一層有多少張特征圖n et.layersl.bj = 0; %將偏置初始化為0endendif strcmp( net.layersl.type, 'c') %如果這層是 卷積層%舊的mapsize保存的是上一層的特征map的大小,那么如果卷積核的移動步長是1,那用% kernelsize*kernelsize大小的卷積核卷積上一層的特征map后,得
10、到的新的 map的大小就是下面這樣mapsize = mapsize - n et.layersl.ker nelsize + 1;%該層需要學習的參數個數。每張特征map是一個(后層特征圖數量)*(用來卷積的patch圖的大小)%因為是通過用一個核窗口在上一個特征 map層中移動(核窗口每次移動1個像素),遍歷上一個特征map%層的每個神經元。核窗口由 kernelsize*kernelsize個元素組成,每個元素是一個獨立的權值,所以%就有kernelsize*kernelsize個需要學習的權值,再加一個偏置值。另外,由于是權值共享,也就是%說同一個特征 map層是用同一個具有相同權值元
11、素的kernelsize*kernelsize的核窗口去感受輸入上一%個特征map層的每個神經元得到的,所以同一個特征map,它的權值是一樣的,共享的,權值只取決于%核窗口。然后,不同的特征 map提取輸入上一個特征map層不同5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.的特征,所以采用的核窗口不一樣,也33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.%就是權值不
12、一樣,所以outputmaps 個特征map就有(kernelsize*kernelsize+1) * outputmaps那么多的權值了%但這里fan_out只保存卷積核的權值 W偏置b在下面獨立保存fan _out = n et.layersl.outputmaps * n et.layersl.kern elsize A 2;for j = 1 : n et.layersl.outputmaps % output map% fan_out保存的是對于上一層的一張特征map,我在這一層需要對這一張特征 map提取outputmaps 種特征,%提取每種特征用到的卷積核不同,所以fan_ou
13、t保存的是這一層輸出新的特征需要學習的參數個數%而,fan_in 保存的是,我在這一層,要連接到上一層中所有的特征map,然后用fan_out保存的提取特征%的權值來提取他們的特征。也即是對于每一個當前層特征圖,有多少個參數鏈到前層fann = in putmaps * n et.layersl.kernelsize a 2 for i = 1 : in putmaps % in put map%隨機初始化權值,也就是共有outputmaps個卷積核,對上層的每個特征 map,都需要用這么多個卷積核%去卷積提取特征。% rand(n)是產生nXn的0-1之間均勻取值的數值的矩陣,再減去0.5就相當于產生-0.5到0.5之間的隨機數%再*2 就放大到-1, 1。然后再乘以后面那一數,why?%反正就是將卷積核每個元素初始化為-sqrt(6 / (fan_in + fan_out), sqrt(6 / (fan_in + fan_out)%之間的隨機數。因為這里是權值共享的,也就是對于一張特征map,所有感受野位置的卷積核都是一樣的%所以只需要保存的是in putmaps * outputm aps個卷積核。net.layersl.kij = (ran d( net.layersl.kernels
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人狗情緣800字(14篇)
- 一件難忘的事500字小學作文14篇
- 美麗的蝴蝶標本寫物作文(8篇)
- 秋游活動的點滴回憶記敘文7篇
- 室內裝修材料采購合同
- 我的班主任200字(9篇)
- 幼兒童話故事森林里的新朋友5篇范文
- 暮江吟古典詩詞鑒賞技巧講解教案
- 汽車維修服務代理商質量承諾及售后保障協議
- 特色小吃店經營權轉讓及設備租賃合同范本
- 2024統編版七年級道德與法治下冊期末測試卷(含答案)
- 酒店經銷商合同協議書
- 轉讓釣場合同協議書
- 醫院感染教學課件
- 某市人民醫院裝修工程項目可行性研究報告
- 叉車考試試題模擬100題及答案
- 《全球教育資源庫》課件
- 2025年中考生物模擬測試卷及答案
- 高血壓的治療和護理
- 慢性胃炎考試題及答案
- 2024北京西城區五年級(下)期末數學試題及答案
評論
0/150
提交評論