【一】TensorFlow神经网络模型构建之神经元函数及优化方法
TensorFlow神经网络模型构建主要涉及如下几块:神经元函数、卷积函数、池化函数、分类函数、优化方法。下面分别对这几块进行展开说明:
神经元函数及优化方法
神经网络之所以能解决非线性问题
(如语音、图像识别等),本质上就是激活函数加入了非线性
因素,弥补了线性模型的表达力,把“激活的神经元的特征
”通过函数保留并映射到下一层
。
激活函数不
会更改输入数据的维度
(输入和输出的维度是相同的)。TensorFlow中有如下激活函数,输入均为需要计算的x(Tensor)
,输出均为与x数据类型
相同的张量(Tensor
)。常见的激活函数有Sigmoid,Tanh,ReLU、softplus。
1、Sigmoid函数使用方法
import tensorflow as tf
data=tf.constant([[1.0,2.0],[1.0,2.0],[1.0,2.0]])
with tf.compat.v1.Session() as sess:
print(sess.run(tf.sigmoid(data)))
运行结果是如下:
Sigmoid函数的优点
在于它的输出映射在(0,1)
内,单调连续
,非常适合于用作输出层,并且求导
比较容易。缺点在于其软饱和性
。
软饱和性
:指激活函数 h ( x ) h(x) h(x)在取值趋于无穷大
时,它的一阶导数趋于0
。
硬饱和性
:指当 ∣ x ∣ > c |x|>c ∣x∣>c时,其中c为常数, f ′ ( x ) = 0 f^{'}(x)=0 f′(x)=0。
一旦落入软饱和区, f ′ ( x ) f^{'}(x) f′(x)就会变得接近于0,容易产生梯度消失。
梯度消失指在更新模型参数时采用链式求导法则
反向求导
,越往前
梯度越小
。
最终的结果是达到一定深度后梯度对于模型的更新就没有任何贡献。
2、ReLU函数使用方法
ReLU函数定义为 f ( x ) = m a x ( x , 0 ) f(x)=max(x,0) f(x)=max(x,0)。softplus函数定义为 f ( x ) = l o g ( 1 + e x p ( x ) ) f(x)=log(1+exp(x)) f(x)=log(1+exp(x)),可以看作是ReLU函数的平滑版本。Relu和softplus函数代码示例及图形如下:
import numpy as np
import matplotlib.pyplot as plt
def relu_tugrp():
x=np.arange(-100, 100, 1)
softplus=np.log(1+np.exp(x))
relu=np.maximum(0,x)
plt.subplot(221)
plt.plot(x,softplus,label='softplus')
#显示图像的label
plt.legend()
#创建一个子图
plt.subplot(222)
plt.plot(x,relu,label='relu')
#显示图像的label
plt.legend()
#画网格线
plt.grid(True)
relu_tugrp()
使用TensorFlow中的relu、reluu6、crelu、softplus函数示例如下:
import tensorflow as tf
data=tf.constant([[-1.0,2.0],[1.0,-2.0],[1.0,2.0]])
with tf.compat.v1.Session() as sess:
print(sess.run(tf.nn.relu(data)))
print(sess.run(tf.nn.softplus(data)))
print(sess.run(tf.nn.relu6(data)))
print(sess.run(tf.nn.crelu(data)))
3、dropout函数使用方法
一个神经元将以概率keep_prob
决定是否被抑制。如果被抑制
,则该神经元的输出为0
;如果不被抑制,那么该神经元的输出值将被放大到原来的
1
k
e
e
p
p
r
o
b
\frac{1}{keep_prob}
keepprob1倍。
在默认情况下,每个神经元是否被抑制是相互独立
的。但是否被抑制可以通过noise_shape
来调节。当noise_shape[i]==shape(x)[i]
时,x中的元素是相互独立的。如果shape(x)=[k,l,m,n]
,x中的维度顺序分别为批、行、列和通道
;如果noise_shape(x)=[k,l,m,n]
,那么每个批和通道相互独立,行与列相互关联,要么都是0,要么都是原来的值。示例代码:
import tensorflow as tf
data=tf.constant([[-1.0,2.0,3.0,4.0]])
with tf.compat.v1.Session() as sess:
print(sess.run(tf.nn.dropout(data,0.5,noise_shape=[1,4])))
print(sess.run(tf.nn.dropout(data,0.5,noise_shape=[1,1])))
原文地址:https://blog.csdn.net/henni_719/article/details/136989651
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!