深度學習之卷積神經網絡(Convolutional Neural Networks, CNN)(二)

前面我們說了CNN的一般層次結構, 每個層的作用及其參數的優缺點等內容.深度學習之卷積神經網絡(Convolutional Neural Networks, CNN)_fenglepeng的博客-CSDN博客?

一 CNN參數初始化及參數學習方法

和機器學習很多算法一樣, CNN在進行訓練之前也要進行參數的初始化操作. 我們知道, 在機器學習中的參數值一般都是隨機給定的. 但是, 這CNN的參數初始化又和機器學習中有所不同.?

1.1 W的初始化

由于CNN 中的參數更新的過程一般是通過BP算法實現的,再由前面我們在深度學習之BP算法一文中得到的BP算法參數更新公式可以發現, 參數更新過程中卷積核(權重值W)參與了連乘運算,因此一定不能初始化W = 0, 否則參數W無法更新.

另外考慮到太大(小)的W值可能導致梯度下降太快(慢), 一般選擇很小的隨機數, 且要求w為服從均值為0, 方差未知(建議選擇2/n, n為權重的個數)的正態分布的隨機序列.

1.2 b的初始化

一般直接設置為0,在存在ReLU激活函數的網絡中,也可以考慮設置為一個很小的數字.

1.3 CNN模型參數學習方法

CNN中的參數學習方法主要是BP算法.

前面我們知道,?BP算法的關鍵在于反向傳播時的鏈式求導求得誤差值?. 然后使用梯度下降的方法進行參數W和b的更新.

二 CNN過擬合

神經網絡的學習能力受神經元數目以及神經網絡層次的影響,神經元數目越大,神經網絡層次越高,那么神經網絡的學習能力越強,那么就有可能出現過擬合的問題;(通俗來講:神經網絡的空間表達能力變得更緊豐富了)

CNN是通過卷積核對樣本進行特征提取的, 當特征提取過多(即學習到了不重要的特征)就回造成過擬合現象的發生, 這里主要介紹兩種解決過擬合的方法, 分別為正則化和Dropout.

2.1 正則化

和機器學習一樣, 通過在損失函數加上L1,L2正則項可以有效地防止過擬合的問題.

?2.2 Dropout

一般情況下,對于同一組訓練數據,利用不同的神經網絡訓練之后,求其輸出的平均值可以減少overfitting。Dropout就是利用這個原理,每次丟掉一半左右的隱藏層神經元,相當于在不同的神經網絡上進行訓練,這樣就減少了神經元之間的依賴性,即每個神經元不能依賴于某幾個其它的神經元(指層與層之間相連接的神經元),使神經網絡更加能學習到與其它神經元之間的更加健壯robust(魯棒性)的特征。另外Dropout不僅減少overfitting,還能提高準確率。?

Dropout通過隨機刪除神經網絡中的神經元來解決overfitting問題,在每次迭代的時候,只使用部分神經元訓練模型獲取W和d的值. 具體的可以參見PDF文檔http://nooverfit.com/wp/wp-content/uploads/2016/07/Dropout-A-Simple-Way-to-Prevent-Neural-Networks-from-Overfitting.pdf

p=0.5 # dropout保留一個神經元存活的概率def train_out(X):# H1 = np.maximum(0,np.dot(ω1,X)+b1) # 第一次dropout,注意做了一次除以P。U1 = (np.random.rand(*H1.shape)<p)/p  # [0. 2. 2. 2. 0. 0. 2. 2. 0. 0.]# drop轉換為0或者原始值H1 *= U1H2 = np.maximum(0,np.dot(ω2,H1)+b2)# 第二次dropout,其中除以P。U2 =(np.random.rand(*H2.shape)<p)/p# 類似上方H2 *= U2out = np.dot(ω3,H2)+b3 # BP操作:計算梯度,參數更新def predict(X):#直接前向計算,不乘以PH1=np.maximum(0,np.dot(ω1,X)+b1)H2=np.maximum(0,np.dot(ω2,H1)+b2)out=np.dot(ω3,H2)+b3

2.3 方案選擇

  • 一般都可以使用Dropout解決過擬合問題
  • 回歸算法中使用L2范數相比于Softmax分類器,更加難以優化。對于回歸問題,首先考慮是否可以轉化為分類問題,比如:用戶對于商品的評分,可以考慮將得分結果分成1~5分,這樣就變成了一個分類問題。如果實在沒法轉化為分類問題的,那么使用L2范數的時候要非常小心,比如在L2范數之前不要使用Dropout。
  • 一般建議使用L2范數或者Dropout來減少神經網絡的過擬合
    ?

