计算批量两个张量的交叉熵

Posted

技术标签:

【中文标题】计算批量两个张量的交叉熵【英文标题】:Calculation cross entropy for batch of two tensors 【发布时间】:2022-01-05 08:44:33 【问题描述】:

我想计算两个张量批次的交叉熵:

x = torch.tensor([[[ 2.1137, -1.3133,  0.7930,  0.3330,  0.9407],
        [-0.8380, -2.0299, -1.1218,  0.3150,  0.4797],
        [-0.7439,  0.0753, -0.1121,  0.0096, -1.2621]]])

y = torch.tensor([[1,2,3]])
    ​
loss = nn.CrossEntropyLoss()(x, y)

​

但收到异常:

RuntimeError: Expected target size [1, 5], got [1, 3]

请说明问题所在……

【问题讨论】:

【参考方案1】:

你的 x 在列表中有 5 个元素,你的 y 有 3 个元素,目标大小必须匹配

import torch
import torch.nn as nn
x = torch.tensor([[[ 2.1137, -1.3133,  0.7930,  0.3330,  0.9407],
        [-0.8380, -2.0299, -1.1218,  0.3150,  0.4797],
        [-0.7439,  0.0753, -0.1121,  0.0096, -1.2621]]])
y = torch.tensor([[1,2,2,2,2]])
loss = nn.CrossEntropyLoss()(x, y)

此外,您的模型将输出形状为 [,2] 的张量。这被传递给 CrossEntropyLoss, 所以你的目标必须是一个形状为 [,2] 的张量

您的一个目标标签的值为 3,因此您会收到错误消息。与 4 和 5 相同

您需要向 x 添加更多层张量。对于 3 个,您只需再添加 1 个。

如果您想获得值 5,这是一个示例。

x = torch.tensor([[[ 2.1137, -1.3133,  0.7930,  0.3330,  0.9407],
        [-0.8380, -2.0299, -1.1218,  0.3150,  0.4797],
        [-0.7439,  0.0753, -0.1121,  0.0096, -1.2621],
        [-0.7439,  0.0753, -0.1121,  0.0096, -1.2621],               
        [-0.7439,  0.0753, -0.1121,  0.0096, -1.2621],
        [-0.7439,  0.0753, -0.1121,  0.0096, -1.2621]]])
y = torch.tensor([[1,2,3,4,5]])
loss = nn.CrossEntropyLoss()(x, y)

我希望这能让你把 x 和 y 的关系拼凑在一起。

【讨论】:

以上是关于计算批量两个张量的交叉熵的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch常用的交叉熵损失函数CrossEntropyLoss()详解

TensorFlow中如何选择交叉熵损失?

交叉熵

机器学习基础熵KL散度交叉熵

如何使用 sparse_softmax_cross_entropy_with_logits 在张量流中实现加权交叉熵损失

通俗的解释交叉熵与相对熵