1. relu函数:
公式: 深层网络内部激活函数常用这个
import matplotlib.pyplot as plt
def relu_fun(x):
if x>=0:
return x
else:
return 0
x = np.random.randn(10)
y = np.arange(10)
plt.plot(y,x)
for i ,t in enumerate(x):
x[i] = relu_fun(t)
plt.plot(y,x)
2.sigmod函数,深层网络不咋用这个激活函数,因为容易梯度消失,把输入变为范围 0,1之间和tanh曲线挺像,但是tanh函数范围为-1,1之间。
import numpy as np
def sigmoid(x):
s = 1 / (1 + np.exp(-x))
return s
x = np.arange(-100,100).astype(np.float32)/10.0
y = np.arange(-100,100).astype(np.float32)/10.0
plt.plot(y,x)
for i ,t in enumerate(x):
x[i] = sigmoid(t)
plt.plot(y,x)
3.tanh函数,把输入变为范围 -1,1之间。
x = np.arange(-100,100).astype(np.float32)/10.0
y = np.tanh(x)
plt.plot(x,y)
4.leak relu函数,leakrelu函数和relu函数的主要区别是,leakrelu 函数保留了小于0的部分的一些影响,只是把这部分性影响减少了。
fun = nn.LeakyReLU()
x = np.arange(-10000,1000)/100.0
x = torch.from_numpy(x)
x = x.view(-1,1)
t=fun(x)
t=t.numpy()
x= x.numpy()
plt.plot(x,t)
plt.grid(alpha=0.4,linestyle=':')
5.elu函数,α超参数一般取1
fun = nn.ELU()
x = np.arange(-500,200)/100.0
x = torch.from_numpy(x)
x = x.view(-1,1)
t = fun(x)
x = x.numpy()
t = t.numpy()
plt.plot(x,t)
plt.grid(alpha=0.4,linestyle=':')