交叉熵损失代码讲解

前言

在计算交叉熵时,有两种形式,一是输入labels的数字编码,二是labels对应的onehot编码。

1.引入库

代码如下(示例):

import torch
import torch.nn as nn

2.读入数据

代码如下(示例):

loss_fn = nn.CrossEntropyLoss()

pred = torch.tensor([[0.1,0.8,0.1],[0.2,0.1,0.7]],dtype=torch.float32)
labels = torch.tensor([[0,1,0],[0,0,1]],dtype=torch.float32) #每行都是标签onehot编码
labels_idx = torch.tensor([1,2]) #每个为标签的数字编码
loss1 = loss_fn(pred,labels)
loss2 = loss_fn(pred,labels_idx)
print(loss1)
print(loss2)

结果:

tensor(0.7288)
tensor(0.7288)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Pvtorch 框架是一个基于 PyTorch深度学习框架,可以用于搭建各种类型的神经网络模型,包括用于 detection/segmentation/recognition 应用的模型。下面给出一个基于 Pvtorch 框架的伪代码示例,用于说明整个程序的框架: ```python import torch import torch.nn as nn import torch.optim as optim from pvtorch import datasets, transforms from pvtorch.utils import train, evaluate # 1. 加载数据集 train_dataset = datasets.ImageFolder('/path/to/train_data', transforms.Compose([ transforms.Resize(256), transforms.RandomCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)) ])) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True) test_dataset = datasets.ImageFolder('/path/to/test_data', transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)) ])) test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=32, shuffle=False) # 2. 定义模型 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.features = nn.Sequential( nn.Conv2d(3, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(64, 128, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(128, 128, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(128, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(256, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), ) self.avgpool = nn.AdaptiveAvgPool2d((7, 7)) self.classifier = nn.Sequential( nn.Linear(512 * 7 * 7, 4096), nn.ReLU(inplace=True), nn.Dropout(), nn.Linear(4096, 4096), nn.ReLU(inplace=True), nn.Dropout(), nn.Linear(4096, 1000), ) def forward(self, x): x = self.features(x) x = self.avgpool(x) x = torch.flatten(x, 1) x = self.classifier(x) return x model = Net() # 3. 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) # 4. 训练模型 train(model, train_loader, criterion, optimizer, num_epochs=10) # 5. 评估模型 evaluate(model, test_loader, criterion) ``` 上述代码中,我们首先通过 Pvtorch 框架中的 `datasets` 和 `transforms` 模块加载了训练集和测试集,并进行了数据增强和标准化处理。然后,我们定义了一个基于卷积神经网络的模型,包括多个卷积层、池化层和全连接层。接着,我们定义了交叉熵损失函数和随机梯度下降优化器,并将它们传递给 `train` 函数进行模型训练。最后,我们调用 `evaluate` 函数对模型进行测试并计算评估指标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔下万码生谋略

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值