RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Numpy實現(xiàn)神經(jīng)網(wǎng)絡(luò):如何加入和調(diào)整dropout?

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-04-15 09:59 ? 次閱讀

和DeepMind數(shù)據(jù)科學(xué)家、Udacity深度學(xué)習(xí)導(dǎo)師Andrew Trask一起,基于Numpy手寫神經(jīng)網(wǎng)絡(luò),更深刻地理解dropout這一概念。

總結(jié):幾乎所有目前最先進(jìn)的神經(jīng)網(wǎng)絡(luò)都用到了dropout. 這篇教程介紹如何通過幾行Python代碼在神經(jīng)網(wǎng)絡(luò)中加入Dropout. 讀完這篇教程之后,你將得到一個可以工作的dropout實現(xiàn),并且掌握在任何神經(jīng)網(wǎng)絡(luò)中加入和調(diào)整dropout的技能。

如果你對我的文章感興趣,歡迎在推特上關(guān)注 @iamtrask,也歡迎給我反饋。

直接給我代碼

import numpy as np

X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])

y = np.array([[0,1,1,0]]).T

alpha,hidden_dim,dropout_percent,do_dropout = (0.5,4,0.2,True)

synapse_0 = 2*np.random.random((3,hidden_dim)) - 1

synapse_1 = 2*np.random.random((hidden_dim,1)) - 1

for j in xrange(60000):

layer_1 = (1/(1+np.exp(-(np.dot(X,synapse_0)))))

if(do_dropout):

layer_1 *= np.random.binomial([np.ones((len(X),hidden_dim))],1-dropout_percent)[0] * (1.0/(1-dropout_percent))

layer_2 = 1/(1+np.exp(-(np.dot(layer_1,synapse_1))))

layer_2_delta = (layer_2 - y)*(layer_2*(1-layer_2))

layer_1_delta = layer_2_delta.dot(synapse_1.T) * (layer_1 * (1-layer_1))

synapse_1 -= (alpha * layer_1.T.dot(layer_2_delta))

synapse_0 -= (alpha * X.T.dot(layer_1_delta))

一、什么是dropout?

如同前一篇文章提到的,神經(jīng)網(wǎng)絡(luò)是一個美化的搜索問題。神經(jīng)網(wǎng)絡(luò)中的每一個節(jié)點搜索輸入數(shù)據(jù)和正確的輸出數(shù)據(jù)之間的相關(guān)性。

考慮前一篇中的圖片。曲線表示網(wǎng)絡(luò)對應(yīng)每個具體權(quán)重產(chǎn)生的誤差。曲線的低點(讀作:低誤差)標(biāo)志著權(quán)重“找到”輸入和輸出之間的關(guān)系。圖中的球標(biāo)志著不同的權(quán)重。它們都試圖找到低點。

考慮顏色。球的初始位置是隨機生成的(就像神經(jīng)網(wǎng)絡(luò)的權(quán)重)。如果兩個球隨機開始于同一顏色區(qū)域,那么它們將收斂于同一點。這里存在冗余!浪費算力和內(nèi)存!這正是神經(jīng)網(wǎng)絡(luò)中發(fā)生的事。

為何dropout:dropout有助于防止權(quán)重收斂于同一位置。它通過在前向傳播階段隨機關(guān)閉節(jié)點做到這一點。接著在反向傳播時激活所有節(jié)點。讓我們仔細(xì)看看。

二、如何加入和調(diào)整dropout?

為了在網(wǎng)絡(luò)層上執(zhí)行dropout,我們在前向傳播階段隨機設(shè)置層的值為0——見第10行。

第9行:參數(shù)化是否使用dropout. 我們只打算在訓(xùn)練階段使用dropout. 不要在運行時使用dropout,也不要在測試數(shù)據(jù)集上使用dropout. 此外,這一行也意味著我們需要增大前向傳播的值。這與關(guān)閉的值的數(shù)目成正比。一個簡單的直覺是,如果你關(guān)閉一半的隱藏層,那么你需要加倍前向傳播的值,以正確補償輸出。感謝@karpathy指出這一點。

調(diào)整的最佳實踐

