TensorFlow之tf.nn.dropout():防止模型训练过程中的过拟合问题

一:适用范围:

  tf.nn.dropout是TensorFlow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层

二:原理:

  dropout就是在不同的训练过程中随机扔掉一部分神经元。也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了

三:函数介绍:

  tf.nn.drop(x,  keep_prob, noise_shape=None, seed=None,name=None)

  x:  输入值

  keep_prob: float类型,每个元素被保留下来的概率

  noise_shape: 一个1维的int32张量,代表了随机产生“保留/丢弃”标志的shape

四:举例说明:

# -*- coding: utf-8 -*-
# @Time    : 18-5-27 下午3:34
# @Author  : payneLi
# @Email   : [email protected]
# @File    : tf_nn_dropout.py

import tensorflow as tf
import numpy as np

"""
测试Tensor经过dropout()的效果:
    1.输入与输出的Tensor的shape相同;
    2.随机使某些元素值为0,非零元素为:对应值/keep_prob
"""
dropout = tf.placeholder(tf.float32)
x = tf.reshape(np.array(range(36), dtype=np.float32), [6, 6])
y = tf.nn.dropout(x, dropout)
print(x, y)

init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(x))
    print(sess.run(y, feed_dict={dropout: 0.5}))

----> 运行结果:  x :

    [[ 0. 1. 2. 3. 4. 5.]
    [ 6. 7. 8. 9. 10. 11.]
    [12. 13. 14. 15. 16. 17.]
    [18. 19. 20. 21. 22. 23.]
    [24. 25. 26. 27. 28. 29.]
    [30. 31. 32. 33. 34. 35.]]

  y :   

    [[ 0. 0. 4. 6. 8. 0.]
    [ 0. 0. 16. 0. 20. 22.]
    [24. 26. 28. 0. 0. 0.]
    [ 0. 38. 40. 0. 44. 46.]
    [48. 0. 0. 54. 56. 58.]
    [60. 0. 0. 66. 68. 0.]]

原文地址:https://www.cnblogs.com/lph-shares/p/9096489.html

时间: 2024-08-24 09:53:43

TensorFlow之tf.nn.dropout():防止模型训练过程中的过拟合问题的相关文章

模型训练过程中的训练集、训练开发集、开发集和测试集总结

36.什么时候你应该在不同分布上做训练和测试 当你的猫app已经上传10000张图,你已经人工标记它们有没有猫,同时你有200000张互联网上下载的图,这时你要怎么划分训练开发测试集呢? 当你训练深度学习模型时,可能必须用到那200000张图,那么训练和测试集的分布就不同,这会怎样影响你的工作呢? 当然将210000张图片随机分裂到训练开发测试集是一种方法,但我(吴恩达)不推荐这种方法,记住选择开发测试集的推荐方法是:选择你未来预期会得到的数据来作为开发测试集. 大多数学术文章假设训练开发测试集

tf.nn.dropout()介绍

1.Dropout原理简述: Dropout就是在不同的训练过程中随机扔掉一部分神经元.也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算.但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了.示意图如下: 但在测试及验证中:每个神经元都要参加运算,但其输出要乘以概率p. 2.tf.nn.dropout(x,keep_prob,noise_shape=None,seed=None,name=None)函数说明 上面

tf.nn.dropout

tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None) 此函数是为了防止在训练中过拟合的操作,将训练输出按一定规则进行变换. 参数: x:输入 keep_prob:保留比例,取值 (0,1] .每一个参数都将按这个比例随机变更. noise_shape:干扰形状.此字段默认是None,表示第一个元素的操作都是独立,但是也不一定.比例:数据的形状是shape(x)=[k, l, m, n],而noise_shape=[

【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法

在计算loss的时候,最常见的一句话就是 tf.nn.softmax_cross_entropy_with_logits ,那么它到底是怎么做的呢? 首先明确一点,loss是代价值,也就是我们要最小化的值 tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None) 除去name参数用以指定该操作的name,与方法有关的一共两个参数: 第一个参数logits:就是神经网络最后一层的输出,如果有batch的话,它的大小就是[b

DeepLearning tutorial(2)机器学习算法在训练过程中保存参数

我是小白,说的不是很好,请原谅 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43169019 参考:pickle - Python object serialization.DeepLearning Getting started 一.python读取"***.pkl.gz"文件 用到Python里的gzip以及cPickle模块,简单的使用代码如下,如果想详细了解可以参考上面给出的链接. [p

(转)理解YOLOv2训练过程中输出参数含义

最近有人问起在YOLOv2训练过程中输出在终端的不同的参数分别代表什么含义,如何去理解这些参数?本篇文章中我将尝试着去回答这个有趣的问题. 刚好现在我正在训练一个YOLOv2模型,拿这个真实的例子来讨论再合适不过了,下边是我训练中使用的 .cfg 文件(你可以在cfg文件夹下找到它): 以下是训练过程中终端输出的一个截图: 以上截图显示了所有训练图片的一个批次(batch),批次大小的划分根据我们在 .cfg 文件中设置的subdivisions参数.在我使用的 .cfg 文件中 batch =

[Tensorflow]激励函数tf.nn.relu样例

代码: import tensorflow as tf import numpy as np ### 定义添加神经网络层函数 START ### def add_layer(inputs,in_size,out_size,activation_function=None): """描述: 添加神经网络层函数. :param inputs: 输入神经层 :param in_size: 输入神经层的神经元个数 :param out_size: 输出神经层的神经元个数 :param

关于Thinkphp框架模型应用过程中出现的错误Undefined class constant MYSQL_ATTR_INIT_COMMAND

今天在用thinkphp框架做网站的时候,在调用model模型是意外发生Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]错误, 下面是我百度的结果,大部分说解决问题可以分为以下两类: 1. windows下iis7.5+php5.4.11(FastCGI) 缺少pdo,编辑php.ini 取消注释: extension=php_pdo_mysql.dll 重启iis PHP数据对象(PDO)扩

关于级联分类器训练过程中遇到的问题

最近在做级联分类器的训练,训练和识别过程中不断的遇到的问题,现在把想起来的问题记录下来,方便以后再遇见的时候可以方便查阅,如果有同样做此项目的朋友,欢迎交流! 训练时负样本的准备: 我们自己制作了一个工具,将训练和识别所需要的所有步骤集中在一起,而不需要一个.bat一个.bat的训练或者识别.但是我们的工具在负样本准备阶段,不管是训练还是识别,只要样本个数超过30000个就会提示“遇到不适当的参数”的提醒,我检查了内存分配,数组大小检查,及有可能的逻辑错误,仍然出现这个讨厌的东西.但是也不能不训