Pytorch学习16_损失函数与反向传播

官方网址

torch.nn --- PyTorch 2.1 documentation

MSELoss

创建张量

复制代码
inputs=torch.tensor([1,2,3],dtype=torch.float32)
targets=torch.tensor([1,2,5],dtype=torch.float32)

创建inputs和targets张量,其数值分别为1, 2, 3和1,2,5,数据类型为float32

形状变换

复制代码
inputs=torch.reshape(inputs,(1,1,1,3))
targets=torch.reshape(targets,(1,1,1,3))
复制代码
对inputs和targets进行形状变换,将原始形状(3,)变为(1, 1, 1, 3)
这样的变换通常在深度学习中用于处理需要4D输入的模型,如卷积神经网络 (CNN) 的输入格式
此处 的(1,1,1,3)
其中,1表示批次大小(batch size),1表示通道数,1表示高度(height),3表示宽度(width)

例如:
形状变换前的数据结构:
inputs: [1.0, 2.0, 3.0],形状 (3,)


形状变换后的数据结构:
inputs: [[[[1.0, 2.0, 3.0]]]],形状 (1, 1, 1, 3)
复制代码
loss=L1Loss(reduction='sum')
result=loss(inputs,targets)

使用 PyTorch 中的 L1 损失函数(平均绝对误差损失),并通过 reduction='sum' 参数指定计算总和损失。然后,将 inputs 和 targets 传递给损失函数,计算它们之间的损失值。

复制代码
loss_mse=nn.MSELoss()
result_mse=loss_mse(inputs,targets)

使用 PyTorch 中的均方误差损失函数(nn.MSELoss)计算了两个张量 inputs 和 targets 之间的均方误差(Mean Squared Error,MSE)。

解释具体步骤:

  1. loss_mse=nn.MSELoss():创建了一个均方误差损失函数的实例,该实例被存储在变量 loss_mse 中。

  2. result_mse=loss_mse(inputs,targets):使用创建的均方误差损失函数计算了 inputs 和 targets 之间的均方误差,并将结果存储在变量 result_mse 中。

均方误差是回归问题中常用的损失函数,它计算了预测值与真实值之间的差异的平方的均值。在这里,inputs 可能是模型的输出,而 targets 则是真实的标签或目标值。result_mse 中的数值表示了两个张量之间的均方误差,数值越小表示模型的预测越接近真实值。

输出结果

交叉熵

复制代码
x=torch.tensor([0.1,0.2,0.3])
y=torch.tensor([1])
x=torch.reshape(x,(1,3))
loss_cross=nn.CrossEntropyLoss()
result_cross=loss_cross(x,y)
print(f"result_cross:{result_cross}")

这段代码使用 PyTorch 中的交叉熵损失函数(nn.CrossEntropyLoss)计算了两个张量 x 和 y 之间的交叉熵损失。

解释具体步骤:

  1. x=torch.tensor([0.1,0.2,0.3]):定义了一个包含三个元素的张量 x,这可能是模型的输出。

  2. y=torch.tensor([1]):定义了一个包含一个元素的张量 y,这可能是真实的类别标签。

  3. x=torch.reshape(x,(1,3)):将张量 x 的形状调整为 (1, 3),这是为了与交叉熵损失函数的要求相符。

  4. loss_cross=nn.CrossEntropyLoss():创建了一个交叉熵损失函数的实例,该实例被存储在变量 loss_cross 中。

  5. result_cross=loss_cross(x, y):使用创建的交叉熵损失函数计算了 x 和 y 之间的交叉熵损失,并将结果存储在变量 result_cross 中。

在交叉熵损失中,x 通常是模型的输出,表示各个类别的得分,而 y 是真实的类别标签。result_cross 中的数值表示了两个张量之间的交叉熵损失,数值越小表示模型的预测越接近真实类别。

复制代码
import torch
from torch import nn
from torch.nn import L1Loss

inputs=torch.tensor([1,2,3],dtype=torch.float32)#张量,其数值为[1, 2, 3],数据类型为float32
targets=torch.tensor([1,2,5],dtype=torch.float32)

inputs=torch.reshape(inputs,(1,1,1,3))
targets=torch.reshape(targets,(1,1,1,3))

loss=L1Loss(reduction='sum')
result=loss(inputs,targets)

loss_mse=nn.MSELoss()
result_mse=loss_mse(inputs,targets)

print(f"result:{result}")
print(f"result_mse:{result_mse}")


x=torch.tensor([0.1,0.2,0.3])
y=torch.tensor([1])
x=torch.reshape(x,(1,3))
loss_cross=nn.CrossEntropyLoss()
result_cross=loss_cross(x,y)
print(f"result_cross:{result_cross}")

输出结果


复制代码
dataset=torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)

dataloader=DataLoader(batch_size=64)

加载 CIFAR-10 数据集并创建一个 DataLoader 对象,其中包含每个批次(batch)包含 64 个样本。

代码全文:

复制代码
import torchvision
from torch import nn
from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear
from torch.utils.data import DataLoader

dataset=torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),
                                     download=True)

dataloader=DataLoader(dataset,batch_size=64)

class Xuex(nn.Module):
    def __init__(self):
        super(Xuex,self).__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 x
xuexu=Xuex()
for data in dataloader:
    imgs,targets=data
    outputs=xuexu(imgs)
    print(f"output:{outputs}")
    print(f"targets:{targets}")
    break

输出结果

~

参考

【PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】】 https://www.bilibili.com/video/BV1hE411t7RN/?p=23\&share_source=copy_web\&vd_source=be33b1553b08cc7b94afdd6c8a50dc5a

相关推荐
一水鉴天4 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
198******126344 小时前
2026 企业 AI 办公产品选型指南:从场景匹配判断工具价值
人工智能
玫瑰互动GEO4 小时前
GEO优化学习九级模型:开发者从认知层切入
人工智能·ai·ai搜索·gem·生成式引擎优化·gem优化
海绵宝宝转agent4 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭4 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
每天都要写算法(努力版)5 小时前
【行业前沿报告】DAgger:让智能体在自己走到的状态上学习
人工智能·学习·机器学习
liron715 小时前
智能实体演化系统的统一性概念
人工智能·深度学习·神经网络
小小龙学IT5 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
呆萌很5 小时前
常用骨干网络预训练输入尺寸
人工智能
Yolanda_20225 小时前
19.神经网络-最大池化的使用
人工智能·深度学习·神经网络