鱼C论坛

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

nn模块softmax函数使用

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

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

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

x
  1. predictions = [array([[-0.78885424,  0.14863639]], dtype=float32),
  2. array([[-1.6222017,  0.9111399]], dtype=float32),
  3. array([[-3.0249515,  2.5899034]], dtype=float32)]
复制代码
  1. import torch.nn.functional as F
  2. result = F.softmax(torch.tensor(predictions,dtype=torch.float32),dim=1)
  3. result
复制代码

为什么结果出来是
  1. tensor([[[1., 1.]],

  2.         [[1., 1.]],

  3.         [[1., 1.]]])
复制代码

softmax不是转化为概率的吗?还有我结果要在每一行取概率最大的代码怎么写
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  1. import torch
  2. import torch.nn.functional as F

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

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

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

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

  15. print("Softmax Result:")
  16. print(softmax_result)
  17. print("Indices of max probabilities:")
  18. print(max_prob_indices)
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

微信图片_20241112115959.png prediction数组不是空的
小甲鱼最新课程 -> https://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] ]` 这样的结构,它表示三组类别的得分。

以下是一个检查点和修复你的代码:

  1. import torch
  2. import torch.nn.functional as F

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

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

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

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

  15. print("Softmax Result:")
  16. print(softmax_result)
  17. print("Indices of max probabilities:")
  18. print(max_prob_indices)
复制代码


注意:

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-8 05:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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