小土堆:Pytorch深度学习:损失函数与反向传播

今天学习损失函数与反向传播。

1、损失函数

import torchfrom torch.nn import L1Lossfrom torch import nn
# 创建输入和目标张量inputs = torch.tensor([1, 2, 3], dtype=torch.float32)targets = torch.tensor([1, 2, 5], dtype=torch.float32)
# 重新调整输入和目标张量的形状,将其转换为 4D 张量(batch_size, channels, height, width)inputs = torch.reshape(inputs, (1, 1, 1, 3))targets = torch.reshape(targets, (1, 1, 1, 3))
# 创建 L1 损失函数loss = L1Loss(reduction='sum')
# 计算 L1 损失,并将结果存储在 result 变量中result = loss(inputs, targets)
# 创建 MSE 损失函数loss_mse = nn.MSELoss()
# 计算 MSE 损失,并将结果存储在 result_mse 变量中result_mse = loss_mse(inputs, targets)
# 打印 L1 损失和 MSE 损失的结果print(result)print(result_mse)

# 创建新的输入和目标张量x = torch.tensor([0.1, 0.2, 0.3])y = torch.tensor([1])
# 重新调整 x 张量的形状x = torch.reshape(x, (1, 3))
# 创建交叉熵损失函数loss_cross = nn.CrossEntropyLoss()
# 计算交叉熵损失,并将结果存储在 result_cross 变量中result_cross = loss_cross(x, y)
# 打印交叉熵损失的结果

print(result_cross)该段代码主要包含以下内容:1. 导入所需的库和模块。2. 创建输入和目标张量,并通过reshape函数将其调整为适当的形状。3. 创建L1Loss损失函数,并使用inputs和targets计算L1Loss损失。4. 创建MSELoss损失函数,并使用inputs和targets计算MSELoss损失。5. 打印L1Loss和MSELoss的结果。6. 创建输入和目标张量,并通过reshape函数将输入张量调整为适当的形状。7. 创建CrossEntropyLoss损失函数,并使用输入张量x和目标张量y计算CrossEntropyLoss损失。8. 打印CrossEntropyLoss的结果。

2、反向传播

import torchvisionfrom torch import nnfrom torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linearfrom torch.utils.data import DataLoader
# 加载CIFAR10数据集dataset = torchvision.datasets.CIFAR10(    "../data",    train=False,    transform=torchvision.transforms.ToTensor(),    download=True)
# 创建数据加载器,设置batch_size为1dataloader = DataLoader(dataset, batch_size=1)
# 定义一个名为Yang的神经网络模型class Yang(nn.Module):    def __init__(self):        super(Yang, self).__init__()        # 构建模型的各个层        self.model1 = Sequential(            Conv2d(3, 32, 5, padding=2),     # 输入通道数为3,输出通道数为32,卷积核大小为5x5,填充为2            MaxPool2d(2),                    # 最大池化层,池化核大小为2x2            Conv2d(32, 32, 5, padding=2),    # 输入通道数为32,输出通道数为32,卷积核大小为5x5,填充为2            MaxPool2d(2),                    # 最大池化层,池化核大小为2x2            Conv2d(32, 64, 5, padding=2),    # 输入通道数为32,输出通道数为64,卷积核大小为5x5,填充为2            MaxPool2d(2),                    # 最大池化层,池化核大小为2x2            Flatten(),                       # 将多维数据扁平化为一维            Linear(1024, 64),                # 全连接层,输入节点数为1024,输出节点数为64            Linear(64, 10)                   # 全连接层,输入节点数为64,输出节点数为10        )
    def forward(self, x):        x = self.model1(x)   # 前向传播计算输出        return x
# 创建交叉熵损失函数loss = nn.CrossEntropyLoss()
# 创建神经网络模型实例yang = Yang()
# 循环迭代数据加载器中的数据for data in dataloader:    imgs, targets = data   # 获取数据和标签    outputs = yang(imgs)   # 使用神经网络模型进行前向传播计算    result_loss = loss(outputs, targets)   # 计算损失    result_loss.backward()   # 反向传播计算梯度    print("ok")   # 打印“ok”

该段代码主要包含以下内容:1. 导入所需的库和模块。2. 加载CIFAR10数据集并创建数据加载器。3. 定义了一个名为Yang的神经网络模型,包含了卷积层、池化层、全连接层等多个层。4. 创建交叉熵损失函数和神经网络模型实例。5. 在循环中,遍历数据加载器中的数据,并通过神经网络模型进行前向传播计算和反向传播计算梯度。6. 打印“ok”。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值