?PyTorch Activation Function.
Activation Function
一句話概括 Activation: 就是讓神經(jīng)網(wǎng)絡(luò)可以描述非線性問題的步驟, 是神經(jīng)網(wǎng)絡(luò)變得更強(qiáng)大.
當(dāng)神經(jīng)網(wǎng)絡(luò)層只有兩三層, 不是很多的時(shí)候, 對于隱藏層, 使用任意的激勵函數(shù), 不會有特別大的影響. 不過, 當(dāng)使用特別多層的神經(jīng)網(wǎng)絡(luò), 不得隨意選擇. 因?yàn)檫@會涉及到梯度爆炸, 梯度消失的問題.
少量層結(jié)構(gòu)中, 可以嘗試很多種不同的激勵函數(shù). 在卷積神經(jīng)網(wǎng)絡(luò) Convolutional neural networks 的卷積層中, 推薦的激勵函數(shù)是 relu. 在循環(huán)神經(jīng)網(wǎng)絡(luò)中 recurrent neural networks, 推薦的是 tanh 或者是 relu .
Torch 中的激勵函數(shù)
Torch 中的激勵函數(shù)有很多, 不過平時(shí)要用到的就這幾個(gè). relu
, sigmoid
, tanh
, softplus
.
import torch
import torch.nn.functional as F # 激勵函數(shù)都在這
from torch.autograd import Variable
# 做一些假數(shù)據(jù)來觀看圖像
x = torch.linspace(-5, 5, 200) # x data (tensor), shape=(100, 1)
x = Variable(x)
做生成不同的激勵函數(shù)數(shù)據(jù):
x_np = x.data.numpy() # 換成 numpy array, 出圖時(shí)用
# 幾種常用的 激勵函數(shù)
y_relu = F.relu(x).data.numpy()
y_sigmoid = F.sigmoid(x).data.numpy()
y_tanh = F.tanh(x).data.numpy()
y_softplus = F.softplus(x).data.numpy()
# y_softmax = F.softmax(x) softmax 比較特殊, 不能直接顯示, 不過他是關(guān)于概率的, 用于分類
畫圖, 畫圖的代碼:
import matplotlib.pyplot as plt
plt.figure(1, figsize=(8, 6))
plt.subplot(221)
plt.plot(x_np, y_relu, c='red', label='relu')
plt.ylim((-1, 5))
plt.legend(loc='best')
plt.subplot(222)
plt.plot(x_np, y_sigmoid, c='red', label='sigmoid')
plt.ylim((-0.2, 1.2))
plt.legend(loc='best')
plt.subplot(223)
plt.plot(x_np, y_tanh, c='red', label='tanh')
plt.ylim((-1.2, 1.2))
plt.legend(loc='best')
plt.subplot(224)
plt.plot(x_np, y_softplus, c='red', label='softplus')
plt.ylim((-0.2, 6))
plt.legend(loc='best')
plt.show()