三、卷積神經網絡訓練算法

和一般的機器學習算法一樣,需要先定義Loss Function,衡量預測值和實際值之間的誤差,一般使用平方和誤差公式找到最小損失函數的W和b的值,CNN中常使用的是SGD其實就是一般深度學習中的BP算法;SGD需要計算W和b的偏導,BP算法就是計算偏導用的,BP算法的核心是求導鏈式法則。

在神經網絡中一般采用Mini-batch SGD,主要包括以下四個步驟的循環:

  • 采樣一個batch的數據
  • 前向計算損失loss
  • 反向傳播計算梯度(一個batch上所有樣本的梯度和)
  • 利用梯度更新權重參數

使用BP算法逐級求解△ω和△b的值。

根據SGD隨機梯度下降迭代更新ω和b。

  • w_i^+=w_i-\eta \Delta w_i
  • d_i^+=d_i-\eta \Delta d_i

四、池化層誤差反向傳播

Maxpool最大池化層反向傳播:除最大值處繼承上層梯度外,其他位置置零。

平均池化:將殘差均分為2×2=4份,傳遞到前面小區域的4個單元中。

def max_pool_backward_naive(dout,cache):x,pool_param=cacheHH,WW=pool_param['pool_height'],pool_param['pool_width']s=pool_param['stride']N,C,H,W=x.shapeH_new=1+(H-HH)/sW_new=1+(W-WW)/sdx=np.zeros_like(x)for i in range(N):for j in range(C):for k in range(H_new):for l in range(W_new):windows=x[i,j,k*s:HH+k*s,l*s:WW+l*s]m=np.max(windows)dx[i,j,k*s:HH+k*s,l*s:WW+l*s]=(windows==m)*dout[i,j,k,l]return dx

梯度下降

梯度下降是常用的卷積神經網絡模型參數求解方法,根據每次參數更新使用樣本數量的多少,可以分為以下三類:

  • 批量梯度下降(batch gradient descent,BGD);
  • 小批量梯度下降(mini-batch gradient descent,MBGD);
  • 隨機梯度下降(stochastic gradient descent,SGD)。

詳細請參考:機器學習之梯度下降法(GD)和坐標軸下降法(CD)

深度學習超參數

學習率(Learning Rate )

學習率被定義為每次迭代中成本函數中最小化的量。也即下降到成本函數的最小值的速率是學習率,它是可變的。從梯度下降算法的角度來說,通過選擇合適的學習率,可以使梯度下降法得到更好的性能。

一般常用的學習率有0.00001,0.0001,0.001,0.003,0.01,0.03,0.1,0.3,1,3,10

學習率調整策略

  • fixed固定策略,學習率始終是一個固定值。
  • step 均勻分步策略,如果設置為step,則還需要設置一個stepsize, 返回base_lr * gamma (floor(iter / stepsize)) 其中iter表示當前的迭代次數。floor(9.9)=9, 其功能是“下取整”。
  • base_lr * gamma ?iter , iter為當前迭代次數。
  • multistep 多分步或不均勻分步。剛開始訓練網絡時學習率一般設置較高,這樣loss和accuracy下降很快,一般前200000次兩者下降較快,后面可能就需要我們使用較小的學習率了。step策略由于過于平均,而loss和accuracy的下降率在整個訓練過程中又是一個不平均的過程,因此有時不是很合適。fixed手工調節起來又很麻煩,這時multistep可能就會派上用場了。multistep還需要設置一個stepvalue。這個參數和step很相似,step是均勻等間隔變化,而multistep則是根據 stepvalue值變化
    • multistep設置示例(caffe)
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
# The learning rate policy
lr_policy: "multistep"
gamma: 0.9
stepvalue: 5000
stepvalue: 7000
stepvalue: 8000
stepvalue: 9000
stepvalue: 9500
  • poly: 學習率進行多項式誤差, 返回 base_lr *(1 - iter/max_iter) ?power

深度學習訓練過程

過擬合

過擬合就是模型把數據學習的太徹底,以至于把噪聲數據的特征也學習到了,這樣就會導致在后期測試的時候不能夠很好地識別數據,即不能正確的分類,模型泛化能力太差。

