计算批量两个张量的交叉熵
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()详解
如何使用 sparse_softmax_cross_entropy_with_logits 在张量流中实现加权交叉熵损失