深度學習第三課 多層感知機

2021-08-29 05:25:09 字數 2318 閱讀 3768

多層感知機針對於中間有隱藏層的神經網路結構,對於資料的每一層傳遞都會相應的多一層[w,b],這中間使用的傳參函式稱之為啟用函式,如果啟用函式是線性的話,那麼就沒什麼意義,無論中間有多少層,其實和沒有隱藏層是一樣的,所以需要非線性的函式作為啟用函式。

常使用的有sigmoid(),tanh(),relu()等,sigmoid()函式在比較深的神經網路中容易出現梯度消失的情況,這是因為sigmoid在越遠離原點的位置梯度趨近於零,relu()函式在輸入小於零時,會將資料轉化為零,會丟失一些資訊,不過影響不大,沒什麼關係,relu()的優點主要是計算比較簡單。

本次感知機的實現採用的啟用函式為relu(),多層感知機手動實現:

%matplotlib inline

import gluonbook as gb

from mxnet import nd

from mxnet.gluon import loss as gloss

#引數初始化

batch_size = 256

train_iter,test_iter = gb.load_data_fashion_mnist(batch_size)

num_inputs,num_outputs,num_hiddens = 784,10,512

w1 = nd.random.normal(scale = 0.01,shape = (num_inputs,num_hiddens))

b1 = nd.zeros(num_hiddens)

w2 = nd.random.normal(scale = 0.01,shape = (num_hiddens,num_outputs))

b2 = nd.zeros(num_outputs)

params = [w1,b1,w2,b2]

for param in params:

param.attach_grad()

#定義啟用函式relu

def relu(x):

return nd.maximum(x,0)

def net(x):

x = x.reshape((-1,num_inputs))

h = relu(nd.dot(x,w1)+b1)

yhat = nd.dot(h,w2) + b2

return yhat

#定義損失函式

loss = gloss.softmaxcrossentropyloss() #直接使用了gluon庫中的softmax運算和交叉熵損失計算的loss

#訓練模型

num_epochs , lr = 5,0.5

gb.train_ch3(net,train_iter,test_iter,loss,num_epochs,batch_size,params,lr) #直接呼叫了gluonbook中的train_ch3函式,具體函式可看第二章的多層感知機

#通過改變隱藏層數發現,當增加隱藏層時,loss是減小的,而訓練精度和測試精度變化不大。

結果為:

1)maxinum()函式:

多層感知機的gluon實現:

import gluonbook as gb

from mxnet import gluon,init

from mxnet.gluon import loss as gloss,nn

net = nn.sequential()

net.add(nn.dense(256,activation = 'relu'),nn.dense(10))

net.initialize(init.normal(sigma = 0.01))

#讀取資料,訓練模型

batch_size = 256

train_iter,test_iter = gb.load_data_fashion_mnist(batch_size)

loss = gloss.softmaxcrossentropyloss()

trainer = gluon.trainer(net.collect_params(),'sgd',)

num_epochs = 5

gb.train_ch3(net,train_iter,test_iter,loss,num_epochs,batch_size,none,none,trainer)

使用gluon結果:

第三課學習

emi,emc,電池干擾,電池相容 低頻濾波電容,本處採用的是100u發 100微法,能耐16v的電壓 的電容,其主要作用有兩個,乙個是防止瞬間電壓波動,二是提供較為平穩的電源,通常在需要提供電源的地方都可以考慮加上這麼乙個電容。要考慮其耐壓值,一般要超過整個電壓的兩倍以上。第二個是考慮其容值,電容...

python第三課答案 python第三課

字串操作 s alexwusir s1 s.capitalize 首字母大寫 print s1 全大寫,全小寫 s2 s.upper s21 s.lower print s2,s21 大小寫翻轉 s3 s.swapcase print s3 每個隔開 特殊字元或數字 的單詞首字母大寫 s alex ...

python第三課答案 python第三課筆記

以下哪個變數的命名不正確?為什麼?a mm 520 b mm520 c 520 mm d 520 mm 答 c不正確,不能數字開頭 在不上機的情況下,以下 你能猜到螢幕會列印什麼內容嗎?myteacher 小甲魚 yourteacher myteacher yourteacher 黑夜 print ...