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

学习pytorch14 损失函数与反向传播

神经网络-损失函数与反向传播

  • 官网
  • 损失函数
    • L1Loss MAE 平均
    • MSELoss 平方差
    • CROSSENTROPYLOSS 交叉熵损失
      • 注意
      • code
  • 反向传播
    • 在debug中的显示
      • code

B站小土堆pytorch视频学习

官网

https://pytorch.org/docs/stable/nn.html#loss-functions
在这里插入图片描述

损失函数

在这里插入图片描述

L1Loss MAE 平均

在这里插入图片描述
在这里插入图片描述

import torchinput = torch.tensor([1, 2, 3], dtype=float)
# target = torch.tensor([1, 2, 5], dtype=float)
target = torch.tensor([[[[1, 2, 5]]]], dtype=float) # shape [1, 1, 1, 3]
input = torch.reshape(input, (1,1,1,3))
# target = torch.reshape(target, (1,1,1,3))
print(input.shape)
print(target.shape)loss1 = torch.nn.L1Loss()
loss2 = torch.nn.L1Loss(reduction="sum")
result1 = loss1(input, target)
print(result1) # tensor(0.6667, dtype=torch.float64)
result2 = loss2(input, target)
print(result2) # tensor(2., dtype=torch.float64)

MSELoss 平方差

在这里插入图片描述
在这里插入图片描述

import torchinput = torch.tensor([1, 2, 3], dtype=float)
# target = torch.tensor([1, 2, 5], dtype=float)
target = torch.tensor([[[[1, 2, 5]]]], dtype=float) # shape [1, 1, 1, 3]
input = torch.reshape(input, (1,1,1,3))
# target = torch.reshape(target, (1,1,1,3))
print(input.shape)
print(target.shape)loss_mse = torch.nn.MSELoss(reduction='mean')
result_mse = loss_mse(input, target)
print(result_mse) # tensor(1.3333, dtype=torch.float64)
loss_mse2 = torch.nn.MSELoss(reduction='sum')
result_mse2 = loss_mse2(input, target)
print(result_mse2)   # tensor(4., dtype=torch.float64)

CROSSENTROPYLOSS 交叉熵损失

https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html#torch.nn.CrossEntropyLoss
在这里插入图片描述
在这里插入图片描述
在神经网络中,默认log是以e为底的,所以也可以写成ln
在这里插入图片描述
在这里插入图片描述

注意

  1. 根据需求选择对应的loss函数
  2. 注意loss函数的输入输出shape

code

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWritertest_set = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor(),download=True)dataloader = DataLoader(test_set, batch_size=1)class MySeq(nn.Module):def __init__(self):super(MySeq, self).__init__()self.model1 = Sequential(Conv2d(3, 32, kernel_size=5, stride=1, padding=2),MaxPool2d(2),Conv2d(32, 32, kernel_size=5, stride=1, padding=2),MaxPool2d(2),Conv2d(32, 64, kernel_size=5, stride=1, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self, x):x = self.model1(x)return xloss = nn.CrossEntropyLoss()
myseq = MySeq()
print(myseq)
for data in dataloader:imgs, targets = dataprint(imgs.shape)output = myseq(imgs)result = loss(output, targets)print(result)

反向传播

在debug中的显示

显示在网络结构中,每一层的保护属性中,都有weight属性,梯度属性在weitht属性里面
先找模型结构 在找每一层 在找weight权重,梯度在weight权重里面

在这里插入图片描述

code

核心代码:result_loss.backward() # 要在最后获取 backward函数要挂在通过loss函数计算后的结果上。

# 模型定义、数据加载 同上个代码
for data in dataloader:imgs, targets = dataprint(imgs.shape)output = myseq(imgs)result_loss= loss(output, targets)result_loss.backward()  # 要在最后获取print(result_loss)print(result_loss.grad)
http://www.lryc.cn/news/204555.html

相关文章:

  • windows平台下Qt Creator的下载与安装流程
  • 在 Python 中使用 Pillow 进行图像处理【3/4】
  • 【Java】迭代器的next方法
  • java智慧工地云平台源码,以物联网、移动互联网技术为基础,结合大数据、云计算等,实现工程管理绿色化、数字化、精细化、智能化的效果
  • Unity 通过jar包形式接入讯飞星火SDK
  • python轻量规则引擎rule-engine入门与应用实践
  • 栓Q八股文: C++ 14/17 新特性
  • 虚拟世界游戏定制开发:创造独一无二的虚拟体验
  • Tomcat及jdk安装下载及环境配置(超超超详解)
  • 专业安卓实时投屏软件:极限投屏(QtScrcpy作者开发)使用说明
  • C++:二叉搜索树的原理和模拟实现
  • 学习视觉CV Transformer (2)--Transformer原理及代码分析
  • 【AI视野·今日CV 计算机视觉论文速览 第271期】Thu, 19 Oct 2023
  • GoLong的学习之路(四)语法之循环语句
  • 【Lua语法】字符串
  • 程序员节的由来
  • 订水商城H5实战教程-03用户协议
  • 淘宝app商品详情源数据API接口(解决滑块问题)可高并发采集
  • xcode15一直显示正在连接iOS17真机问题解决
  • stm32通过AT指令与esp8622通信
  • Flutter 类似onResume 监听,解决入场动画卡顿
  • 1024勋章
  • C++栈、队列、优先级队列模拟+仿函数
  • ES挂载不上怎么处理?
  • 问题与分类
  • 021-Qt 配置GitHub Copilot
  • 如何使用 PostgreSQL 进行数据迁移和整合?
  • Qt Signals Slots VS QEvents - Qt跨线程异步操作性能测试与选取建议
  • Postgres 和 MySQL 应该怎么选?
  • 【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】