欠擬合

欠擬合模型沒有很好地捕捉到數據特征,不能夠很好地擬合數據。

誤差的變化

根據特征的層來調整參數

左圖很粗糙,顯示不出底層特征,可能是因為網絡不收斂或者學習速率設置不好或者是因為懲罰因子設置的太小。 右圖合理,特征多樣,比較干凈、平滑

https://www.microsoft.com/zh-cn/download/details.aspx?id=48145&751be11f-ede8-5a0c-058c-2ee190a24fa6=True

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454080.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GCC Inline ASM GCC內聯匯編

GCC 支持在C/C代碼中嵌入匯編代碼&#xff0c;這些匯編代碼被稱作GCC Inline ASM——GCC內聯匯編。這是一個非常有用的功能&#xff0c;有利于我們將一些C/C語法無法表達的指令直接潛入C/C代碼中&#xff0c;另外也允許我們直接寫 C/C代碼中使用匯編編寫簡潔高效的代碼。1.基本…

Hadoop1.x版本升級Hadoop2.x

引言 隨著企業數據化和Hadoop的應用越加廣泛&#xff0c;hadoop1.x的框架設計越來越無法滿足人們對需求&#xff0c;Apache一直在對Hadoop1.x進行修改&#xff0c;最后推出了新一代的Hadoop2.x。從業界使用分布式系統的變化趨勢和 hadoop 框架的長遠發展來看&#xff0c;MapRed…

本頁由試用版打印控件lodop6.2.6輸出_Visual Basic 6.0 Sirk 迷你版

Visual Basic 6.0 Sirk 迷你版 VB6 Sirk Mini 2019更新1、支持主流操作系統&#xff0c;避免原版安裝失敗的問題&#xff1a;支持Windows XP、Vista、Win7、Win8、Win10(32位、64位)。2、保留大部分常用功能&#xff0c;避免精簡版過度精簡&#xff1a;包含原版完整控件&#x…

深度學習之卷積神經網絡 LeNet

卷積神經網絡典型CNN LeNet&#xff1a;最早用于數字識別的CNNLeNet5&#xff1a;現在常說的一般就是LeNet5AlexNet&#xff1a;2012ILSVRC冠軍&#xff0c;遠超第二名的CNN&#xff0c;比LeNet更深&#xff0c;用多層小卷積疊加來替換單個的大卷積ZF Net&#xff1a;2013ILSV…

python爬蟲常見反爬措施_爬蟲常見的反爬措施有哪些

爬蟲常見的反爬措施有三種&#xff1a;1、header頭部信息解決方法&#xff1a;加User-Agent值&#xff1a;如果不加header頭&#xff0c;部分網站服務器判斷不到用戶的訪問來源&#xff0c;所以會返回一個404錯誤來告知你是一個爬蟲&#xff0c;拒絕訪問&#xff0c;解決辦法如…

dom4j的讀寫xml文件,讀寫xml字符串

百度了一些博客&#xff0c;大同小異&#xff0c;在選取jar包工具的時候大概看了下&#xff0c;大抵是jdom原始&#xff0c;dom4j優秀。于是做了些練習。 參考&#xff1a;http://www.cnblogs.com/mengdd/archive/2013/06/05/3119927.html 1 package com.test.xml;2 3 import j…

深度學習之數據增強方案和TensorFlow操作

一、數據增強的方法介紹 增加訓練數據&#xff0c; 則能夠提升算法的準確率&#xff0c; 因為這樣可以避免過擬合&#xff0c; 而避免了過擬合你就可以增大你的網絡結構了。 當訓練數據有限的時候&#xff0c; 可以通過一些變換來從已有的訓練數據集中生成一些新的數據&#x…

移動前端頭部標簽(HTML5 head meta)

<!DOCTYPE html> <!-- 使用 HTML5 doctype&#xff0c;不區分大小寫 --> <html lang"zh-cmn-Hans"> <!-- 更加標準的 lang 屬性寫法 http://zhi.hu/XyIa --> <head><!-- 聲明文檔使用的字符編碼 --><meta charsetutf-8>&l…

python新建文件夾口令_python編程快速上手—口令保管箱

之前小編為大家整理了如何成為一個優秀的程序員應該具備的品質&#xff0c;接下來為大家展示一個簡單有趣的python小項目&#xff0c;從中體會編程的樂趣。小編了解這個小項目之后&#xff0c;很是驚奇&#xff0c;覺得python竟然還可以做這樣的事情。為什么要建立口令保管箱&a…

