pytorch—优化器

一、简介:优化器在神经网络模型中的作用是通过调节模型参数来优化模型性能,使其能够更好的拟合训练数据,提高预测准确性。同时,优化器还具有快速收敛、防止过拟合和避免陷入局部最优等能力,以确保模型的有效性和准确性

二、参数:

        1、params参数:模型的参数,传递给优化器可调节参数的信息

         2、 lr参数:学习速率,一般来说学习速率不能设置的太大或太小,太大模型不稳定,太小模型训练太慢,刚开始训练时推荐学习速率较大,训练到后期再使用小速率

三、代码应用(代码中的注释更详细):

(此次采用的神经网络模型还是先前文章中介绍的实战的一种网络模型)

import torch.optim
from torch import nn
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from torch.utils.data import DataLoader
import torchvision

tensor_trans = transforms.ToTensor()

test_data = torchvision.datasets.CIFAR10(root="./dataloader",train=False,transform=tensor_trans,download=True)

dataloader = DataLoader(dataset=test_data,batch_size=64,shuffle=True,num_workers=0,drop_last=False)


# 在神经网络模型中padding需要自己进行根据公式进行计算
class Module(nn.Module):

    def __init__(self):
        super().__init__()
        # 第一次卷积,输出的通道数为下一个图像的输入通道数,padding根据公式自己计算
        self.conv1 = nn.Conv2d(in_channels=3,out_channels=32,kernel_size=5,padding=2)
        self.maxpool1 = nn.MaxPool2d(kernel_size=2)
        self.conv2 = nn.Conv2d(in_channels=32,out_channels=32,kernel_size=5,padding=2)
        self.maxpool2 = nn.MaxPool2d(2)
        self.conv3 = nn.Conv2d(in_channels=32,out_channels=64,kernel_size=5,padding=2)
        self.maxpool3 = nn.MaxPool2d(kernel_size=2)
        self.flatten = nn.Flatten()
        # 1024计算:图中给出64@4*4,即共64*4*4个输出
        self.linear1 = nn.Linear(1024,64)
        self.linear2 = nn.Linear(64,10)

    def forward(self,imgs):
        imgs = self.conv1(imgs)
        imgs = self.maxpool1(imgs)
        imgs = self.conv2(imgs)
        imgs = self.maxpool2(imgs)
        imgs = self.conv3(imgs)
        imgs = self.maxpool3(imgs)
        imgs = self.flatten(imgs)
        imgs = self.linear1(imgs)
        imgs = self.linear2(imgs)
        return imgs
# 检测结果是否正确
# module = Module()
# input = torch.ones([64,3,32,32]) # 利用ones函数设置一个全为1的张量,指定形状为(64,3,32,32),用于测试数据是否正确
# output = module(input)
# print(output.shape)

# 建立一个loss
loss = nn.CrossEntropyLoss()

module = Module()

# 设置优化器,采用随机梯度下降的优化器
optima1 = torch.optim.SGD(params=module.parameters(),lr=0.01)
# params参数:模型的参数,传递给优化器可调节参数的信息
# lr参数:学习速率,一般来说学习速率不能设置的太大或太小,太大模型不稳定,太小模型训练太慢,刚开始训练时推荐学习速率较大,训练到后期再使用小速率

# 迭代20轮
for each in range(20):
    # 设置一个参数,用于查看每一轮损失值的总和
    running_loss = 0.0
    for data in dataloader:
        imgs,targets = data
        # 将训练结果存储到神经网络当中
        output = module(imgs)
        # result_loss得到的是神经网络输出和真实输出之间的一个误差
        result_loss = loss(output,targets)
        # 优化器使用第一步:将每一个网络模型中每一个可以调节的参数对应的的梯度调为0
        optima1.zero_grad() # 此时的参数对应的梯度全部设置为0
        # 优化器需要每个参数的梯度
        result_loss.backward()  # 得到每个可调节参数对应的梯度
        optima1.step()  # 调用此方法对每个参数进行调优
        # 将每个神经网络的损失相加
        running_loss += result_loss
    # 查看每一轮
    print(running_loss)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值