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 in vscode (Module ‘xx’ has no ‘xx’ member pylint(no-member))

    在VSCode setting中搜索python.linting.pylintPath改为pylint的路径,如/home/xxx/.local/lib/python3.5/site-packages/pylint

    PyTorch 2023年4月6日
    00
  • pytorch-神经网络拟合曲线实例

    PyTorch-神经网络拟合曲线实例 在本文中,我们将介绍如何使用PyTorch实现神经网络拟合曲线。我们将提供两个示例,一个是使用随机数据,另一个是使用真实数据。 示例1:使用随机数据 以下是使用PyTorch实现神经网络拟合曲线的示例代码: import torch import torch.nn as nn import numpy as np imp…

    PyTorch 2023年5月16日
    00
  • Colab下pytorch基础练习

    Colab    Colaboratory 是一个 Google 研究项目,旨在帮助传播机器学习培训和研究成果。它是一个 Jupyter 笔记本环境,并且完全在云端运行,已经默认安装好 pytorch,不需要进行任何设置就可以使用,并且完全在云端运行。详细使用方法可以参考 Rogan 的博客:https://www.cnblogs.com/lfri/p/10…

    2023年4月8日
    00
  • Python LeNet网络详解及pytorch实现

    Python LeNet网络详解及PyTorch实现 本文将介绍LeNet网络的结构和实现,并使用PyTorch实现一个LeNet网络进行手写数字识别。 1. LeNet网络结构 LeNet网络是由Yann LeCun等人在1998年提出的,是一个经典的卷积神经网络。它主要用于手写数字识别,包含两个卷积层和三个全连接层。 LeNet网络的结构如下所示: 输入…

    PyTorch 2023年5月15日
    00
  • 使用国内源来安装pytorch速度很快

      一、找到合适的安装方式 pytorch官网:https://pytorch.org/       二、安装命令 # 豆瓣源 pip install torch torchvision torchaudio -i https://pypi.douban.com/simple # 其它源 pip install torch torchvision torch…

    2023年4月8日
    00
  • PyTorch 训练前对数据加载、预处理 深度学习框架PyTorch一书的学习-第五章-常用工具模块

    参考:pytorch torchvision transform官方文档 Pytorch学习–编程实战:猫和狗二分类 深度学习框架PyTorch一书的学习-第五章-常用工具模块 # coding:utf8 import os from PIL import Image from torch.utils import data import numpy as…

    PyTorch 2023年4月6日
    00
  • Pytorch学习:实现ResNet34网络

    深度残差网络ResNet34的总体结构如图所示。 该网络除了最开始卷积池化和最后的池化全连接之外,网络中有很多相似的单元,这些重复单元的共同点就是有个跨层直连的shortcut。   ResNet中将一个跨层直连的单元称为Residual block。 Residual block的结构如下图所示,左边部分是普通的卷积网络结构,右边是直连,如果输入和输出的通…

    2023年4月6日
    00
  • 莫烦PyTorch学习笔记(三)——激励函数

    1. sigmod函数 函数公式和图表如下图           在sigmod函数中我们可以看到,其输出是在(0,1)这个开区间内,这点很有意思,可以联想到概率,但是严格意义上讲,不要当成概率。sigmod函数曾经是比较流行的,它可以想象成一个神经元的放电率,在中间斜率比较大的地方是神经元的敏感区,在两边斜率很平缓的地方是神经元的抑制区。 当然,流行也是曾…

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