神經網路的訓練主要包含以下語句:
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 ...