Pytorch 4 3 多層感知機的框架實現

2022-09-10 12:54:22 字數 2743 閱讀 8073

step1.引入框架

import torch

from torch import nn

from d2l import torch as d2l

step2.設計模型和初始化引數
# 假定我們設定的 hidden layer 有256個單元  

net = nn.sequential(

nn.flatten(),

nn.linear(in_features=784 ,out_features=256),

nn.relu(),

nn.linear(in_features=256,out_features=10)

)def init_weights(m):

if type(m) == nn.linear:

nn.init.normal_(tensor= m.weight, mean=0,std=0.01)

出現如下的配置資訊說明我們的模型初始化成功,我們執行訓練的時候會按照這個循序進行迴圈

sequential(

(0): flatten(start_dim=1, end_dim=-1)

(1): linear(in_features=784, out_features=256, bias=true)

(2): relu()

(3): linear(in_features=256, out_features=10, bias=true)

)

ster3.設定學習率等引數進行學習
batch_size, lr, num_epochs = 256,0.1,10 

loss = nn.crossentropyloss()

trainer = torch.optim.sgd(net.parameters(), lr=lr)

train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

等待片刻候得到:

task1:新增乙個隱藏層觀察有何不同。

# 只需要修改下模型的結構即可,其他東西都是一樣的

num_input ,num_output= 784,10

num_hidden01,num_hidden02 = 128,128

net = nn.sequential(

nn.flatten(), # 展平層,降維

我們通過給模型net新增一層liner變換來新增隱藏層,通過增加隱藏層,開始的時候或許擬合的比較慢,但是擬合效果很好,增加了隱藏層,那麼就需要通過更多的迭代次數來獲得更好的擬合效果。

task2:將啟用函式換成 sigmoid ,tanh,softmax觀察有何不同。

# sigmoid 啟用函式 

綜合下來比較的話(單層256個單元的隱藏層訓練),relu最為簡單,也是最為常用的啟用函式,雖然最後能夠取得不錯的擬合效果,但是精度波動幅度較大。sigmoid波動小,但是最後的精度好像不是那麼可觀,tanh最後精度,訓練的精度的波動都很小,是乙個比較不錯的active function。最後就是雙層均為128個單元的使用relu啟用函式隱藏層,不論是精度還是最後的精度,都屬於第一水準。就是訓練的時候可能擬合會比較慢,需要更多的迭代次數和資源。

pyTorch深度學習多層感知機的實現

目錄 前兩節實現的linear model 和 softmax model 是單層神經網路,只包含乙個輸入層和乙個輸出層,因為輸入層不對資料進行transformation,所以只算一層輸出層。多層感知機 mutilayer preceptron 加入了隱藏層,將神經網路的層級加深,因為線性層的串聯...

多層感知機

1 單輸出多層感知機 單輸出多層感知機 圖中各變數滿足公式 假如現在有乙個樣本 x 1,x2 t 用該樣本訓練網路時,網路優化的目標為lossfun最小。lossfun是乙個關於變數w和v多元函式。網路的訓練又變成多元函式求極值的問題。求v1的梯度 同理可得v i的梯度 求w11的梯度 同理,可得w...

多層感知機

import d2lzh as d2l from mxnet import nd from mxnet.gluon import loss as gloss 讀取資料集 batch size 256 train iter,test iter d2l.load data fashion mnist b...