Pytorch 如何训练网络时调整学习率

PyTorch如何训练网络时调整学习率

在PyTorch中,我们可以使用学习率调度器来动态地调整学习率。本文将介绍如何使用PyTorch中的学习率调度器来调整学习率,并提供两个示例说明。

1. 示例1:使用StepLR调整学习率

以下是一个示例,展示如何使用StepLR调整学习率。

import torch
import torch.nn as nn
import torch.optim as optim
from torch.optim.lr_scheduler import StepLR

# 创建一个简单的神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = Net()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 定义学习率调度器
scheduler = StepLR(optimizer, step_size=5, gamma=0.1)

# 训练模型
for epoch in range(10):
    running_loss = 0.0
    for i in range(10):
        # 生成随机输入和标签
        inputs = torch.randn(1, 10)
        labels = torch.randn(1, 1)

        # 将梯度清零
        optimizer.zero_grad()

        # 前向传播
        outputs = model(inputs)

        # 计算损失
        loss = criterion(outputs, labels)

        # 反向传播
        loss.backward()

        # 更新参数
        optimizer.step()

        running_loss += loss.item()

    # 调整学习率
    scheduler.step()

    print('Epoch %d, Loss: %.3f' % (epoch+1, running_loss/10))

在上面的示例中,我们首先创建了一个简单的神经网络模型,并定义了损失函数和优化器。然后,我们使用StepLR创建了一个学习率调度器,其中step_size表示每隔多少个epoch调整一次学习率,gamma表示学习率的缩放因子。接下来,我们使用for循环遍历训练数据集,并在每个批次上训练模型。在每个epoch结束时,我们使用scheduler.step()方法调整学习率。最后,我们打印出每个epoch的Loss。

2. 示例2:使用ReduceLROnPlateau调整学习率

以下是一个示例,展示如何使用ReduceLROnPlateau调整学习率。

import torch
import torch.nn as nn
import torch.optim as optim
from torch.optim.lr_scheduler import ReduceLROnPlateau

# 创建一个简单的神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = Net()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 定义学习率调度器
scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=2)

# 训练模型
for epoch in range(10):
    running_loss = 0.0
    for i in range(10):
        # 生成随机输入和标签
        inputs = torch.randn(1, 10)
        labels = torch.randn(1, 1)

        # 将梯度清零
        optimizer.zero_grad()

        # 前向传播
        outputs = model(inputs)

        # 计算损失
        loss = criterion(outputs, labels)

        # 反向传播
        loss.backward()

        # 更新参数
        optimizer.step()

        running_loss += loss.item()

    # 计算验证集Loss
    val_loss = criterion(model(torch.randn(1, 10)), torch.randn(1, 1))

    # 调整学习率
    scheduler.step(val_loss)

    print('Epoch %d, Loss: %.3f, Val Loss: %.3f' % (epoch+1, running_loss/10, val_loss))

在上面的示例中,我们首先创建了一个简单的神经网络模型,并定义了损失函数和优化器。然后,我们使用ReduceLROnPlateau创建了一个学习率调度器,其中mode表示监测的指标,factor表示学习率的缩放因子,patience表示在多少个epoch内没有改善时调整学习率。接下来,我们使用for循环遍历训练数据集,并在每个批次上训练模型。在每个epoch结束时,我们计算验证集Loss,并使用scheduler.step()方法调整学习率。最后,我们打印出每个epoch的Loss和验证集Loss。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pytorch 如何训练网络时调整学习率 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 源码编译安装pytorch debug版本

    根据官网指示安装 pytorch安装指南:https://github.com/pytorch/pytorch conda 安装对应的包: https://anaconda.org/anaconda/ (这个网站可以搜索包的源) 如果按照官网提供的export cmake_path方式不成功,推荐在~/.bashrc中添加cmake的路径 eg:export…

    PyTorch 2023年4月8日
    00
  • pytorch 中tensor在CPU和GPU之间转换

    1. CPU tensor转GPU tensor: cpu_imgs.cuda()2. GPU tensor 转CPU tensor: gpu_imgs.cpu()3. numpy转为CPU tensor: torch.from_numpy( imgs )4.CPU tensor转为numpy数据: cpu_imgs.numpy()5. note:GPU t…

    PyTorch 2023年4月8日
    00
  • Python使用pytorch动手实现LSTM模块

    Python使用PyTorch动手实现LSTM模块 LSTM(长短时记忆网络)是一种常用的循环神经网络,它可以用于处理序列数据。在本文中,我们将介绍如何使用PyTorch实现LSTM模块,并提供两个示例说明。 示例1:使用LSTM模块实现字符级语言模型 以下是一个使用LSTM模块实现字符级语言模型的示例代码: import torch import torc…

    PyTorch 2023年5月16日
    00
  • 训练一个图像分类器demo in PyTorch【学习笔记】

    【学习源】Tutorials > Deep Learning with PyTorch: A 60 Minute Blitz > Training a Classifier  本文相当于对上面链接教程中自认为有用部分进行的截取、翻译和再注释。便于日后复习、修正和补充。 边写边查资料的过程中猛然发现这居然有中文文档……不过中文文档也是志愿者翻译的,…

    2023年4月8日
    00
  • pytorch踩坑记

    因为我有数学物理背景,所以清楚卷积的原理。但是在看pytorch文档的时候感到非常头大,罗列的公式以及各种令人眩晕的下标让入门新手不知所云…最初我以为torch.nn.conv1d的参数in_channel/out_channel表示图像的通道数,经过运行错误提示之后,才知道[in_channel,kernel_size]构成了卷积核。  loss函数中…

    2023年4月6日
    00
  • PyTorch代码调试利器: 自动print每行代码的Tensor信息

      本文介绍一个用于 PyTorch 代码的实用工具 TorchSnooper。作者是TorchSnooper的作者,也是PyTorch开发者之一。 GitHub 项目地址: https://github.com/zasdfgbnm/TorchSnooper 大家可能遇到这样子的困扰:比如说运行自己编写的 PyTorch 代码的时候,PyTorch 提示你说…

    PyTorch 2023年4月8日
    00
  • pytorch实现手动线性回归

    import torch import matplotlib.pyplot as plt learning_rate = 0.1 #准备数据 #y = 3x +0.8 x = torch.randn([500,1]) y_true = 3*x + 0.8 #计算预测值 w = torch.rand([],requires_grad=True) b = tor…

    2023年4月8日
    00
  • 3、pytorch实现最基础的MLP网络

    %matplotlib inline import numpy as np import torch from torch import nn import matplotlib.pyplot as plt d = 1 n = 200 X = torch.rand(n,d) #200*1, batch * feature_dim #y = 3*torch.s…

    PyTorch 2023年4月7日
    00
合作推广
合作推广
分享本页
返回顶部