You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何将Keras to_categorical生成的矩阵转回整数?

实现to_categorical的反向操作方法

刚好做过类似的操作,这其实是one-hot编码的逆过程,有几种简单好用的实现方式,完全能满足你的需求:

方法一:用NumPy实现(通用方案)

这是最通用的方法,不管你有没有在用Keras都能直接用。核心思路就是找到每行中最大值对应的索引,再把索引从0-4偏移为1-5的整数。

代码示例:

import numpy as np

# 模拟你的输入二维数组(包含浮点数)
prob_matrix = np.array([
    [0.025, 0.022, 0.58, 0.011, 0.22],
    [0.9, 0.05, 0.03, 0.01, 0.01],
    [0.01, 0.02, 0.03, 0.9, 0.04]
])

# 反向转换:取每行最大值的索引,再加1
original_labels = np.argmax(prob_matrix, axis=1) + 1
print(original_labels)
# 输出:array([3, 1, 4])

注意: axis=1 参数指定按行来查找最大值的位置,这刚好对应你每行对应一个样本的结构。因为NumPy的argmax返回的索引从0开始,而你的原始标签是1-5,所以必须加1来修正偏移,这一步很关键哦。

方法二:用Keras/TensorFlow内置函数(适配你的工作流)

如果你本身就在用Keras或者TensorFlow的工作流,也可以用框架自带的函数来实现,逻辑和NumPy完全一致:

代码示例:

import tensorflow as tf
from tensorflow.keras.utils import to_categorical

# 假设你有一个TensorFlow张量或者NumPy数组
prob_matrix = tf.convert_to_tensor([
    [0.025, 0.022, 0.58, 0.011, 0.22],
    [0.9, 0.05, 0.03, 0.01, 0.01]
])

# 反向转换
original_labels = tf.argmax(prob_matrix, axis=1) + 1
# 如果需要转换成NumPy数组,再加.numpy()
original_labels_np = original_labels.numpy()
print(original_labels_np)
# 输出:array([3, 1])

额外说明

如果你的输入是Keras模型输出的概率张量,直接用tf.argmax就可以一步到位,不需要先转换成NumPy数组,非常方便。

另外,如果遇到某一行有多个相同的最大值(比如一行里两个元素都是0.5且是最大值),argmax会返回第一个出现的最大值的索引,这和to_categorical的正向逻辑是匹配的——因为正向操作中每个样本只会对应一个one-hot编码的类别。

内容的提问来源于stack exchange,提问作者konstantin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:42:24