3

【TensorFlow3】激活函数

 3 years ago
source link: https://www.guofei.site/2018/09/11/tf3.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【TensorFlow3】激活函数

2018年09月11日

Author: Guofei

文章归类: 2-3-神经网络与TF ,文章编号: 283


版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2018/09/11/tf3.html

Edit

激活函数

更详细的内容见于TF官网

激活函数

  • ReLU
    ReLU(Rectifier Linear Unit),其函数为max(0,x)max(0,x)
    tf.nn.relu
    
  • ReLU6
    是 hard-sigmoid 的变种min(max(0,x),6)min(max(0,x),6)
    tf.nn.relu6
    
  • sigmoid 1/(1+exp(−x))1/(1+exp(−x))
    tf.nn.sigmoid
    
  • tanh 1−e2x1+e−2x1−e2x1+e−2x
    tf.nn.tanh
    
  • softsign
    是符号函数的连续估计x/(abs(x)+1)x/(abs(x)+1)
    tf.nn.softsign
    
  • softplus
    是ReLU的平滑版 log(exp(x)+1)log(exp(x)+1)
    tf.nn.softplus
    
  • ELU(Exponential Linear Unit)
    类似于softplus
    # 表达式为 (exp(x)+1) if x<0 else x
    tf.nn.elu
    tf.nn.softmax
    
激励函数 优点 缺点 Sigmoid 不容易出现极端值 收敛速度慢 ReLU 收敛速度快 容易出现极端值

2019年5月22日更新(来自吴恩达的 DeepLearning.ai 课程):
sigmoid: never use, except output layer
tanh: pretty much strictly superior then sigmoid
ReLU: if you do not hnow which to choose, always choose ReLU
Leaky ReLU: you may try this max(0.01z,z)max(0.01z,z)

About derivative(自己推导一下)
sigmoid:g(x)=11+e−z,g′(z)=g(z)(1−g(z))g(x)=11+e−z,g′(z)=g(z)(1−g(z))
tanh:g(x)=ez−e−zez+e−z,g′(z)=1−(g(z))2g(x)=ez−e−zez+e−z,g′(z)=1−(g(z))2
ReLU/Leaky RelU: 分段函数,注意0点的情况 does not matter

卷积函数

tf.nn.conv2d(input,filter,strides=[1,1,1,1],padding='SAME')
# 对四维数据进行二维卷积操作
# input: [batch, in_height, in_width, in_channels]
# filter: [filter_height, filter_width, in_channels, out_channels]
# strides: [1,stride_horizontal,,stride_vertices,1]
# padding='SAME'表示边界加上padding,使得卷积的输入和输出保持同样的尺寸
# padding='VALID' 表示不在边界上加padding


tf.nn.convolution(input,filter, padding,strides=None,dilation_rate=None,name=None,data_format=None)
# N维卷积的和

tf.nn.conv1d(value,filters,stride,padding,use_cudnn_on_gpu=None,data_format=None,name=None)
# 对三维数据进行一维卷积操作
# value:[batch,in_width,in_channels]
# filter:[filter_width,in_channels,out_channels]

tf.nn.conv3d(input, filter, strides, padding)
# input: [batch,in_depth,in_height,in_width,in_channels]
# filter: [filter_depth, filter_height, filter_width, in_channels, out_channels]
# strides: [1,stride1,stride2,stride3,1]

tf.nn.depthwise_conv2d(input, filter, strides, padding, rate=None, name=None, data_format=None)
# input :[batch,in_height,in_width,in_channels]
# filter :[filter_height,filter_width,in_channels,channel_multiplier]
# 输出是[batch, out_height, out_width, in_channels * channel_multiplier]

tf.nn.separable_conv2d(input,depthwise_filter,pointwise_filter,strides,padding,rat,name,data_format)

tf.nn.atrous_conv2d
tf.nn.conv2d_transpose
tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME') #横竖步长为2,
# 每个输出元素是池化区域的最大值
tf.nn.avg_pool # 每个输出元素是池化区域的平均值
tf.nn.max_pool_with_argmax
# 返回最大值和最大值所在位置 (output,argmax),
# 其中output是每个池化区域的最大值。argmax是一个四维 <Targmax> 类型

tf.nn.avg_pool3d

dropout

用来减轻overfitting

keep_prob=tf.placeholder(tf.float32) # 训练时小于1,预测时等于1,所以使用placeholder
hidden1_drop=tf.nn.dropout(hidden1,keep_prob)
tf.nn.lrn(pool1,4,bias=1,alpha=0.001/9.0,beta=0.75)
#LRN模仿生物的侧抑制机制,对局部神经元创建竞争环境,使其中响应大的值相对更大,并抑制其它反馈小的神经元。从而增强泛化能力
#可以用于Pooling之后,也可以用于conv之后、Pooling之前
#适用于ReLu这种没有上界的激活函数,不适合Sigmoid这种有固定边界,或者能抑制过大值得激活函数

参考文献

TF官网-tf.nn
《人工神经网络原理》马锐,机械工业出版社
白话深度学习与TensorFlow,高扬,机械工业出版社
《TensorFlow实战Google深度学习框架》,郑泽宇,中国工信出版集团


您的支持将鼓励我继续创作!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK