欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > Pytorch学习笔记——损失函数的综合运用

Pytorch学习笔记——损失函数的综合运用

2025/10/8 20:14:17 来源:https://blog.csdn.net/weixin_50765519/article/details/140539377  浏览:    关键词:Pytorch学习笔记——损失函数的综合运用

1. 基本损失函数

平均绝对误差(L1损失)

import torch
from torch import nn# 示例输入和目标张量
input = torch.tensor([1, 1, 3], dtype=torch.float32)
target = torch.tensor([1, 1, 5], dtype=torch.float32)# 将张量重塑为预期的维度(N, C, H, W)
input = torch.reshape(input, (1, 1, 1, 3))
target = torch.reshape(target, (1, 1, 1, 3))# 定义L1损失函数
loss1 = nn.L1Loss()
output = loss1(input, target)
print("L1损失:", output.item())

均方误差(MSE损失)

# 定义MSE损失函数
loss2 = nn.MSELoss()
output = loss2(input, target)
print("MSE损失:", output.item())

得到的结果如下
在这里插入图片描述

2. 计算原理

L1损失函数的公式如下:
L1 Loss = 1 n ∑ i = 1 n ∣ x i − y i ∣ \text{L1 Loss} = \frac{1}{n} \sum_{i=1}^{n} |x_i - y_i| L1 Loss=n1i=1nxiyi
输入和目标张量分别是 input = [1, 1, 3]target = [1, 1, 5]。计算步骤如下:

  1. 计算每个元素的绝对差异:
    ∣ 1 − 1 ∣ = 0 , ∣ 1 − 1 ∣ = 0 , ∣ 3 − 5 ∣ = 2 |1 - 1| = 0, |1 - 1| = 0, |3 - 5| = 2 ∣11∣=0,∣11∣=0,∣35∣=2
  2. 计算平均绝对差异:
    L1 Loss = 2 3 ≈ 0.6667 \text{L1 Loss} = \frac{2}{3} \approx 0.6667 L1 Loss=320.6667

均方误差损失函数的公式如下:
MSE Loss = 1 n ∑ i = 1 n ( x i − y i ) 2 \text{MSE Loss} = \frac{1}{n} \sum_{i=1}^{n} (x_i - y_i)^2 MSE Loss=n1i=1n(xiyi)2
目标张量分别是 input = [1, 1, 3]target = [1, 1, 5]。计算步骤如下:

  1. 计算每个元素的平方差异:
    ( 1 − 1 ) 2 = 0 ( 1 − 1 ) 2 = 0 ( 3 − 5 ) 2 = 4 (1 - 1)^2 = 0 (1 - 1)^2 = 0 (3 - 5)^2 = 4 (11)2=0(11)2=0(35)2=4
  2. 计算平均平方差异:
    MSE Loss = 4 3 ≈ 1.3333 \text{MSE Loss} = \frac{4}{3} \approx 1.3333 MSE Loss=341.3333

3. 使用CIFAR-10的卷积神经网络的综合运用实例

结合之前的知识,构建一个简单的CNN模型来分类CIFAR-10数据集中的图像。

导入必要的库和数据

import torchvision
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Linear, Flatten, Sequential
from torch.utils.data import DataLoader# 下载并加载CIFAR-10数据集
dataset = torchvision.datasets.CIFAR10(root="data1", train=False, transform=torchvision.transforms.ToTensor(), download=True)
# 使用DataLoader加载数据
dataloader = DataLoader(dataset, batch_size=64)

定义卷积神经网络

class NN(nn.Module):def __init__(self):super(NN, 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

定义损失函数和训练过程

# 定义交叉熵损失函数
loss = nn.CrossEntropyLoss()
# 初始化模型
mynn = NN()# 训练模型
for data in dataloader:imgs, targets = data# 前向传播outputs = mynn(imgs)# 计算损失result_loss = loss(outputs, targets)# 反向传播result_loss.backward()print("--------------ok--------------")

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词