Pytorch學習系列 八 訓練神經網路

2021-08-03 05:13:23 字數 1060 閱讀 9331

神經網路的訓練主要包含以下語句:

if cuda:

model.cuda()

model.train()#把模型的狀態設定為訓練狀態,主要針對dropout層

optimizer = torch.optim.sgd((model.parameters(), lr=lr, momentum=momentum))

for epoch in range(epochs):

for batch_idx, (data, target) in enumerate(train_loader):

if cuda:

data, target = data.cuda(), target.cuda()

output = model(data) #對data做前向過程,得到輸出

loss = loss(model, output, target)#計算output和target之間的損失

loss.backward()#反向過程,計算損失關於各引數的梯度

optimizer.step()#利用計算得到的梯度對引數進行更新

在訓練開始時,引數的初始化是隨機的,為了讓每次的結果一致,我們需要設定隨機種子。在main函式中加入如下語句:

torch.manual_seed(args.seed)#為cpu設定隨機種子

if cuda:

torch.cuda.manual_seed(seed)#為當前gpu設定隨機種子

torch.cuda.manual_seed_all(seed)#為所有gpu設定隨機種子

pytorch的維護者在回答網友們的問題時表示未來會用torch.manual_seed()同時設定cpu和gpu的種子,不知道現在是否實現了?

如果想要在訓練過程中修改學習率,需要使用新的引數構建新的optimizer。

是否應該在每個iteration之前將模型引數的梯度清0????

經過實驗發現,對於optim.sgd()優化演算法,如果不新增optimizer.grad_zero(),那麼每次iteration計算的梯度會累加到引數梯度上。

pytorch總結學習系列 操作

算術操作 在pytorch中,同一種操作可能有很多種形式,下 用加法作為 加法形式 x torch.tensor 5.5,3 y torch.rand 5,3 print x y 加法形式 print torch.add x,y 還可指定輸出 result torch.empty 5,3 torch...

PyTorch學習筆記5 批訓練

1 torch.utils.data.tensordataset 和torch.utils.data.dataloader pytorch提供了乙個資料讀取的方法,其由兩個類構成 torch.utils.data.dataset和dataloader,我們要自定義自己資料讀取的方法,就需要繼承tor...

pytorch學習筆記五 批訓練

學自莫凡python 一批5個資料 batch size 5 15個資料總共被分成3批訓練 step 3 並將所有資料整體訓練了3遍。1.匯入模組 import torch import torch.utils.data as data data是用來批訓練的模組 2.一批訓練5個資料 batch ...