使用pytorch弄乙個單層網路,但是啟用函式選擇線性函式,不然永遠達不到要求,
啟用函式的作用,摘自知乎。
f(*)稱為啟用函式或激勵函式(activation function),啟用函式的主要作用是完成資料的非線性變換,解決線性模型的表達、分類能力不足的問題;
啟用函式的主要作用是改變之前資料的線性關係,如果網路中全部是線性變換,則多層網路可以通過矩陣變換,直接轉換成一層神經網路。所以啟用函式的存在,使得神經網路的「多層」有了實際的意義,使網路更加強大,增加網路的能力,使它可以學習複雜的事物,複雜的資料,以及表示輸入輸出之間非線性的複雜的任意函式對映。
啟用函式的另乙個重要的作用是 執行資料的歸一化,將輸入資料對映到某個範圍內,再往下傳遞,這樣做的好處是可以限制資料的擴張,防止資料過大導致的溢位風險。
這裡還要提一下:為什麼要使用非線性的啟用函式?
因為如果使用線性的啟用函式,那麼輸入x跟輸出y之間的關係為線性的,便可以不需要網路結構,直接使用線性組合便可以。只有在輸出層極小可能使用線性啟用函式,在隱含層都使用非線性啟用函式。
下面是pytorch-單層網路,用於線性回歸,大財小用。
import torch as tor
from torch import nn
import numpy as np
from torch.nn import functional as f
from torch import optim as op #優化器
######
#函式版
##def f_function
(x):
data=
0.5*x+
0.5+np.random.
uniform
(0.0001
,0.0002,(
1,1)
) #注意是這樣呼叫
#data1=0.5*x+1.8+np.random.uniform(0.02,0.03,(1,1)) #理想值
return data
###生成帶噪音的資料的公式
def use_function()
: x=np.
mat(np.
linspace(0
,5,num=
1000))
y=np.
mat(
f_function
(x))
x1=np.
mat(np.
full((
1,1000),
1)) #生成1
*1000作為權值
return x,x1,y #y作為單層感知器的權重
##生成噪音np.
mat(
)##單層神經網路
class net
(nn.module)
: def __init__
(self)
:super
(net, self)
.__init__
() #net繼承nn類
self.fc1=nn.
linear(2
,1,bias=false) #生成乙個線性層
def forward_function
(self , x)
: #輸入
xainxingceng_output=
(self.
fc1(x)
) #暫時不用
return xainxingceng_output #完成前向傳播
net=
net(
) #例項化上述的類
optimizer=op.
sgd(net.
parameters()
,lr=
0.01
) #優化net中的引數,學習速率為0.01
x,b,y=
use_function
() #第一是輸入,第二個是權值,第三個是期望值
x=tor.
floattensor
(x)b=tor.
floattensor
(b) #
input=tor.
cat(
(x,b),0
) #行連線
y=tor.
floattensor
(y) #根據要求轉換為張量
for iteration in range(20
):train_loss=
0 out=tor.
zeros((
1,1000))
for i in range
(1000):
out[
0,i]
=net.
forward_function
(input[
:,i]
) #輸入x 輸出啟用層的結果 0維矩陣乘法無法實現
#loss=f.mse_loss(out,y[0,i]) #計算損失函式
#train_loss += loss #tensor(0.0594, grad_fn=)
##進行判斷
loss=f.
mse_loss
(out,y)
e=loss #求導是乘法
if e <
0.01
:break
else
: optimizer.
zero_grad
() #就以最速下降為例。由於代入的x每次都不一樣,所以不存在梯度累加,但是其他的演算法,比如動量是需要考慮其他的,那就不知到怎麼用了
e.backward()
optimizer.
step
() #開始優化,並且會自動更新
print
(e)print
(net.fc1.weight)
啟用函式的作用
首先提一下啟用函式的一般形式,在我平時的學習中,我遇到過的一般是這四種形式,simoid,tanh,relu,softplus。s imoi d函式也 稱s曲線 f x 11 e x tanh f x tanh x relu f x m ax x 0 softmax f x lo g 1 exp x...
啟用函式的作用
引知乎上的回答 啟用函式是用來加入非線性因素的,因為線性模型的表達能力不夠。以下,同種顏色為同類資料。某些資料是線性可分的,意思是,可以用一條直線將資料分開。比如下圖 這時候你需要通過一定的機器學習的方法,比如感知機演算法 perceptron learning algorithm 找到乙個合適的線...
啟用函式作用
在神經網路結構中,通過啟用函式將非線性的特性引入到神經網路中,從而讓神經網路可以理解 處理複雜的資料及問題。通常啟用函式的形式可以寫成 y f x 這裡的 x 是啟用函式f 的輸入,y 是 x經過啟用函式變換得到的輸出。通過f 將原來的輸入 x 對映成為另外一種形式表達y。通常在神經網路結構中常用的...