鱼C论坛

 找回密码
 立即注册
查看: 137|回复: 3

nn模块softmax函数使用

[复制链接]
发表于 2024-11-12 11:56:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
predictions = [array([[-0.78885424,  0.14863639]], dtype=float32),
 array([[-1.6222017,  0.9111399]], dtype=float32),
 array([[-3.0249515,  2.5899034]], dtype=float32)]
import torch.nn.functional as F
result = F.softmax(torch.tensor(predictions,dtype=torch.float32),dim=1)
result
为什么结果出来是
tensor([[[1., 1.]],

        [[1., 1.]],

        [[1., 1.]]])
softmax不是转化为概率的吗?还有我结果要在每一行取概率最大的代码怎么写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-12 11:56:15 | 显示全部楼层
`softmax` 函数确实是将输入转化为概率分布的函数。每个输入向量会被转化为一个概率分布,所有元素的总和为 1。在你的代码中,`predictions` 是一个个空的 `numpy` 数组,所以就没有实际的数据进行概率计算,这就是为什么结果也是空的原因。

要正确使用 `softmax`,你需要确保 `predictions` 中含有实际的数值。假设 `predictions` 应该包含每个样本的计算分数,以下是你可能希望的代码结构:
import torch
import torch.nn.functional as F

# 假设你的预测结果如下(每个sample有三个类别的得分)
predictions = [
    [2.0, 1.0, 0.1],
    [0.5, 2.5, 0.3],
    [1.2, 0.7, 3.1]
]

# 将列表转换为tensor
predictions_tensor = torch.tensor(predictions, dtype=torch.float32)

# 使用softmax函数,沿着第一个维度计算(针对每一个样本)
softmax_result = F.softmax(predictions_tensor, dim=1)

# 找到每行最大概率的索引
max_prob_indices = torch.argmax(softmax_result, dim=1)

print("Softmax Result:")
print(softmax_result)
print("Indices of max probabilities:")
print(max_prob_indices)

在这个代码片段中,首先确保 `predictions` 包含实际的数值。然后,使用 `softmax` 函数来计算每个样本的概率分布,并使用 `torch.argmax` 找出每一行(即每个样本)中概率值最大的索引。

这样就能得到你每行中最大概率的类别索引。确保你的输入数据正确且有意义是得到正确结果的关键。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-12 12:01:28 | 显示全部楼层
FishC 发表于 2024-11-12 11:56
`softmax` 函数确实是将输入转化为概率分布的函数。每个输入向量会被转化为一个概率分布,所有元素的总和为 ...

微信图片_20241112115959.png prediction数组不是空的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-12 12:01:39 | 显示全部楼层
Terence888 发表于 2024-11-12 12:01
prediction数组不是空的


如果你的 `predictions` 数组不是空的,而是包含了某种形状的数值,但输出结果仍然是空的 `tensor`,可能的问题是你在转换 `numpy` 数组到 `torch.tensor` 的时候出现了问题。

请确保 `predictions` 实际上是一个非空的列表且里面的数组有着正确的形状。例如,一个典型的 `predictions` 列表可能是 `[ [2.0, 1.0, 0.1], [0.5, 2.2, 1.5], [3.6, 0.4, 2.1] ]` 这样的结构,它表示三组类别的得分。

以下是一个检查点和修复你的代码:
import torch
import torch.nn.functional as F

# 假设 predictions_list 是一个包含多个样本和每个样本的得分列表
predictions = [
    [2.0, 1.0, 0.1],  # 第一个样本
    [0.5, 2.2, 1.5],  # 第二个样本
    [3.6, 0.4, 2.1]   # 第三个样本
]

# 将列表转换为tensor
predictions_tensor = torch.tensor(predictions, dtype=torch.float32)

# 使用softmax函数,沿着第一个维度计算(针对每一个样本进行 softmax)
softmax_result = F.softmax(predictions_tensor, dim=1)

# 找到每行最大概率的索引
max_prob_indices = torch.argmax(softmax_result, dim=1)

print("Softmax Result:")
print(softmax_result)
print("Indices of max probabilities:")
print(max_prob_indices)

注意:

1. 确保 `predictions` 是一个二维列表(或者 numpy 数组),每个子列表(或者数组行)代表一个样本的原始得分。
2. 尽量不要使用 `array([], dtype=float32)` 这种结构,除非在某种逻辑下确实需要空数组。
3. `dim=1` 参数告诉 `softmax` 函数在每个样本的维度上进行归一化处理(针对行的操作)。

确保输入数据的正确性,通常是编码逻辑正确性的关键。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表