PyTorch基礎 Adam優化器使用 06

2021-10-19 08:14:51 字數 3129 閱讀 7182

import numpy as np

import torch

from torch import nn,optim

from torch.autograd import variable

from torchvision import datasets,transforms

from torch.utils.data import dataloader

# 訓練集

train_data = datasets.mnist(root=

"./"

,# 存放位置

train =

true

,# 載入訓練集

transform=transforms.totensor(),

# 把資料變成tensor型別

download =

true

)# 測試集

test_data = datasets.mnist(root=

"./"

, train =

false

, transform=transforms.totensor(),

download =

true

)

# 批次大小

batch_size =

64# 裝載訓練集

train_loader = dataloader(dataset=train_data,batch_size=batch_size,shuffle=

true

)# 裝載測試集

test_loader = dataloader(dataset=test_data,batch_size=batch_size,shuffle=

true

)

for i,data in

enumerate

(train_loader)

: inputs,labels = data

print

(inputs.shape)

print

(labels.shape)

break

# 定義網路結構

class

net(nn.module)

:def

__init__

(self)

:super

(net,self)

.__init__(

)# 初始化

self.fc1 = nn.linear(

784,10)

# 784個輸入10個輸出

self.softmax = nn.softmax(dim=1)

# 啟用函式 dim=1表示對第乙個維度進行概率計算

defforward

(self,x)

:# torch.size([64, 1, 28, 28]) -> (64,784)

x = x.view(x.size()[

0],-

1)# 4維變2維 (在全連線層做計算只能2維)

x = self.fc1(x)

# 傳給全連線層繼續計算

x = self.softmax(x)

# 使用softmax啟用函式進行計算

return x

# 定義模型

model = net(

)# 定義代價函式

mse_loss = nn.crossentropyloss(

)# 交叉熵

# 定義優化器

optimizer = optim.adam(model.parameters(

),lr=

0.001

)# adam梯度下降

# 定義模型訓練和測試的方法

deftrain()

:for i,data in

enumerate

(train_loader)

:# 獲得乙個批次的資料和標籤

inputs,labels = data

# 獲得模型**結果(64,10)

out = model(inputs)

# 交叉熵代價函式out(batch,c:類別的數量),labels(batch)

loss = mse_loss(out,labels)

# 梯度清零

optimizer.zero_grad(

)# 計算梯度

loss.backward(

)# 修改權值

optimizer.step(

)def

test()

: correct =

0for i,data in

enumerate

(test_loader)

:# 獲得乙個批次的資料和標籤

inputs,labels = data

# 獲得模型**結果(64,10)

out = model(inputs)

# 獲得最大值,以及最大值所在的位置

_,predicted = torch.

max(out,1)

# **正確的數量

correct +=

(predicted==labels)

.sum()

print

("test acc:"

.format

(correct.item()/

len(test_data)

))

# 訓練

Pytorch中adam優化器的引數問題

之前用的adam優化器一直是這樣的 alpha optim torch.optim.adam model.alphas config.alpha lr,betas 0.5,0.999 weight decay config.alpha weight decay 沒有細想內部引數的問題,但是最近的工作...

梯度優化演算法Adam

最近讀乙個 發現用了乙個梯度更新方法,剛開始還以為是什麼奇奇怪怪的梯度下降法,最後分析一下是用一階梯度及其二次冪做的梯度更新。網上搜了一下,果然就是稱為adam的梯度更新演算法,全稱是 自適應矩估計 adaptive moment estimation 國際慣例,參考博文 一文看懂各種神經網路優化演...

adam相關的優化器

adam 自出道以來,就一直是最流行的深度學習優化器,哪怕現在其實已經有幾種可能更好用的優化器 如果將 adam 優化出現以來產生的關於優化過程的有趣想法按時間順序排列的話,結果如下 這個來自 andrej karpathy 的笑話或多或少是我深度學習專案的一套流程。除非把具有學習率硬編碼的 直接從...