Drop_out--防止过拟合
2024-09-06 13:43:19
一、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.]]
最新文章
- 数据结构:C_链表队列的实现
- mciSendString 的两个小坑
- bootstrap 水平表单
- AJAX避免服务器调用上个页面缓存的办法
- OC加强-day04
- Java NIO中核心组成和IO区别
- win10 iis 创建新站点注意事项
- C#中的一些复习。
- log4net自定义扩展及配置说明
- docker 内部组件结构 -- docker daemon, container,runC
- cookie存储中文
- MySQL 5.7 InnoDB缓冲池NUMA功能支持——但是别高兴的太早
- React Native控件之Listview
- 065、容器在Weave中如何通信和隔离?(2019-04-08 周一)
- Python sqlalchemy orm 常用操作
- [Leetcode 134]汽车加油站 Gas Station (环形)
- java学习--面向对象
- mySql存储emoji表情报错(mysql incorrect string value)
- MySQL 跨库主从
- [Redis] - 高并发下Redis缓存穿透解决
热门文章
- jira添加工作流
- JavaScript调用mysql查询bigint数据精度失真解决方案
- Repair Microsoft.VisualStudio.MinShell.Msi.Resources 2203 error And visual studio 2019 key
- js获取url参数值的方法总结
- TensorFlow2.0教程-使用keras训练模型
- 【文本处理命令】之find搜索命令
- redis集群之Cluster
- javascript的10个开发技巧
- Http Header的Transfer-Encoding
- oracle学习笔记(二十二) REF 动态游标