啟用函式的作用

2021-10-25 10:44:36 字數 2959 閱讀 7602

使用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。通常在神經網路結構中常用的...