赞
踩
平均绝对误差(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())
得到的结果如下
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=1∑n∣xi−yi∣
输入和目标张量分别是 input = [1, 1, 3]
和 target = [1, 1, 5]
。计算步骤如下:
均方误差损失函数的公式如下:
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=1∑n(xi−yi)2
目标张量分别是 input = [1, 1, 3]
和 target = [1, 1, 5]
。计算步骤如下:
结合之前的知识,构建一个简单的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--------------")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。