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

如何在不修改模型架构的情况下获取Keras模型Softmax前的输出?

获取Keras模型softmax激活前的输出(无需修改架构或重训)

你之前尝试从softmax输出反推logits的方法不可行,核心原因有两点:

  1. softmax具有常数不变性——给所有logits加上任意常数,softmax的输出结果完全一致,因此从probs无法唯一确定logits;
  2. 数值计算中,当probs趋近于0时,log(probs)会产生严重精度损失,导致反推的logits偏差极大,最终softmax还原后和原probs不一致。

正确方法:构建输出logits的新模型

直接基于原模型结构,创建一个新模型,将输出指向原模型最后一层(softmax层)的输入,也就是softmax激活前的logits。代码如下:

import keras

# 基于原模型创建logits输出模型
logits_model = keras.Model(inputs=model.input, outputs=model.layers[-1].input)

# 获取softmax激活前的logits
logits = logits_model.predict(X_train)

验证结果

用你自定义的softmax函数计算得到的概率,和原模型输出的probs会几乎完全一致(仅存在微小浮点精度误差):

def softmax(x):
    e_x = np.exp(x - np.max(x))  
    return e_x / e_x.sum(axis=1, keepdims=True)

probabilities = softmax(logits)
# 对比原模型输出
probs = model.predict(X_train)
print(np.allclose(probabilities, probs, atol=1e-6))  # 输出应为True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:07:21