首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Tensorflow学习笔记-神经元函数之激活函数

激活函数(activation funcation)

激活函数运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。

神经网络之所以能够解决非线性问题(如语音、图像识别)本质是是激活函数加入了非线性因素,弥补了线性模型的表达能力,把“激活的神经元的特征”通过函数保留并映射到下一层。

因为神经网络的数学基础是处处可微的,所以选取的激活函数要能保证数据输入和输出也是可微的。那么激活函数在Tensorflow中是如何表达的?

NO.1 sigmoid函数

传统神经网络最常用的激活函数之一(另一个是tanh)。

函数公式

图像

优点

输出映射在(0,1)内,单调连续,非常适合作输出层,求导容易。

缺点

因为软饱和性,一旦落入饱和区,f·(x)就会变得接近于0,很容易产生梯度消失。

软饱和性(软饱和是指激活函数h(x)在取值趋于无穷大时,它的一阶导数趋于0。

硬饱和是指当|x|>c时,其中c为常数,f·(x)=0。

relu是一类左侧硬饱和和激活函数。

梯度消失:指在更新模型参数时采用链式求导法则反向求导,越往前梯度越小,最

终结果是到达一定深度后梯度对模型的更新就没有任何贡献了。

#使用示例

a = tf.constant([[1.0,2.0],[1.0,2.0],[1.0,2.0]])

sess = tf.Session()

print(sess.run(tf.sigmoid(a)))

NO.2tanh函数

tanh函数也具有软饱和性,因为他的输出以0为中心,收敛速度比sigmoid要快,

但是仍然无法解决梯度消失的问题。

NO.3relu函数

函数

f(x)=max(x,0)

f(x)=log(1+exp(x))

NO.4 dropout函数

dropout函数

一个神经元将以概率keep_prob决定是否被抑制,如果被抑制,该神经元的输出

就为0;如果不被抑制,那么该神经元的输出值将被放大到原来的1/keep_drop倍。

在默认情况下,每个神经元是否被抑制是相互独立的。但是否被抑制也可以通过

noise_shape来调节。当noise_shape[i]==shape(x)[i]时,x中的元素是相互独立的。

如果shape(x)=[k,l,m,n],x中的维度的顺序分别为批、行、列和通道,如果

noise_shape=[k,l,l,n],那么每个批和通道都是相互独立的,但是每行每列的数据

都是关联的,也就是说,要不都为0,要不都还是原来的值。

"""

#使用示例

a = tf.constant([[-1.0,2.0,3.0,4.0]])

withtf.Session()assess:

b = tf.nn.dropout(a,0.5,noise_shape=[1,4])

print(sess.run(b))

b = tf.nn.dropout(a,0.5,noise_shape=[1,1])

print(sess.run(b))

//

激活函数的选择

//

激活函数的选择,当输入特征相差明显时,用tanh的效果会很好,

且在循环过程中会不断扩大特征效果并显示出来。当特征相差不明显时,

sigmoid效果比较好,同时,用sigmoid和tanh作为激活函数时,需要

对输入进行规范化,否则激活后的值全部进入平坦区,隐层的输出会全

部趋同,丧失原有的特征表达。而relu会好很多,有时候不需要输入规

范化来避免上述情况。

因此,现在大部分的卷积神经网络都采用relu作为激活函数。

在自然语言处理上,大概有85%-90%的神经网络会采用relu,10%-15%

的神经网络会采用tanh。

好看请点这里~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190122G01B1E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券