0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

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

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

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

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

如果你對(duì)我的文章感興趣,歡迎在推特上關(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ò)是一個(gè)美化的搜索問(wèn)題。神經(jīng)網(wǎng)絡(luò)中的每一個(gè)節(jié)點(diǎn)搜索輸入數(shù)據(jù)和正確的輸出數(shù)據(jù)之間的相關(guān)性。

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

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

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

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

為了在網(wǎng)絡(luò)層上執(zhí)行dropout,我們?cè)谇跋騻鞑ルA段隨機(jī)設(shè)置層的值為0——見(jiàn)第10行。

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

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

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

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

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

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

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

收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

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

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

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

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

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

    人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)是一種類(lèi)似生物神經(jīng)網(wǎng)絡(luò)的信息處理結(jié)構(gòu),它的提出是為了解決一些非線性,非平穩(wěn),復(fù)雜的實(shí)際問(wèn)題。那有哪些辦法能實(shí)現(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ù)測(cè)的計(jì)算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)包括:輸入層:根據(jù)現(xiàn)有數(shù)據(jù)獲取輸入的層隱藏層:使用反向傳播優(yōu)化輸入變量權(quán)重的層,以提高模型的預(yù)測(cè)
    發(fā)表于 07-12 08:02

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

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

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

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

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

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

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

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

    如何使用numpy搭建一個(gè)卷積神經(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手動(dòng)搭建卷積神經(jīng)網(wǎng)絡(luò),以期對(duì)卷積神經(jīng)網(wǎng)絡(luò)的卷積機(jī)制、前向傳播和反向傳播的原理和過(guò)
    的頭像 發(fā)表于 10-20 10:55 ?6237次閱讀

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

    很多同學(xué)入門(mén)機(jī)器學(xué)習(xí)之后,直接用TensorFlow調(diào)包實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),對(duì)于神經(jīng)網(wǎng)絡(luò)內(nèi)在機(jī)理知之甚少。
    的頭像 發(fā)表于 05-18 11:02 ?3763次閱讀
    如何使用<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》這篇論文里提出來(lái)為了防止神經(jīng)網(wǎng)絡(luò)的過(guò)擬合。它的主要思想是讓隱藏層的節(jié)點(diǎn)在每次迭代時(shí)(包括正向和反向傳播)有一定幾率(keep-prob)失效。
    的頭像 發(fā)表于 01-28 17:44 ?2.3w次閱讀

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

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

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

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

    深度學(xué)習(xí)入門(mén):簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)的構(gòu)建與實(shí)現(xiàn)

    深度學(xué)習(xí)中,神經(jīng)網(wǎng)絡(luò)是核心模型。今天我們用 Python 和 NumPy 構(gòu)建一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)。 神經(jīng)網(wǎng)絡(luò)由多個(gè)神經(jīng)元組成,
    的頭像 發(fā)表于 01-23 13:52 ?432次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品