Tensorflow激活函数--tf.nn.dropout

2023-11-09

前言:激活函数(Activation Function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。神经网络的数学基础是处处可微的,所以选取激活函数要保证数据输入与输出也是可微的。

### 激励函数的作用 如果不使用激活函数,此时激活函数本质上相当于f(x)=ax+b。这种情况下,神经网络的每一层输出都是上层输入的线性函数。不难看出,不论神经网络有多少层,输出与输入都是线性关系,与没有隐层的效果是一样的,这个就是相当于是最原始的感知机(Perceptron)。至于感知机,大家知道其连最基本的异或问题都无法解决,更别提更复杂的非线性问题。 神经网络之所以能处理非线性问题,这归功于激活函数的非线性表达能力。


### TFLearn官方提供的激活函数:

[Activation Functions](https://www.tensorflow.org/api_guides/python/nn#activation-functions)

  • tf.nn.relu
  • tf.nn.relu6
  • tf.nn.crelu
  • tf.nn.elu
  • tf.nn.selu
  • tf.nn.softplus
  • tf.nn.softsign
  • tf.nn.dropout
  • tf.nn.bias_add
  • tf.sigmoid
  • tf.tanh 

       dropout函数会以一个概率为keep_prob来决定神经元是否被抑制。如果被抑制,该神经元输出为0,如果不被抑制则该神经元的输出为输入的1/keep_probbe倍。

      每个神经元是否会被抑制是相互独立的。神经元是否被抑制还可以通过调节noise_shape来调节,当noise_shape[i] == shape(x)[i],x中的元素是相互独立的。如果shape(x)=[k,l,m,n](k表示数据的个数,l表示数据的行数,m表示数据的列,n表示通道),当noise_shape=[k,1,1,n],表示数据的个数与通道是相互独立的,但是与数据的行和列是有关联的,即要么都为0,要么都为输入的1/keep_prob倍。

def dropout(incoming, keep_prob, noise_shape=None, name="Dropout"):
    """ Dropout.
    Outputs the input element scaled up by `1 / keep_prob`. The scaling is so
    that the expected sum is unchanged.
    By default, each element is kept or dropped independently. If noise_shape
    is specified, it must be broadcastable to the shape of x, and only dimensions
    with noise_shape[i] == shape(x)[i] will make independent decisions. For
    example, if shape(x) = [k, l, m, n] and noise_shape = [k, 1, 1, n], each
    batch and channel component will be kept independently and each row and column
    will be kept or not kept together.
    Arguments:
        incoming : A `Tensor`. The incoming tensor.
        keep_prob : A float representing the probability that each element
            is kept.
        noise_shape : A 1-D Tensor of type int32, representing the shape for
            randomly generated keep/drop flags.
        name : A name for this layer (optional).

下面以实例来进行说明。

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

结果:
[[0. 2. 0. 2. 2. 2. 0. 2. 2. 2.]
 [2. 0. 0. 0. 2. 2. 0. 2. 0. 2.]
 [0. 0. 2. 2. 2. 0. 2. 2. 2. 2.]
 [0. 0. 2. 2. 0. 0. 2. 2. 0. 2.]
 [0. 2. 0. 0. 2. 0. 0. 0. 0. 0.]
 [2. 0. 0. 0. 0. 2. 0. 0. 0. 0.]
 [0. 2. 0. 0. 2. 2. 2. 0. 2. 0.]
 [0. 2. 2. 2. 0. 0. 0. 2. 0. 2.]
 [0. 0. 2. 0. 2. 2. 0. 2. 0. 0.]
 [0. 2. 2. 2. 2. 0. 2. 0. 2. 2.]]

Process finished with exit code 0
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    d = tf.constant([[1.,2.,3.,4.],[5.,6.,7.,8.],[9.,10.,11.,12.],[13.,14.,15.,16.]])
    print(sess.run(tf.shape(d)))

    #由于[4,4] == [4,4] 行和列都为独立
    dropout_a44 = tf.nn.dropout(d, 0.5, noise_shape = [4,4])
    result_dropout_a44 = sess.run(dropout_a44)
    print(result_dropout_a44)

    #noise_shpae[0]=4 == tf.shape(d)[0]=4  
    #noise_shpae[1]=1 != tf.shape(d)[1]=4
    #所以[0]即行独立,[1]即列相关,每个行同为0或同不为0
    dropout_a41 = tf.nn.dropout(d, 0.5, noise_shape = [4,1])
    result_dropout_a41 = sess.run(dropout_a41)
    print(result_dropout_a41)

    #noise_shpae[0]=1 != tf.shape(d)[0]=4  
    #noise_shpae[1]=4 == tf.shape(d)[1]=4
    #所以[1]即列独立,[0]即行相关,每个列同为0或同不为0
    dropout_a24 = tf.nn.dropout(d, 0.5, noise_shape = [1,4])
    result_dropout_a24 = sess.run(dropout_a24)
    print(result_dropout_a24)
    #不相等的noise_shape只能为1

结果:
[4 4]
[[  0.   4.   0.   8.]
 [  0.   0.  14.   0.]
 [  0.   0.  22.   0.]
 [  0.   0.  30.   0.]]
[[  2.   4.   6.   8.]
 [  0.   0.   0.   0.]
 [ 18.  20.  22.  24.]
 [ 26.  28.  30.  32.]]
[[  0.   0.   6.   0.]
 [  0.   0.  14.   0.]
 [  0.   0.  22.   0.]
 [  0.   0.  30.   0.]]

Droptout定义

  1. Dropout是TensorFlow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层
  2. dropout 是训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。

                      

参考资料:

https://blog.csdn.net/ajian0051/article/details/82315828

https://blog.csdn.net/Eclipsesy/article/details/77603336

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tensorflow激活函数--tf.nn.dropout 的相关文章

随机推荐

  • Catowice City【Codeforces 1248 F】【BFS】

    Codeforces Round 594 Div 2 F 一开始是听闻有人说这是一道Tarjan好题 然后就点进来做了 但是想来想去 却想了个另类的法子 我们可以看到 如果N个人都要选择的话 那么每个人都只能是审判者 或者是参赛者 所以 我
  • hutool工具常用API

    hutool工具常用API 依赖 工具API 1 convert 2 DataUtil 3 StrUtil 4 ClassPathResource 5 ReflectUtil 6 NumberUtil 7 BeanUtil 8 CollUt
  • 使用C++11变长参数模板 处理任意长度、类型之参数实例

    变长模板 变长参数是依靠C 11新引入的参数包的机制实现的 一个简单的例子是std tuple的声明 template
  • Python六大基本数据类型介绍

    Python基本数据类型 一 数字型 一 整型 二 浮点型 三 布尔型 四 复数类型 二 字符串 三 列表 四 元组 五 集合 六 字典 一 数字型 一 整型 1 整型 int 在数字中 正整数 0 负整数都称为整型 例 intvar 10
  • 零知识证明zkSNARK

    最近接触学习零知识证明 很是头疼 没有一些背景知识 只能硬看了 而且也没有别的好方法 为什么要学习零知识证明 因为区块链的去中心化 导致信息都是公开透明的 比特币 以太坊 EOS等目前绝大部分项目区块链上的交易都是公开的 发送者的地址 金额
  • 试用版MindMaster思维导图转XMind方法分享

    在用MindMaster做导图的时候主题总是达到上限 于是想换成没有上限的XMind 就打算把已经做好的导图转到XMind上 现在网上的方法是通过导出docx文件或者复制大纲到word中然后再复制到XMind中 但受试用版限制 没办法导出w
  • 调用兄弟目录中的模块

    使用sys path append把父目录的加到模块搜索路径列表中即可 下面是具体原理分析 比如目前的目录结构如下 parDir dir1 test1 py dir2 test2 py 现在我需用在test1 py中导入dir2的test1
  • 合泰BS8116A-3触摸芯片开发踩坑指南

    一 硬件说明 引脚图 接线 说明 由于用到了唤醒检测 所以KEY16引脚用作IRQ中断唤醒功能 未使用引脚拉低 二 IIC配置说明 1 最大波特率 实际单片机配置最好不要设置波特率100Khz容易出错 50Khz就可以了 2 从机地址 注意
  • OpenCV基本知识

    1 OpenCV概述 1 什么是OpenCV 开源C C 计算机视觉库 面向实时应用进行优化 跨操作系统 硬件 窗口管理器 通用图像 视频载入 存储和获取 由中 高层API构成 为Intel 公司的 Integrated Performan
  • Vue ly-tab组件使用

    Vue ly tab组件的使用 目录 Vue ly tab组件的使用 安装 引入 使用 安装 这里使用指定版本安装 如果安装其他版本使用方法可能不一致 npm install ly tab 2 1 2 S 或者 cnpm install l
  • 深入理解采样定理 + Matlab 仿真 Sa 函数的采样与恢复

    建议配合国宝老师的视频食用 信号与线性系统分析 吴大正 郭宝龙 文章目录 1 采样的说明 1 为什么要取样 2 什么是取样 2 采样定理 1 为什么要有奈奎斯特频率 2 什么是采样定理 3 信号的恢复 4 Matlab的Sa函数取样仿真 1
  • nginx通过四层代理实现端口转发

    公司原有的测试数据库在主机192 168 10 5上边 现在数据库转移到了192 168 10 4上 为了不让各个地方都需要更改地址 现在需要一个四层代理工具 将原来请求到192 168 10 5的3306端口转发到192 168 10 4
  • ChatGPT数据泄露,技术细节公布

    事件发生后 OpenAI 临时关闭了 ChatGPT 服务以调查问题 后续 Open AI 的首席执行官 Sam Altman 也亲自发了推文 承认他们确实遭遇了重大问题 不过当时并没有公布问题的细节 只表示是一个开源库的错误导致的 由于一
  • 支持WIN7的VSCode版本

    我有台13年底买的电脑 装的WIN7 使用时发现 最新的VSCode已经不支持WIN7 目前VSCode官网上写的最低支持WIN8 经过确认 最后支持WIN7的版本是1 70 3 不论32位还是64位 都是这个版本
  • easyui 下拉框联动

    supplierCode combobox onChange function n o var supplierCodes n join ajax type post url pageContext request contextPath
  • 前端代码 录音样式 类似微信发送语音

    先来上图 wxml代码 不是小程序的就换成div
  • Python: 基于DearPyGUI的环境变量查看器

    文章目录 1 目的 2 效果 3 实现思路 获取环境变量 分隔环境变量取值 界面显示 4 代码实现 1 目的 无论是 Windows 还是 Linux 下 编辑环境变量总是绕不开的一个基本功 也许你已经熟练使用 vim 来查询和就地替换 P
  • npm下载依赖报错 Invalid dependency type requested: alias

    报这个是alias需要高版本的npm 查看一下npm版本 npm version alias这个好像得是6 9 0版本以上 我使用的是nvm管理node版本 我切换到12版本就可以了 成功安装 在此记录一下踩坑
  • 强化学习的模型

    文章目录 前言 一 强化学习是什么 二 基本模型 1 基本框架 2 学习过程 三 马尔科夫决策过程 Markov Decision Process MDP 1 马尔科夫性质 2 MDP的基本组成部分 3 MDP的基本流程 四 基于模型和免模
  • Tensorflow激活函数--tf.nn.dropout

    前言 激活函数 Activation Function 运行时激活神经网络中某一部分神经元 将激活信息向后传入下一层的神经网络 神经网络的数学基础是处处可微的 所以选取激活函数要保证数据输入与输出也是可微的 激励函数的作用 如果不使用激活函