激活函数学习(2022.2.28)

Posted jing_zhong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了激活函数学习(2022.2.28)相关的知识,希望对你有一定的参考价值。

激活函数学习(2022.2.28)

所用软件及环境(Matlab+PyCharm+Python+Tensorflow+Keras+PyTorch)

Matlab
PyCharm

Python + TensorFlow + Keras

Python+PyTorch

1、激活函数简介

1.1 Activation Function

        Activation Function激活函数)就是一个从xy的映射函数y=f(x),它主要应用在深度学习和神经网络中的神经元,负责将输入Input通过函数作用后映射到输出Output

1.2 PyTorch激活函数API

        PyTorch官网上API文档可以看到torch.nntorch.nn.functional都介绍到所用的激活函数,包含nn.Softmin、 nn.Softmax、nn.Softmax2d、nn.LogSoftmax、nn.AdaptiveLogSoftmaxWithLoss、nn.GLU、nn.Threshold、nn.Tanhshrink、nn.Tanh、nn.Softsign、nn.Softshrink、nn.Softplus、nn.Mish、nn.SiLU、nn.Sigmoid、nn.GELU、nn.CELU、nn.SELU、nn.RReLU、nn.ReLU6、nn.ReLU、nn.PReLU、nn.MultiheadAttention、nn.LogSigmoid、nn.LeakyReLU、nn.Hardswish、nn.Hardswish、nn.Hardtanh、nn.Hardsigmoid、nn.Hardshrink、nn.ELU等。

1.3 TensorFlow + Keras激活函数API

        Keras官网tf.keras.activationsTensorFlow官网tf.keras.activationsAPI文档介绍其所用到的激活函数有:relu、sigmoid、softmax、softplus、softsign、tanh、selu、elu、exponentialdeserialize、elu、exponential、gelu、get、hard_sigmoid、linear、reluseluserializesigmoidsoftmax、softplus、softsign、swish、tanh等。

2、常用的激活函数(公式+曲线图)

2.1 线性激活函数

2.1.1 Linear

y = x y=x y=x

import tensorflow as tf
a = tf.constant([-3.0,-1.0, 0.0,1.0,3.0], dtype = tf.float32)
b = tf.keras.activations.linear(a)
print(b)

运行结果:

tf.Tensor([-3. -1.  0.  1.  3.], shape=(5,), dtype=float32)

2.2 非线性激活函数

        与线性激活函数不同,非线性激活函数的引入可以增加神经网络的非线性,就不仅仅是简单的线性矩阵相乘。

2.2.1 Exponential

e x p o n e n t i a l ( x ) = e x exponential(x) = e^x exponential(x)=ex

import tensorflow as tf
a = tf.constant([-3.0,-1.0, 0.0,1.0,3.0], dtype = tf.float32)
b = tf.keras.activations.exponential(a)
print(b)

运行结果:

tf.Tensor([ 0.04978707  0.36787945  1.          2.7182817  20.085537  ], shape=(5,), dtype=float32)

2.2.2 Hard_sigmoid

H a r d    ‾ s i g m o i d ( x ) = 0 x < − 2.5 0.2 x + 0.5 − 2.5 ≤ x ≤ 2.5 1 x > 2.5 Hard\\underline~~sigmoid(x)=\\begincases 0 & x<-2.5 \\\\ 0.2x+0.5 & -2.5≤x≤2.5 \\\\ 1& x>2.5 \\\\ \\endcases Hard  sigmoid(x)=00.2x+0.51x<2.52.5x2.5x>2.5

import tensorflow as tf
a = tf.constant([-3.0,-1.0, 0.0,1.0,3.0], dtype = tf.float32)
b = tf.keras.activations.hard_sigmoid(a)
print(b)

运行结果:

tf.Tensor([0.  0.3 0.5 0.7 1. ], shape=(5,), dtype=float32)

2.2.3 Sigmoid

S i g m o i d ( x ) = 1 1 + e − x Sigmoid(x) = \\frac11+e^-x Sigmoid(x)=1+ex1

import tensorflow as tf
print('sigmoid(x) = 1 / (1 + exp(-x))')
a = tf.constant([-20, -1.0, 0.0, 1.0, 20], dtype = tf.float32)
b = tf.keras.activations.sigmoid(a).numpy()
print(b)

运行结果:

sigmoid(x) = 1 / (1 + exp(-x))
[2.0611535e-09 2.6894143e-01 5.0000000e-01 7.3105860e-01 1.0000000e+00]

2.2.4 Swish

S w i s h ( x ) = x ⋅ S i g m o i d ( x ) = x 1 + e − x Swish(x) = x\\cdot Sigmoid(x) = \\fracx1+e^-x Swish(x)=xSigmoid(x)=1+exx

import tensorflow as tf
a = tf.constant([-20, -1.0, 0.0, 1.0, 20], dtype = tf.float32)
b = tf.keras.activations.swish(a)
print(b)

运行结果:

tf.Tensor([-4.1223068e-08 -2.6894143e-01  0.0000000e+00  7.3105860e-01  2.0000000e+01], shape=(5,), dtype=float32)

2.2.5 Tanh

Hyperbolic tangent activation function

T a n h ( x ) = e x − e − x e x + e − x Tanh(x) = \\frace^x-e^-xe^x+e^-x Tanh(x)=ex+exexex

import tensorflow as tf
a = tf.constant([-3.0,-1.0, 0.0,1.0,3.0], dtype = tf.float32)
b = tf.keras.activations.tanh(a)
print(b)

运行结果:

tf.Tensor([-0.9950548 -0.7615942  0.         0.7615942  0.9950548], shape=(5,), dtype=float32)

2.2.6 Softmax

Softmax converts a vector of values to a probability distribution.

S o f t m a x ( x i ) = e x i ∑ j = 1 n e x j Softmax(x_i) = \\frace^x_i\\sum_j=1^n e^x_j Softmax(xi)=j=1nexjexi S o f t m a x ( x ⃗ ) = [ S o f t m a x ( x 1 ) , . . . , S o f t m a x ( x i ) , . . . , S o f t m a x ( x n ) ] T Softmax(\\vecx) =[Softmax(x_1),...,Softmax(x_i),...,Softmax(x_n)]^T Softmax(x )=[Softmax(x1),...,Softmax(xi),...,Softmax(xn)]T

import tensorflow as tf
inputs = tf.random.normal(shape=(3,4))
print(inputs)
outputs = tf.keras.activations.softmax(inputs)
print(outputs)
print(tf.reduce_sum(outputs[0,:]))

运行结果:

tf.Tensor([[-1.4463423  -1.2136649   0.37711483 -1.5163935 ]
 [ 1.1458701   0.69421154  0.5825411  -0.6992794 ]
 [ 0.90473056  0.9367949   0.5104403   0.40904504]], shape=(3, 4), dtype=float32)
tf.Tensor([[0.10652403 0.13443059 0.6597281  0.09931726]
 [0.4230326  0.26929048 0.240837   0.06683987]
 [0.3015777  0.31140423 0.20331109 0.183707  ]], shape=(3, 4), dtype=float32)
tf.Tensor(1.0, shape=(), dtype=float32)
import tensorflow as tf
x = tf.constant([-3.0, -1.0, 0.0以上是关于激活函数学习(2022.2.28)的主要内容,如果未能解决你的问题,请参考以下文章

深度学习中激活函数的用途

干货 | 深入理解深度学习中的激活函数

深度学习激活函数

机器学习神经网络的激活函数并通过python实现激活函数

[人工智能-深度学习-5]:人工神经元数学模型激活函数人工神经网络

机器学习:神经网络中的激活函数