一、dropout的提出和原理

在2012年,Hinton在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出Dropout,目的是为了缓解模型的过拟合。

 co-adaptation:在神经网络中,隐藏层单元之间有很高的相关性。

原理:我们都知道通过平均多个不同网络的预测输出可以很好地降低error,但是这种方法训练和测试时计算代价巨大。Dropout的本质其实与之类似,当每次训练随机忽略部分hidden units的时候(其实就是只用这些高相关性的隐藏层单元的一部分),就相当于在训练不同的模型。

可参考hinton的另一篇论文《Dropout: A Simple Way to Prevent Neural Networks from Overfitting》。

二、dropout的工作流程

训练:dropout是随机的置一些神经元为0,仅仅使用一部分神经元,在backward阶段,只改变那些神经元不为0的节点的参数。

测试:dropout的概率置1,不使用dropout。

三、dropout的代码演示

注意,输出的非0元素是原来的 “1/keep_prob” 倍,保证数据在整体上保持一致。

import tensorflow as tf

dropout = tf.placeholder(tf.float32)
x = tf.Variable(tf.ones([10, 10]))
y = tf.nn.dropout(x, dropout) init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print(sess.run(x))
print (sess.run(y, feed_dict = {dropout: 0.5}))

对应输出

[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
[[0. 2. 0. 2. 2. 0. 2. 0. 0. 2.]
[0. 0. 0. 2. 0. 0. 0. 0. 0. 0.]
[2. 0. 0. 2. 0. 2. 2. 0. 0. 2.]
[2. 2. 0. 2. 2. 0. 2. 2. 0. 2.]
[0. 0. 0. 0. 0. 2. 0. 0. 0. 0.]
[0. 2. 2. 2. 0. 2. 2. 0. 2. 0.]
[2. 0. 0. 0. 2. 2. 0. 0. 2. 0.]
[2. 2. 2. 2. 0. 0. 2. 0. 2. 0.]
[0. 2. 0. 0. 0. 0. 2. 0. 2. 0.]
[0. 2. 0. 0. 0. 0. 0. 2. 2. 2.]]

最新文章

  1. 数据结构:C_链表队列的实现
  2. mciSendString 的两个小坑
  3. bootstrap 水平表单
  4. AJAX避免服务器调用上个页面缓存的办法
  5. OC加强-day04
  6. Java NIO中核心组成和IO区别
  7. win10 iis 创建新站点注意事项
  8. C#中的一些复习。
  9. log4net自定义扩展及配置说明
  10. docker 内部组件结构 -- docker daemon, container,runC
  11. cookie存储中文
  12. MySQL 5.7 InnoDB缓冲池NUMA功能支持——但是别高兴的太早
  13. React Native控件之Listview
  14. 065、容器在Weave中如何通信和隔离?(2019-04-08 周一)
  15. Python sqlalchemy orm 常用操作
  16. [Leetcode 134]汽车加油站 Gas Station (环形)
  17. java学习--面向对象
  18. mySql存储emoji表情报错(mysql incorrect string value)
  19. MySQL 跨库主从
  20. [Redis] - 高并发下Redis缓存穿透解决

热门文章

  1. jira添加工作流
  2. JavaScript调用mysql查询bigint数据精度失真解决方案
  3. Repair Microsoft.VisualStudio.MinShell.Msi.Resources 2203 error And visual studio 2019 key
  4. js获取url参数值的方法总结
  5. TensorFlow2.0教程-使用keras训练模型
  6. 【文本处理命令】之find搜索命令
  7. redis集群之Cluster
  8. javascript的10个开发技巧
  9. Http Header的Transfer-Encoding
  10. oracle学习笔记(二十二) REF 动态游标