1. 導入 Adam 優化器
在你的訓練腳本(通常是 train.py
或類似的檔案)中,導入 torch.optim
模組:
Python
import torch.optim as optim
2. 初始化 Adam 優化器
在你的訓練腳本中,找到初始化模型的地方,通常是在 __main__
區塊或一個函數中。在這裡,你需要創建一個 Adam 優化器的實例。你需要將模型的參數傳遞給優化器,並設定學習率等超參數。
Python
# ... (其他程式碼)
# 假設你的模型叫做 model
optimizer = optim.Adam(model.parameters(), lr=0.001) # 設定學習率為 0.001
# ... (其他程式碼)
3. 在訓練迴圈中使用 Adam 優化器
在你的訓練迴圈中,你需要執行以下步驟:
- 清空梯度: 在每個訓練迭代開始時,使用
optimizer.zero_grad()
清空模型參數的梯度。 - 計算損失: 計算模型的損失函數。
- 反向傳播: 使用
loss.backward()
計算梯度。 - 更新參數: 使用
optimizer.step()
更新模型參數。
Python
# ... (訓練迴圈)
for i, data in enumerate(dataloader):
# ... (讀取資料)
optimizer.zero_grad() # 清空梯度
outputs = model(inputs) # 前向傳播
loss = criterion(outputs, targets) # 計算損失
loss.backward() # 反向傳播
optimizer.step() # 更新參數
# ... (其他程式碼)
# ... (訓練迴圈結束)
完整範例
以下是一個簡化的範例,展示如何在 zi2zi-pytorch 中使用 Adam 優化器:
Python
import torch
import torch.nn as nn
import torch.optim as optim
# 定義模型
class MyModel(nn.Module):
# ...
# 初始化模型
model = MyModel()
# 定義損失函數
criterion = nn.MSELoss()
# 初始化 Adam 優化器
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 訓練迴圈
for i, data in enumerate(dataloader):
# ... (讀取資料)
optimizer.zero_grad() # 清空梯度
outputs = model(inputs) # 前向傳播
loss = criterion(outputs, targets) # 計算損失
loss.backward() # 反向傳播
optimizer.step() # 更新參數
# ... (其他程式碼)
前一個修改的作者已經有加入 adam 優化器, 程式碼:
model.py
self.optimizer_G = torch.optim.Adam(self.netG.parameters(), lr=self.lr, betas=(0.5, 0.999))
self.optimizer_D = torch.optim.Adam(self.netD.parameters(), lr=self.lr, betas=(0.5, 0.999))