django+nginx+uwsgi部署web站點

環境&#xff1a; django&#xff1a;1.8.16 python&#xff1a;2.7.13 pip&#xff1a;2.7 uwsgi&#xff1a;2.0.15 project路徑&#xff1a; /opt/cmdb/ Uwsgi的安裝配置 1、安裝python2.7 &#xff08;省略安裝過程&#xff09; 2、安裝pip2.7 &#xff08;省略安裝過程&…

GCC源代碼閱讀

獲取GCC源代碼 閱讀源代碼的第一步是獲取源代碼&#xff0c;巧婦難為無米之炊嘛&#xff01; 使用以下任意方法均可獲得gcc源代碼&#xff1a; svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir &#xff08;摘自http://gcc.gnu.org/svn.html&#xff09;git clone …

Nginx 動靜分離

頁面動靜分離 后端 調用tomcat 集群 示例&#xff1a; server { listen 80; server_name www.www2.com ; root /web/www2/htmlloation /img/ {alias /web/www2/html/img/;}location ~ (\.jsp)|(\.do)$ {proxy_pass http:## //serverip:port;proxy_redirect off;// 重定向 指…

Linux 狀態命令之內存狀態 vmstat

語法 vmstat 常見命令格式如下&#xff1a; vmstat [-a] [-n] [-S unit] [delay [ count]] vmstat [-s] [-n] [-S unit] vmstat [-m] [-n] [delay [ count]] vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat [-f] vmstat [-V]命…

使用OpenSSL實現CA證書的搭建過程

個人博客地址&#xff1a;http://www.pojun.tech/ 歡迎訪問 什么是CA CA,Catificate Authority,通俗的理解就是一種認證機制。它的作用就是提供證書&#xff08;也就是服務端證書&#xff0c;由域名&#xff0c;公司信息&#xff0c;序列號&#xff0c;簽名信息等等組成&#…

最近公共祖先 python_求二叉搜索樹的最近公共祖先

給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。百度百科中最近公共祖先的定義為&#xff1a;“對于有根樹 T 的兩個結點 p、q&#xff0c;最近公共祖先表示為一個結點 x&#xff0c;滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節點也可以是它自己的祖先)。”…

gdb使用實例

第一篇 概論我們將學習使用gdb來調試通過一個通過串行線同PC相連的嵌入式系統。Gdb可以調試各種程序&#xff0c;包括C、C、JAVA、PASCAL、FORAN和一些其它的語言。包括GNU所支持的所有微處理器的匯編語言。在gdb的所有可圈可點的特性中&#xff0c;有一點值得注意&#xff0c;…

Linux 監控命令之 netstat

netstat命令用于顯示與IP、TCP、UDP和ICMP協議相關的統計數據&#xff0c;一般用于檢驗本機各端口的網絡連接情況。netstat是在內核中訪問網絡及相關信息的程序&#xff0c;它能提供TCP連接&#xff0c;TCP和UDP監聽&#xff0c;進程內存管理的相關報告。 語法 netstat [-acC…

C#遞歸搜索指定目錄下的文件或目錄

來源&#xff1a;https://www.cnblogs.com/huhangfei/p/5012978.html誠然可以使用現成的Directory類下的GetFiles、GetDirectories、GetFileSystemEntries這幾個方法實現同樣的功能&#xff0c;但請相信我不是蛋疼&#xff0c;原因是這幾個方法在遇上【System Volume Informati…

solr 配置

創建 SolrHome(solrCore) 1.解壓 solr-4.10.4.tgz 到 /usr/local/solr 2.將 solr-4.10.4/example/solr 下所有文件拷貝到 /usr/local/solrhome (此 solrhome 為自己創建的) solrhome 是 solr 運行主目錄&#xff0c;可包含多個 SolrCore 目錄SolrCore 目錄中包含運行 Solr 實例…

mfc程序轉化為qt_10年程序員:我都學過這些語言,2019年開始我再也不是程序員......

為什么學編程2008年&#xff0c;高中畢業的我問一個已經工作兩年的親戚&#xff1a;什么專業工資高&#xff1f;他告訴我&#xff1a;程序員。2008年成都最低工資好像是800元&#xff0c;我的生活費也是800元&#xff0c;據他所說程序員出來的工資是2000&#xff0c;于是開始了…