当前位置: 首页 > wzjs >正文

网站开发首选畅扬科技广州网站运营专注乐云seo

网站开发首选畅扬科技,广州网站运营专注乐云seo,网站app下载平台怎么做的,工信部网站报备文章目录 背景介绍F.nll_loss什么是负对数似然损失?应用场景 nn.CrossEntropyLoss简化工作流程内部机制 区别与联系 背景介绍 无论是图像分类、文本分类还是其他类型的分类任务,交叉熵损失(Cross Entropy Loss)都是最常用的一种损…

文章目录

    • 背景介绍
    • F.nll_loss
      • 什么是负对数似然损失?
      • 应用场景
    • nn.CrossEntropyLoss
      • 简化工作流程
      • 内部机制
    • 区别与联系

背景介绍

无论是图像分类、文本分类还是其他类型的分类任务,交叉熵损失(Cross Entropy Loss)都是最常用的一种损失函数。它衡量的是模型预测的概率分布与真实标签之间的差异。在 PyTorch 中,有两个特别值得注意的实现:F.nll_lossnn.CrossEntropyLoss

F.nll_loss

什么是负对数似然损失?

F.nll_loss 是负对数似然损失(Negative Log Likelihood Loss),主要用于多类分类问题。它的输入是对数概率(log-probabilities),这意味着在使用 F.nll_loss 之前,我们需要先对模型的输出应用 log_softmax 函数,将原始输出转换为对数概率形式。

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import DataLoader, TensorDataset# 创建一些虚拟数据
features = torch.randn(100, 20)  # 假设有100个样本,每个样本有20个特征
labels = torch.randint(0, 3, (100,))  # 假设有3个类别# 创建数据加载器
dataset = TensorDataset(features, labels)
data_loader = DataLoader(dataset, batch_size=10, shuffle=True)class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc = nn.Linear(20, 3)  # 输入维度为20,输出维度为3(对应3个类别)def forward(self, x):return self.fc(x)model_nll = SimpleModel()
optimizer = torch.optim.SGD(model_nll.parameters(), lr=0.01)for inputs, targets in data_loader:optimizer.zero_grad()  # 清除梯度outputs = model_nll(inputs)  # 模型前向传播log_softmax_outputs = F.log_softmax(outputs, dim=1)  # 应用 log_softmaxloss = F.nll_loss(log_softmax_outputs, targets)  # 计算 nll_lossloss.backward()  # 反向传播optimizer.step()  # 更新权重print(f"Batch Loss with F.nll_loss: {loss.item():.4f}")

应用场景

由于 F.nll_loss 需要预先计算 log_softmax,这为用户提供了一定程度的灵活性,尤其是在需要复用 log_softmax 结果的情况下。

nn.CrossEntropyLoss

简化工作流程

相比之下,nn.CrossEntropyLoss 更加直接和易用。它结合了 log_softmaxnll_loss 的功能,因此可以直接接受未经归一化的原始输出作为输入,内部自动完成这两个步骤。

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import DataLoader, TensorDataset# 创建一些虚拟数据
features = torch.randn(100, 20)  # 假设有100个样本,每个样本有20个特征
labels = torch.randint(0, 3, (100,))  # 假设有3个类别# 创建数据加载器
dataset = TensorDataset(features, labels)
data_loader = DataLoader(dataset, batch_size=10, shuffle=True)class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc = nn.Linear(20, 3)  # 输入维度为20,输出维度为3(对应3个类别)def forward(self, x):return self.fc(x)model_ce = SimpleModel()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model_ce.parameters(), lr=0.01)for inputs, targets in data_loader:optimizer.zero_grad()  # 清除梯度outputs = model_ce(inputs)  # 模型前向传播loss = criterion(outputs, targets)  # 直接计算交叉熵损失,内部包含 log_softmaxloss.backward()  # 反向传播optimizer.step()  # 更新权重print(f"Batch Loss with nn.CrossEntropyLoss: {loss.item():.4f}")

内部机制

实际上,nn.CrossEntropyLoss = log_softmax + nll_loss 。这种设计简化了用户的代码编写过程,特别是当不需要对中间结果进行额外操作时。

区别与联系

  • 输入要求F.nll_loss 要求输入为 log_softmax 后的结果;而 nn.CrossEntropyLoss 可以直接接受未经 softmax 处理的原始输出。

  • 灵活性:如果需要对 log_softmax 结果进行进一步处理或调试,那么 F.nll_loss 提供了更大的灵活性。

  • 便捷性:对于大多数用户而言,nn.CrossEntropyLoss 因其简洁性和内置的 log_softmax 步骤,是更方便的选择。

http://www.dtcms.com/wzjs/510692.html

相关文章:

  • 哈尔滨企业网站建设公司麒麟seo
  • 网站建设请示文件链接提交
  • 杭州的网站建设公司哪家好百度推广客服中心
  • 怎样会展网站建设chrome手机版
  • 天津做网站外包公司web个人网站设计代码
  • 想学做网站学那个软件好温州seo推广外包
  • 给我免费播放在线湖南企业竞价优化
  • 做网站要会编程么小程序免费制作平台
  • 重庆找工作的网站百度极速版下载安装最新版
  • 百度收录哪些网站厦门百度整站优化服务
  • 浏览不良网站会被网警抓吗网络营销推广公司简介
  • 租网站服务器刷排名的软件是什么
  • 什么网站可以做国外批发网济南网站seo哪家公司好
  • 网站分为几种网上推广app怎么做
  • 做网站 教程竞价推广课程
  • wordpress极验验证注册搜索引擎优化的含义和目标
  • 兰州网站建设cheng搜索引擎优化的流程
  • .net网站封装seo在线优化平台
  • 什么是网站开发与建设seo关键词排名优化教程
  • 网站主页用ps做seo百度网站排名软件
  • 做庭院景观的那个网站推广好优化设计七年级下册数学答案
  • 政府网站建设责任杭州网站优化企业
  • 想再算命网站上登广告怎么做莆田百度快照优化
  • 做编程网站广州网站优化服务商
  • 平面设计网上自学搜索引擎优化大致包含哪些内容或环节
  • 网站项目策划书模板上海网络推广营销策划方案
  • 建筑企业网站模板微商软文范例
  • 购书网站开发的意义灰色行业关键词推广
  • 销售网站排名网站运营培训
  • 戚墅堰做网站价格百度网盘app免费下载安装老版本