上海站 | 高性能计算之GPU CUDA培训

4月13-15日

三天密集式训练 快速带你晋级
阅读全文
>

正文共2005个字,1张图,预计阅读时间6分钟。

Dropout这个概念已经推出4年了,它的详细描述见论文(https://arxiv.org/abs/1207.0580)。可是呢,它仿佛是个犹抱琵琶半遮面的美女,难以捉摸!!许多文献都对dropout有过描述,但解释的含糊不清,这里呢,我也不打算解释清楚,只是通过tensorflow来看一看dropout的运行机理。

文章分两部分,第一部分介绍tensorflow中的dropout函数,第二部分是我的思考。

1、tf.nn.dropput函数

首先看官方函数定义:

def dropout(x, keep_prob, noise_shape=None, seed=None, name=None)

输入是:

  • x,你自己的训练、测试数据等

  • keep_prob,dropout概率

  • ……,其它参数不咋用,不介绍了

输出是:

  • A Tensor of the same shape of x

然后我们看看官方API是怎么说这个函数的:

With probability keep_prob, outputs the input element scaled up by 1 / keep_prob, otherwise outputs 0. The scaling is so that the expected sum is unchanged.

注意,输出的非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() sess = tf.Session() sess.run(init)print sess.run(y, feed_dict = {dropout: 0.4})

运行的结果如下:

[[ 0.   0.   2.5  2.5  0.   0.   2.5  2.5  2.5  2.5] [ 0.   2.5  2.5  2.5  2.5  2.5  0.   2.5  0.   2.5] [ 2.5  0.   0.   2.5  0.   0.   2.5  0.   2.5  0. ] [ 0.   2.5  2.5  2.5  2.5  0.   0.   2.5  0.   2.5] [ 0.   0.   0.   0.   0.   0.   0.   0.   2.5  2.5] [ 2.5  2.5  2.5  0.   2.5  0.   0.   2.5  2.5  2.5] [ 0.   2.5  2.5  2.5  0.   2.5  2.5  0.   0.   0. ] [ 0.   2.5  0.   2.5  0.   0.   2.5  2.5  0.   0. ] [ 2.5  2.5  2.5  2.5  2.5  0.   0.   2.5  0.   0. ] [ 2.5  0.   0.   0.   0.   0.   2.5  2.5  0.   2.5]]

分析一下运行结果:

  • 输入和输出的tensor的shape果然是一样的

  • 不是0的元素都变成了原来的 “1/keep_prob” 倍

特点分析完毕,小总结一下,dropout这个概念看起来好高大上,然而在程序中实现竟然如此简单!说白了,tensorflow中的dropout就是:使输入tensor中某些元素变为0,其它没变0的元素变为原来的1/keep_prob大小!

2、关于dropout的吐槽

首先引用此篇博文的话:

个人总结:个人感觉除非是大型网络,才采用dropout,不然我感觉自己在一些小型网络上,训练好像很是不爽。之前搞一个比较小的网络,搞人脸特征点定位的时候,因为训练数据不够,怕过拟合,于是就采用dropout,最后感觉好像训练速度好慢,从此就对dropout有了偏见,感觉训练过程一直在波动,很是不爽。

然后,我就自己试了试,看看小型网络中dropout效果到底怎么样,程序片段如下:

def inference(img, dropout=1.0):    fc1 = activation(tf.nn.bias_add(tf.matmul(img, W_fc1), b_fc1))    # dropout    fc1_dropout = tf.nn.dropout(fc1, dropout)    fc2 = tf.nn.bias_add(tf.matmul(fc1_dropout, W_fc2), b_fc2)    return fc2 cross_entropy = tf.nn.softmax_cross_entropy_with_logits(inference(X, dropout), y_) train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)

网络很简单,形如 784-30-10 的一个网络,只不过在输出层前用dropout处理了一下,训练的数据是MNIST的手写数据集,然后你猜怎么着?采用dropout以后的训练精度不升反降,后来我把网络隐藏层改成100个神经元,结果依旧,看来,我的网络还是太小了,真的如上面那篇博客所说,dropout用不好的话,真是个累赘!

原文链接:https://www.jianshu.com/p/c9f66bc8f96c

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org

请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看


LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

谈谈Tensorflow的dropout相关推荐

  1. 深度学习总结:用pytorch做dropout和Batch Normalization时需要注意的地方,用tensorflow做dropout和BN时需要注意的地方,

    用pytorch做dropout和BN时需要注意的地方 pytorch做dropout: 就是train的时候使用dropout,训练的时候不使用dropout, pytorch里面是通过net.ev ...

  2. 【深度学习】村通网之——谈谈Tensorflow Eager Execution机制之新特性示例(二)

    文章目录 前言 直接使用operation进行卷积操作 自动计算梯度(导数) 计算所有参数的梯度 计算所有变量的梯度 使用Python程序流程控制模型流程 自动优化 前言 本文是[深度学习]村通网之- ...

  3. tensorflow之dropout

    转自: https://blog.csdn.net/yangfengling1023/article/details/82911306 tf.nn.dropout()是tensorflow里面为了防止 ...

  4. tensorflow计算图_简单谈谈Tensorflow的运行机制

    1 前言 由于Tensorflow采用了全新的静态图设计模式,所以其运行机制与我们脑中所熟悉的动态图有着截然不同之处.TensorFlow翻译成中文就是张量流,所以TensorFlow至少代表着两个概 ...

  5. 谈谈Tensorflow的Batch Normalization

    上海站 | 高性能计算之GPU CUDA培训 4月13-15日 三天密集式学习 快速带你晋级 阅读全文 > 正文共4488个字,4张图,预计阅读时间12分钟. tensorflow中关于BN(B ...

  6. 【深度学习】村通网之——谈谈Tensorflow Eager Execution机制之静态图和动态图的区别(一)

    文章目录 前言 介绍 搭建静态图 搭建动态图 前言 随着TensorFlow 1.4 Eager Execution的出现,TensorFlow的使用出现了革命性的变化. 介绍 我很早就听说过这样一句 ...

  7. 深度学习Dropout技术分析

    深度学习Dropout技术分析 什么是Dropout? dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃.注意是暂时,对于随机梯度下降来说,由于是随机 ...

  8. 12种主要的Dropout方法:用于DNNs,CNNs,RNNs中的数学和可视化解释

    深入了解DNNs,CNNs以及RNNs中的Dropout来进行正则化,蒙特卡洛不确定性和模型压缩的方法. 动机 在深度机器学习中训练一个模型的主要挑战之一是协同适应.这意味着神经元是相互依赖的.他们对 ...

  9. 两个月不到,我是如何从Python新手成长为谷歌认证TensorFlow开发者的?

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 因为新冠疫情宅家无事可做,印度尼西亚一位应用数学学生 Grady Ma ...

最新文章

  1. [转]SQL Server 高性能写入的一些总结
  2. 关于service层、dao层,以及O/R Mapping之间的思考
  3. docker-3-常用命令(上)
  4. python快速编程入门课后简答题答案-Python编程:从入门到实践(第2版)第1章习题答案...
  5. python小项目案例-python_flask小项目实例-编一个小网站
  6. cmd下的一些小技巧
  7. MySQL数据库:分区Partition
  8. 多线程并发下的单例模式
  9. ubuntu下 apache phpmyadmin 的安装和使用
  10. 孤掌难鸣-------堵水眼
  11. Oracle查看对象依赖关系
  12. C# 用Attribute实现AOP事务
  13. 如何正确上传一张图片?
  14. java-Socket文件传输
  15. 免费OCR文字识别软件,识别图片文字
  16. 属性值第二个字符是大写引发的血案Warning:(X,X) java: Unmapped target property: “vCpu“.
  17. 联想服务器装系统鼠标没反应,联想Thinkpad重装系统后键盘鼠标失灵的解决方法...
  18. html采集插件如何用,火车采集器插件功能详解
  19. python学习之路遇到的问题以及解决方法
  20. 怎么设置圆角html5,css怎么设置圆角?

热门文章

  1. h5评论直接显示代码_全套H5教程免费学,让你0基础自学制作H5页面
  2. python简单体育竞技模拟_python初体验 —— 模拟体育竞技
  3. 普罗米修斯 监控_新一代的监控系统普罗米修斯(Prometheus)
  4. 异步fifo_异步FIFO
  5. springboot+flowable第三节(动态设置审批人)
  6. golang mysql封装_使用Golang 封装一个Api 框架 ----- 数据库操作篇(gorm引入)
  7. vue怎么通过if跳出方法_vue多种弹框的弹出形式
  8. python如何做接口测试_python实现接口测试
  9. java 线程同步的list_java线程生产者与消费者实例(使用List实现同步)
  10. 机器视觉及图像处理系列之二(C++,VS2015)——图像级的人脸识别(1)