多層感知機針對於中間有隱藏層的神經網路結構,對於資料的每一層傳遞都會相應的多一層[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 ...