深度学习之TensorFlow(四)激活函数

框架

在这里插入图片描述

激活函数

目的:加入非线性元素,解决线性模型缺陷

  1. ReLu
  • 函数表达式:
    f ( x ) = m a x ( x , 0 ) = { 0 , x < = 0 x , x > = 0 f(x)=max(x,0)=\begin{cases} 0 ,x<=0\\ x,x>=0\\ \end{cases} f(x)=max(x,0)={0,x<=0x,x>=0
  • 函数调用:
  • tf.nn.relu(features,name=None)一般ReLU函数, m a x ( f e a t u r e s , 0 ) max(features,0) max(features,0);
  • tf.nn.relu6(features,name=None)阈值为6的ReLU函数, m i n ( m a x ( f e a t u r e s , 0 ) , 6 ) min(max(features,0),6) min(max(features,0),6);
    在这里插入图片描述
    -舍弃了全部负值,在信号响应上具有一定优势,很容易使得模型输出全为0无法训练。
  1. Sigmoid
  • 函数表达式:
    f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1
  • 函数调用:
  • tf.nn.sigmoid(x,name=None)
    在这里插入图片描述
  • x x x趋近于无穷大, y y y值接近于1/-1,即为饱和。如果激活函数处于饱和态,意味着将数据的某些特性丢失。特别是当数据x>=6或x<=-6之后,数据变化不明显。较好效果是-3~3之间取值。
  1. Tanh
  • 函数表达式:
  • t a n h ( x ) = 2 s i g m o i d ( 2 x ) − 1 tanh(x)=2sigmoid(2x)-1 tanh(x)=2sigmoid(2x)1
    f ( x ) = 1 − e − 2 x 1 + e − 2 x f(x)=\frac{1-e^{-2x}}{1+e^{-2x}} f(x)=1+e2x1e2x
  • 函数调用:
  • tf.nn.tanh(x,name=None)
    在这里插入图片描述
  • s i g m o i d sigmoid sigmoid函数一样,饱和问题较突出。
  1. SoftPlus函数
  • 该函数更加平滑,计算量较大,会保留小于0的少量值。
  • f ( x ) = l n ( 1 + e x ) f(x)=ln(1+e^x) f(x)=ln(1+ex)
  • 函数调用
  • tf.nn.softplus(features,name=None)在这里插入图片描述
    5.从ReLu函数而来的变种函数
  • Noisy relus:为max的 x x x增加了一个高斯分布的噪声
  • f ( x ) = m a x ( 0 , x + Y ) , Y ∈ N ( 0 , σ ( x ) ) f(x)=max(0,x+Y),Y\in N(0,\sigma(x)) f(x)=max(0,x+Y),YN(0,σ(x))
  • Leaky relus:在ReLU基础之上,保留部分负值, x x x为负之时,乘a(a<=1),它是一定比例的缩小数据。
  • f ( x ) = m a x ( x , a x ) = { x , x > 0 a x , ( o t h e r w i s e ) (1) f(x)=max(x,ax)= \begin{cases} x,\quad x> 0\\ ax, \quad (otherwise) \end{cases} \tag{1} f(x)=max(x,ax)={x,x>0ax,(otherwise)(1)
  • 组合函数调用:tf.maximum(x,leak*x,name=name)
  • Elus: x x x小于0,复杂变换
  • f ( x ) = { x , x > = 0 a ( e x − 1 ) , ( o t h e r w i s e ) (1) f(x)= \begin{cases} x,\quad x>= 0\\ a(e^x-1), \quad (otherwise) \end{cases} \tag{1} f(x)={x,x>=0a(ex1),(otherwise)(1)
  • 函数调用:
  • tf.nn.elu(features,name=None)
  1. Swish函数
  • f ( x ) = x ∗ s i g m o i d ( β x ) f(x)=x*sigmoid(\beta x) f(x)=xsigmoid(βx)
  • β \beta β x x x的缩放参数,在使用BN算法的情况下,对 x x x的缩放值进行调整。
  • 手动封装:
  • def Swish(x,beta=1): return x*tf.nn.sigmoid(x*beta)

NN复杂度

  • 多用NN层数和NN参数的个数表示
  • 层数:隐藏层层数+1个输出层
  • 总参数:总W+总b

神经网络优化

  • 损失函数(loss):预测值(y)与已知值(y_)的差距
  • NN优化目标:loss最小
  1. 均方误差mse: M S E ( y _ , y ) = ∑ i = 1 n ( y − y _ ) 2 n MSE(y\_,y)=\frac{\sum_{i=1}^{n}(y-y\_)^2}{n} MSE(y_,y)=ni=1n(yy_)2
    函数调用:loss_mse=tf.reduce_mean(tf.square(y_-y))
  2. 自定义(商品预测)
    l o s s ( y _ , y ) = ∑ n f ( y _ , y ) loss(y\_,y)=\sum_nf(y\_,y) loss(y_,y)=nf(y_,y)
    即: f ( y _ , y ) = { P R O F I T ∗ ( y _ − y ) , y < y _ , 损 失 利 润 C O S T ∗ ( y − y _ ) , y > y _ , 损 失 成 本 f(y\_,y)=\begin{cases} PROFIT*(y\_-y),y<y\_,损失利润\\ COST*(y-y\_),y>y\_,损失成本\\ \end{cases} f(y_,y)={PROFIT(y_y),y<y_COST(yy_),y>y_
    函数调用:
# tf.where询问y,y_大小
loss=tf.reduce_sum(tf.where(tf.greater(y,y_),COST(y-y_),PROFIT(y_-y)))
  1. ce(交叉熵)
  • 表征两个概率分布之间 的距离
    H ( y _ , y ) = − ∑ y _ ∗ log ⁡ y H(y\_,y)=-\sum{y\_*\log y} H(y_,y)=y_logy
  • 函数调用:
ce=tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-12,1.0)))

引入:softmax()函数

  • 当n分类的n个输出(y1,y2,…yn)通过softmax()函数,满足概率分布要求:
  • ∀ x , P ( X = x ) ∈ [ 0 , 1 ] a n d ∑ x p ( X = x ) = 1 \forall x,P(X=x)\in[0,1]and \sum_xp(X=x)=1 x,P(X=x)[0,1]andxp(X=x)=1
  • s o f t m m a x ( y i ) = e y i ∑ j = 1 n e y i softmmax(y_i)=\frac{e^{y^i}}{\sum_{j=1}^{n}e^{y^i}} softmmax(yi)=j=1neyieyi
  • 函数调用:
ce=tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))
cem=tf.reduce_mean(ce)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Siri_only

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值