第4行:參數(shù)化dropout百分比。這影響關(guān)閉任何一個節(jié)點的概率。對隱藏層而言,較好的初始值設(shè)定是50%. 如果將dropout應(yīng)用于輸入層,最好不要超過25%.

Hinton主張在調(diào)整dropout的同時調(diào)整隱藏層的大小。首先關(guān)閉dropout,增加隱藏層尺寸,直到你完美地擬合了你的數(shù)據(jù)。接著,使用相同的隱藏層尺寸,開啟dropout進(jìn)行訓(xùn)練。這應(yīng)該是一個近乎最優(yōu)的配置。一旦結(jié)束訓(xùn)練,關(guān)閉dropout。萬歲!你有了一個可以工作的神經(jīng)網(wǎng)絡(luò)!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標(biāo)題:基于Numpy實現(xiàn)神經(jīng)網(wǎng)絡(luò):dropout

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    labview BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)

    請問:我在用labview做BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)故障診斷,在NI官網(wǎng)找到了機器學(xué)習(xí)工具包(MLT),但是里面沒有關(guān)于這部分VI的幫助文檔,對于”BP神經(jīng)網(wǎng)絡(luò)分類“這個范例有很多不懂的地方,比如
    發(fā)表于 02-22 16:08

    【PYNQ-Z2試用體驗】神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識

    語言,使用numpy.dot方法即可計算矩陣乘法。 以上便是一個簡單神經(jīng)網(wǎng)絡(luò)的基本原理,對神經(jīng)網(wǎng)絡(luò)有了基本的認(rèn)識之后,我們才能進(jìn)行復(fù)雜的神經(jīng)網(wǎng)絡(luò)設(shè)計??偨Y(jié)本文講解了
    發(fā)表于 03-03 22:10

    【案例分享】ART神經(jīng)網(wǎng)絡(luò)與SOM神經(jīng)網(wǎng)絡(luò)

    今天學(xué)習(xí)了兩個神經(jīng)網(wǎng)絡(luò),分別是自適應(yīng)諧振(ART)神經(jīng)網(wǎng)絡(luò)與自組織映射(SOM)神經(jīng)網(wǎng)絡(luò)。整體感覺不是很難,只不過一些最基礎(chǔ)的概念容易理解不清。首先ART神經(jīng)網(wǎng)絡(luò)是競爭學(xué)習(xí)的一個代表,
    發(fā)表于 07-21 04:30

    人工神經(jīng)網(wǎng)絡(luò)實現(xiàn)方法有哪些?

    人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)是一種類似生物神經(jīng)網(wǎng)絡(luò)的信息處理結(jié)構(gòu),它的提出是為了解決一些非線性,非平穩(wěn),復(fù)雜的實際問題。那有哪些辦法能實現(xiàn)人工神經(jīng)
    發(fā)表于 08-01 08:06

    如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡(luò)是一種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預(yù)測的計算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)包括:輸入層:根據(jù)現(xiàn)有數(shù)據(jù)獲取輸入的層隱藏層:使用反向傳播優(yōu)化輸入變量權(quán)重的層,以提高模型的預(yù)測
    發(fā)表于 07-12 08:02

    matlab實現(xiàn)神經(jīng)網(wǎng)絡(luò) 精選資料分享

    習(xí)神經(jīng)神經(jīng)網(wǎng)絡(luò),對于神經(jīng)網(wǎng)絡(luò)實現(xiàn)是如何一直沒有具體實現(xiàn)一下:現(xiàn)看到一個簡單的神經(jīng)網(wǎng)絡(luò)模型用于訓(xùn)
    發(fā)表于 08-18 07:25

    使用keras搭建神經(jīng)網(wǎng)絡(luò)實現(xiàn)基于深度學(xué)習(xí)算法的股票價格預(yù)測

    本文使用keras搭建神經(jīng)網(wǎng)絡(luò),實現(xiàn)基于深度學(xué)習(xí)算法的股票價格預(yù)測。本文使用的數(shù)據(jù)來源為tushare,一個免費開源接口;且只取開票價進(jìn)行預(yù)測。import numpy as npimport
    發(fā)表于 02-08 06:40

    理解神經(jīng)網(wǎng)絡(luò)中的Dropout

    dropout是指在深度學(xué)習(xí)網(wǎng)絡(luò)的訓(xùn)練過程中,對于神經(jīng)網(wǎng)絡(luò)單元,按照一定的概率將其暫時從網(wǎng)絡(luò)中丟棄。注意是暫時,對于隨機梯度下降來說,由于是隨機丟棄,故而每一個mini-batch都在
    發(fā)表于 11-16 01:11 ?3796次閱讀
    理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>中的<b class='flag-5'>Dropout</b>

    基于Numpy實現(xiàn)同態(tài)加密神經(jīng)網(wǎng)絡(luò)

    在分布式AI環(huán)境下,同態(tài)加密神經(jīng)網(wǎng)絡(luò)有助于保護(hù)商業(yè)公司知識產(chǎn)權(quán)和消費者隱私。本文介紹了如何基于Numpy實現(xiàn)同態(tài)加密神經(jīng)網(wǎng)絡(luò)。
    的頭像 發(fā)表于 03-27 14:52 ?7951次閱讀
    基于<b class='flag-5'>Numpy</b><b class='flag-5'>實現(xiàn)</b>同態(tài)加密<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    基于Numpy實現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

    和DeepMind數(shù)據(jù)科學(xué)家、Udacity深度學(xué)習(xí)導(dǎo)師Andrew Trask一起,基于Numpy手寫神經(jīng)網(wǎng)絡(luò),更深刻地理解反向傳播這一概念。
    的頭像 發(fā)表于 04-01 09:29 ?5140次閱讀
    基于<b class='flag-5'>Numpy</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>:反向傳播

    如何使用numpy搭建一個卷積神經(jīng)網(wǎng)絡(luò)詳細(xì)方法和程序概述

    內(nèi)容將繼續(xù)秉承之前 DNN 的學(xué)習(xí)路線,在利用Tensorflow搭建神經(jīng)網(wǎng)絡(luò)之前,先嘗試?yán)?b class='flag-5'>numpy手動搭建卷積神經(jīng)網(wǎng)絡(luò),以期對卷積神經(jīng)網(wǎng)絡(luò)的卷積機制、前向傳播和反向傳播的原理和過
    的頭像 發(fā)表于 10-20 10:55 ?6064次閱讀

    如何使用Numpy搭建神經(jīng)網(wǎng)絡(luò)

    很多同學(xué)入門機器學(xué)習(xí)之后,直接用TensorFlow調(diào)包實現(xiàn)神經(jīng)網(wǎng)絡(luò),對于神經(jīng)網(wǎng)絡(luò)內(nèi)在機理知之甚少。
    的頭像 發(fā)表于 05-18 11:02 ?3598次閱讀
    如何使用<b class='flag-5'>Numpy</b>搭建<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    神經(jīng)網(wǎng)絡(luò)中的dropout是什么?怎么使用

    Dropout是在《ImageNet Classification with Deep Convolutional》這篇論文里提出來為了防止神經(jīng)網(wǎng)絡(luò)的過擬合。它的主要思想是讓隱藏層的節(jié)點在每次迭代時(包括正向和反向傳播)有一定幾率(keep-prob)失效。
    的頭像 發(fā)表于 01-28 17:44 ?2.3w次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點 卷積神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)的區(qū)別

    深度神經(jīng)網(wǎng)絡(luò)是一種基于神經(jīng)網(wǎng)絡(luò)的機器學(xué)習(xí)算法,其主要特點是由多層神經(jīng)元構(gòu)成,可以根據(jù)數(shù)據(jù)自動調(diào)整神經(jīng)元之間的權(quán)重,從而
    發(fā)表于 08-21 17:07 ?4090次閱讀

    使用NumPy實現(xiàn)前饋神經(jīng)網(wǎng)絡(luò)

    要使用NumPy實現(xiàn)一個前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Network),我們需要從基礎(chǔ)開始構(gòu)建,包括初始化網(wǎng)絡(luò)參數(shù)、定義激活函數(shù)及其導(dǎo)數(shù)、
    的頭像 發(fā)表于 07-11 16:30 ?1626次閱讀
    RM新时代网站-首页