深度學習-Pytorch框架學習之模型訓練和測試

前言

前面四篇文章,介紹了模型搭建、數據準備及pytorch中常用的計算方法等,有了上述基礎後就可以訓練模型了,下面這篇文章會簡單介紹下在pytorch框架下如何訓練深度學習模型,以及一些常用代碼。

深度學習-Pytorch框架學習之模型訓練和測試

模型訓練

以一個簡單的分類模型為例,代碼如下:

<code># 損失函數和優化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

# 逐步迭代,訓練模型
total_step = len(train_loader)
for epoch in range(num_epochs):
for i ,(images, labels) in enumerate(train_loader):
images = images.to(device)
labels = labels.to(device)

# 前向傳播
outputs = model(images)
loss = criterion(outputs, labels)

# 反向傳播和優化
optimizer.zero_grad()
loss.backward()
optimizer.step()

if (i+1) % 100 == 0:
print('Epoch: [{}/{}], Step: [{}/{}], Loss: {}'
.format(epoch+1, num_epochs, i+1, total_step, loss.item()))/<code>

自定義損失函數

繼承torch.nn.Module類,然後寫自己定義的損失函數。

<code>class MyLoss(torch.nn.Moudle):
def __init__(self):
super(MyLoss, self).__init__()

def forward(self, x, y):
Loss = torch.mean((x - y) ** 2)
return Loss/<code>

L1 正則化

<code>l1_regularization = torch.nn.L1Loss(reduction='sum')
loss = ... # Standard cross-entropy loss
for param in model.parameters():
loss += torch.sum(torch.abs(param))
loss.backward()/<code>

不對偏置項(b)進行權重衰減(weight decay)

pytorch框架中,weight decay相當於l2正則化。

<code>bias_list = (param for name, param in model.named_parameters() if name[-4:] == 'bias')
others_list = (param for name, param in model.named_parameters() if name[-4:] != 'bias')
parameters = [{'parameters': bias_list, 'weight_decay': 0},
{'parameters': others_list}]
optimizer = torch.optim.SGD(parameters, lr=1e-2, momentum=0.9, weight_decay=1e-4)/<code>

梯度裁剪(gradient clipping)

在深度學習的模型訓練中,為了避免梯度爆炸問題,可以在反向傳播過程中裁減梯度,從而保證梯度不會超過閾值。在pytorch框架下,一句話就可以解決:

<code>torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=20)/<code>

如何得到當前學習率

<code># If there is one global learning rate (which is the common case).
lr = next(iter(optimizer.param_groups))['lr']

# If there are multiple learning rates for different layers.
all_lr = []
for param_group in optimizer.param_groups:
all_lr.append(param_group['lr'])/<code>


未完待續...


深度學習-Pytorch框架學習之模型訓練和測試


分享到:


相關文章: