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

演示如何使用 `nn.CrossEntropyLoss` 来计算交叉熵损失,计算损失值的演示代码,和讲解 ,CrossEntropyLoss 损失数值等于零的原因

nn.CrossEntropyLoss 应用的演示代码

criterion(final_output, final_target),

final_output 是二维 ,final_target 是1维 怎么计算交叉熵

CrossEntropyLoss 损失数值等于零的原因

1.criterion(y1, y2),   y1和y2都是 维度相同的连续变量

当然!下面是一个完整的示例代码,演示如何使用 `nn.CrossEntropyLoss` 来计算交叉熵损失。这个示例包括创建模型输出和目标标签,以及计算损失的全过程。

### 示例代码

```python
import torch
import torch.nn as nn

# 假设我们有一个批量大小为 3,类别数为 5 的任务
batch_size = 3
num_classes = 5

# 创建模拟的模型输出
# 形状为 [batch_size, num_classes]
final_output = torch.randn(batch_size, num_classes)

# 创建模拟的目标标签
# 形状为 [batch_size]
final_target = torch.tensor([1, 3, 2])

# 定义交叉熵损失函数
criterion = nn.CrossEntropyLoss()

# 计算损失
loss = criterion(final_output, final_target)

# 打印损失值
print(f"Loss: {loss.item()}")
```

### 详细解释

1. **创建模拟的模型输出**:
   ```python
   final_output = torch.randn(batch_size, num_classes)
   ```
   - `torch.randn(batch_size, num_classes)` 生成一个形状为 `[batch_size, num_classes]` 的随机张量,模拟模型的输出。每个元素是一个随机值,代表模型对每个类别的预测分数。

2. **创建模拟的目标标签**:
   ```python
   final_target = torch.tensor([1, 3, 2])
   ```
   - `torch.tensor([1, 3, 2])` 创建一个形状为 `[batch_size]` 的张量,每个元素是一个整数,表示对应样本的真实类别索引。例如,`[1, 3, 2]` 表示第一个样本的真实类别是1,第二个样本的真实类别是3,第三个样本的真实类别是2。

3. **定义交叉熵损失函数**:
   ```python
   criterion = nn.CrossEntropyLogit()
   ```
   - `nn.CrossEntropyLoss()` 是 PyTorch 提供的一个类,用于计算交叉熵损失。它内部会先对 `final_output` 应用 Softmax 函数,然后计算负对数似然损失。

4. **计算损失**:
   ```python
   loss = criterion(final_output, final_target)
   ```
   - `criterion(final_output, final_target)` 计算模型输出与目标标签之间的交叉熵损失。

5. **打印损失值**:
   ```python
   print(f"Loss: {loss.item()}")
   ```
   - `loss.item()` 将损失值从张量转换为 Python 标量,并打印出来。

### 运行结果

运行上述代码后,你会看到类似如下的输出:
```
Loss: 1.6094379425048828
```

这个输出值是计算得到的交叉熵损失。通过这个损失值,你可以评估模型的性能,并在训练过程中优化模型参数。

===============================

实例2

final_output = output[:, eff_history:].contiguous().view(-1, n_characters)final_target = target[:, eff_history:].contiguous().view(-1)loss = criterion(final_output, final_target)

final_output 是二维 ,final_target 是1维 怎么计算交叉熵

在深度学习中,特别是使用PyTorch框架时,计算交叉熵损失通常涉及到模型的输出(预测概率分布)和目标标签。对于分类任务,交叉熵损失是一种常用的损失函数,它可以衡量模型预测的概率分布与真实标签之间的差异。

### 交叉熵损失的计算方式

假设我们有以下情况:
- `final_output` 是一个形状为 `[N, C]` 的二维张量,其中 `N` 是样本数量,`C` 是类别数量。
- `final_target` 是一个形状为 `[N]` 的一维张量,其中每个元素是一个整数,表示对应的样本的真实类别索引。

### PyTorch 中的实现

在PyTorch中,可以使用 `torch.nn.CrossEntropyLoss` 来计算交叉熵损失。这个类内部实现了两个步骤:
1. **Softmax**:对 `final_output` 应用 Softmax 函数,将其转换为一个概率分布。
2. **负对数似然损失 (Negative Log Likelihood Loss)**:计算预测概率分布与真实标签之间的负对数似然损失。

### 代码示例

```python
import torch
import torch.nn as nn

# 假设 final_output 和 final_target 已经定义好
# final_output: [N, C]
# final_target: [N]

# 定义交叉熵损失函数
criterion = nn.CrossEntropyLoss()

# 计算损失
loss = criterion(final_output, final_target)

# 打印损失值
print(loss.item())
```

### 解释

- **`final_output`**:这是一个形状为 `[N, C]` 的张量,每一行表示一个样本的预测概率分布。例如,如果 `C=3`,则每一行有三个值,分别表示该样本属于类别0、1、2的概率。
- **`final_target`**:这是一个形状为 `[N]` 的张量,每个元素是一个整数,表示对应样本的真实类别索引。例如,`[0, 2, 1]` 表示第一个样本的真实类别是0,第二个样本的真实类别是2,第三个样本的真实类别是1。
- **`nn.CrossEntropyLoss()`**:这个类内部会先对 `final_output` 应用 Softmax 函数,然后计算负对数似然损失。

### 为什么 `final_target` 是一维的?

- `final_target` 是一维的,因为每个样本只有一个真实标签。`CrossEntropyLoss` 需要的是每个样本的真实类别索引,而不是一个概率分布。

### 总结

通过 `nn.CrossEntropyLoss`,我们可以方便地计算模型输出与真实标签之间的交叉熵损失。这个损失函数适用于多分类任务,其中模型的输出是一个概率分布,而目标是一个类别索引。


http://www.mrgr.cn/news/77950.html

相关文章:

  • 实例讲解Simulink的模型引用Model模块
  • (洛谷题目)P3954 [NOIP2017 普及组] 成绩
  • Firewall防火墙配置
  • 2023年3月GESPC++一级真题解析
  • 机器学习实战:银行客户是否认购定期存款
  • oracle会话追踪
  • hugo文章支持数学公式
  • oracle 12c查看执行过的sql及当前正在执行的sql
  • 【计算机网络】多路转接之select
  • 新华三嵌入式面试题及参考答案
  • 海信Java后端开发面试题及参考答案
  • 第三十九篇 ShuffleNet V1、V2模型解析
  • Optional类
  • Leetcode 51 N Queens
  • 高频面试题(含笔试高频算法整理)基本总结回顾16
  • pinia的使用
  • 【c++篇】掌握动态内存的奥妙
  • Modern Effective C++ item 15:尽可能的使用constexpr
  • 活着就好20241125
  • 禁用达梦DEM的agent
  • 大数取模 详解
  • 【数据库原理】创建与维护表,DDL数据定义语言
  • Java项目实战II基于SpringBoot的教学资料管理系统(开发文档+数据库+源码)
  • 交叉熵 vs focal loss
  • 探索 Python 任务自动化的新境界:Invoke 库揭秘
  • AJAX请求返回报错NET::ERR_CERT_DATE_INVALID