当前位置: 首页 > news >正文

pytorch学习笔记-Loss的使用、在神经网络中加入Loss、优化器(optimizer)的使用

博主最近真要累鼠了…
anyway上号更新一点,预计下周就能把该系列学完了= =

Loss的使用

具体关注一下官网上对于形状的说明,如果报错就看看是不是形状不符合要求,其他没啥

import torch
from torch.nn import L1Loss,MSELoss, CrossEntropyLoss
from torch import nn#L1Loss
inputs = torch.tensor([1,2,3],dtype=torch.float32)
targets = torch.tensor([1,2,5],dtype=torch.float32)l1_loss = L1Loss()
res = l1_loss(inputs, targets)print("L1Loss:",res)#MSE
mse_loss = MSELoss()
res = mse_loss(inputs, targets)print("mseLoss:",res)#crossentropy
x = torch.tensor([0.1,0.2,0.3])#每一类的概率
y = torch.tensor([1])#目标类别编号# Input: Shape(N,C), N:bt_size C:class
x = torch.reshape(x,(1,3))
# print(x)cross_loss = CrossEntropyLoss()
res = cross_loss(x,y)
print("crossentropyLoss:",res)# L1Loss: tensor(0.6667)
# mseLoss: tensor(1.3333)
# crossentropyLoss: tensor(1.1019)

在神经网络中加入Loss

了解Loss的本质就是计算真值和目标值之间的差距后,怎么在神经网络中引入loss也蛮自然的:

import torch
import torch.nn as nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential, CrossEntropyLoss
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms, datasets
from torch.utils.data import DataLoaderdata_transforms = transforms.Compose([transforms.ToTensor()
])test_data = datasets.CIFAR10(root="./dataset",train=False,transform=data_transforms)dataloader = DataLoader(test_data,batch_size=64)class myModule(nn.Module):def __init__(self):super().__init__()self.model1 = Sequential(Conv2d(3,32,5,padding=2),MaxPool2d(2),Conv2d(32,32,5,padding=2),MaxPool2d(2),Conv2d(32,64,5,padding=2),MaxPool2d(2),Flatten(),Linear(1024,64),Linear(64,10))def forward(self, x):x = self.model1(x)return xmy_module = myModule()loss = CrossEntropyLoss()for data in dataloader:imgs, targets = dataoutputs = my_module(imgs)res_loss = loss(outputs,targets)print(res_loss)

优化器的使用

引入Loss的目的是为了更好的进行参数更新,因此需要引入优化器
事实上引入这一步后也就基本知道了模型如何进行训练了
一般在一次学习中就进行了多次更新,需要进行多次学习,注意的点就是每次梯度计算优化前需要先将上一轮计算得到的梯度清零,因为上一批次的对本次的结果意义不大,剩下的就是用法:

import torch
import torch.nn as nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential, CrossEntropyLoss
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms, datasets
from torch.utils.data import DataLoader
from torch import optimdata_transforms = transforms.Compose([transforms.ToTensor()
])test_data = datasets.CIFAR10(root="./dataset",train=False,transform=data_transforms)dataloader = DataLoader(test_data,batch_size=64)class myModule(nn.Module):def __init__(self):super().__init__()self.model1 = Sequential(Conv2d(3,32,5,padding=2),MaxPool2d(2),Conv2d(32,32,5,padding=2),MaxPool2d(2),Conv2d(32,64,5,padding=2),MaxPool2d(2),Flatten(),Linear(1024,64),Linear(64,10))def forward(self, x):x = self.model1(x)return xmy_module = myModule()loss = CrossEntropyLoss()#设置优化器
optimizer = torch.optim.SGD(my_module.parameters(), lr=0.01)for epoch in range(5):running_loss = 0.0 #计算每一个epoch的lossfor data in dataloader:imgs, targets = dataoutputs = my_module(imgs)res_loss = loss(outputs,targets)# print(res_loss)running_loss+=res_lossoptimizer.zero_grad()#每一次要重新清零上一轮的梯度res_loss.backward()optimizer.step()#进行优化lossprint(running_loss)# tensor(360.6527, grad_fn=<AddBackward0>)
# tensor(355.2374, grad_fn=<AddBackward0>)
# tensor(336.8181, grad_fn=<AddBackward0>)
# tensor(320.9179, grad_fn=<AddBackward0>)
# tensor(312.2012, grad_fn=<AddBackward0>)
http://www.xdnf.cn/news/1298989.html

相关文章:

  • Video-R1论文解读
  • 前端框架选择之争:jQuery与Vue在现代Web开发中的真实地位-优雅草卓伊凡
  • 哈希表特性与unordered_map/unordered_set实现分析
  • 【Linux学习|黑马笔记|Day4】IP地址、主机名、网络请求、下载、端口、进程管理、主机状态监控、环境变量、文件的上传和下载、压缩和解压
  • 将 pdf 转为高清 jpg
  • OpenBMC中C++策略模式架构、原理与应用
  • 设计模式基础概念(行为模式):策略模式
  • c/c++实现 TCP Socket网络通信
  • ASCII与Unicode:编码世界的奥秘
  • 阿里云TranslateGeneral - 机器翻译SDK-自己封账单文件版本—仙盟创梦IDE
  • 机器学习实战篇--TF-IDF实战--名著红楼梦的文本数据处理
  • 亚马逊品牌权力重构:第三方卖家崛起下的竞争生态与系统性应对框架
  • 微信公众号推送文字消息与模板消息
  • 加密货币交易所开发:如何打造安全、高并发的数字资产交易平台?
  • 开源安全云盘存储:Hoodik 实现端到端数据加密,Docker快速搭建
  • 深度学习-卷积神经网络CNN-膨胀卷积、可分离卷积(空间可分离、深度可分离)、分组卷积
  • 【保姆级教程】CentOS 7 部署 FastDFS 全流程(避坑指南)
  • 具身智能Scaling Law缺失:机器人界的“摩尔定律“何时诞生?
  • CVPR 2025 | 机器人操控 | RoboGround:用“掩码”中介表示,让机器人跨场景泛化更聪明
  • 3D商品展示:技术狂欢下的普及困局
  • DataHub OPC Gateway:实现OPC UA与OPC DA无缝集成的高性能网关
  • 【代码随想录day 20】 力扣 108.将有序数组转换为二叉搜索树
  • 京东【自主售后】物流信息获取_影刀RPA源码解读
  • Docker部署美化SunPanel导航页
  • python+vue扫盲
  • anaconda创建pytorch1.10.0和pytorch2.0.0的GPU环境
  • java:创建指定容器类型(如ImmutableSet)的Collector对象
  • Redis (REmote DIctionary Server) 高性能数据库
  • 设计模式笔记_行为型_状态模式
  • OpenAI 的浏览器将使用 ChatGPT Agent 来控制浏览器