0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Numpy实现神经网络:如何加入和调整dropout?

zhKF_jqr_AI 来源:未知 作者:李倩 2018-04-15 09:59 次阅读

和DeepMind数据科学家、Udacity深度学习导师Andrew Trask一起,基于Numpy手写神经网络,更深刻地理解dropout这一概念。

总结:几乎所有目前最先进的神经网络都用到了dropout. 这篇教程介绍如何通过几行Python代码在神经网络中加入Dropout. 读完这篇教程之后,你将得到一个可以工作的dropout实现,并且掌握在任何神经网络中加入和调整dropout的技能。

如果你对我的文章感兴趣,欢迎在推特上关注 @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?

如同前一篇文章提到的,神经网络是一个美化的搜索问题。神经网络中的每一个节点搜索输入数据和正确的输出数据之间的相关性。

考虑前一篇中的图片。曲线表示网络对应每个具体权重产生的误差。曲线的低点(读作:低误差)标志着权重“找到”输入和输出之间的关系。图中的球标志着不同的权重。它们都试图找到低点。

考虑颜色。球的初始位置是随机生成的(就像神经网络的权重)。如果两个球随机开始于同一颜色区域,那么它们将收敛于同一点。这里存在冗余!浪费算力和内存!这正是神经网络中发生的事。

为何dropout:dropout有助于防止权重收敛于同一位置。它通过在前向传播阶段随机关闭节点做到这一点。接着在反向传播时激活所有节点。让我们仔细看看。

二、如何加入和调整dropout?

为了在网络层上执行dropout,我们在前向传播阶段随机设置层的值为0——见第10行。

第9行:参数化是否使用dropout. 我们只打算在训练阶段使用dropout. 不要在运行时使用dropout,也不要在测试数据集上使用dropout. 此外,这一行也意味着我们需要增大前向传播的值。这与关闭的值的数目成正比。一个简单的直觉是,如果你关闭一半的隐藏层,那么你需要加倍前向传播的值,以正确补偿输出。感谢@karpathy指出这一点。

调整的最佳实践

第4行:参数化dropout百分比。这影响关闭任何一个节点的概率。对隐藏层而言,较好的初始值设定是50%. 如果将dropout应用于输入层,最好不要超过25%.

Hinton主张在调整dropout的同时调整隐藏层的大小。首先关闭dropout,增加隐藏层尺寸,直到你完美地拟合了你的数据。接着,使用相同的隐藏层尺寸,开启dropout进行训练。这应该是一个近乎最优的配置。一旦结束训练,关闭dropout。万岁!你有了一个可以工作的神经网络!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4574

    浏览量

    98749
  • 深度学习
    +关注

    关注

    73

    文章

    5239

    浏览量

    119910

原文标题:基于Numpy实现神经网络:dropout

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview BP神经网络实现

    请问:我在用labview做BP神经网络实现故障诊断,在NI官网找到了机器学习工具包(MLT),但是里面没有关于这部分VI的帮助文档,对于”BP神经网络分类“这个范例有很多不懂的地方,比如
    发表于 02-22 16:08

    【PYNQ-Z2试用体验】神经网络基础知识

    语言,使用numpy.dot方法即可计算矩阵乘法。 以上便是一个简单神经网络的基本原理,对神经网络有了基本的认识之后,我们才能进行复杂的神经网络设计。总结本文讲解了
    发表于 03-03 22:10

    【案例分享】ART神经网络与SOM神经网络

    今天学习了两个神经网络,分别是自适应谐振(ART)神经网络与自组织映射(SOM)神经网络。整体感觉不是很难,只不过一些最基础的概念容易理解不清。首先ART神经网络是竞争学习的一个代表,
    发表于 07-21 04:30

    人工神经网络实现方法有哪些?

    人工神经网络(Artificial Neural Network,ANN)是一种类似生物神经网络的信息处理结构,它的提出是为了解决一些非线性,非平稳,复杂的实际问题。那有哪些办法能实现人工神经
    发表于 08-01 08:06

    简单神经网络实现

    最简单的神经网络
    发表于 09-11 11:57

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络是一种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输入层:根据现有数据获取输入的层隐藏层:使用反向传播优化输入变量权重的层,以提高模型的预测
    发表于 07-12 08:02

    matlab实现神经网络 精选资料分享

    神经神经网络,对于神经网络实现是如何一直没有具体实现一下:现看到一个简单的神经网络模型用于训
    发表于 08-18 07:25

    基于BP神经网络的PID控制

    最近在学习电机的智能控制,上周学习了基于单神经元的PID控制,这周研究基于BP神经网络的PID控制。神经网络具有任意非线性表达能力,可以通过对系统性能的学习来实现具有最佳组合的PID控
    发表于 09-07 07:43

    使用keras搭建神经网络实现基于深度学习算法的股票价格预测

    本文使用keras搭建神经网络实现基于深度学习算法的股票价格预测。本文使用的数据来源为tushare,一个免费开源接口;且只取开票价进行预测。import numpy as npimport
    发表于 02-08 06:40

    理解神经网络中的Dropout

    dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在
    发表于 11-16 01:11 3523次阅读
    理解<b class='flag-5'>神经网络</b>中的<b class='flag-5'>Dropout</b>

    基于Numpy实现同态加密神经网络

    在分布式AI环境下,同态加密神经网络有助于保护商业公司知识产权和消费者隐私。本文介绍了如何基于Numpy实现同态加密神经网络
    的头像 发表于 03-27 14:52 7586次阅读
    基于<b class='flag-5'>Numpy</b><b class='flag-5'>实现</b>同态加密<b class='flag-5'>神经网络</b>

    基于Numpy实现神经网络:反向传播

    和DeepMind数据科学家、Udacity深度学习导师Andrew Trask一起,基于Numpy手写神经网络,更深刻地理解反向传播这一概念。
    的头像 发表于 04-01 09:29 4815次阅读
    基于<b class='flag-5'>Numpy</b><b class='flag-5'>实现</b><b class='flag-5'>神经网络</b>:反向传播

    如何使用numpy搭建一个卷积神经网络详细方法和程序概述

    内容将继续秉承之前 DNN 的学习路线,在利用Tensorflow搭建神经网络之前,先尝试利用numpy手动搭建卷积神经网络,以期对卷积神经网络的卷积机制、前向传播和反向传播的原理和过
    的头像 发表于 10-20 10:55 5846次阅读

    如何使用Numpy搭建神经网络

    很多同学入门机器学习之后,直接用TensorFlow调包实现神经网络,对于神经网络内在机理知之甚少。
    的头像 发表于 05-18 11:02 3379次阅读
    如何使用<b class='flag-5'>Numpy</b>搭建<b class='flag-5'>神经网络</b>

    神经网络中的dropout是什么?怎么使用

    Dropout是在《ImageNet Classification with Deep Convolutional》这篇论文里提出来为了防止神经网络的过拟合。它的主要思想是让隐藏层的节点在每次迭代时(包括正向和反向传播)有一定几率(keep-prob)失效。
    的头像 发表于 01-28 17:44 2.1w次阅读