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

TensorFlow模型训练触发InvalidArgumentError图执行错误

报错诱发原因

这个报错的核心触发逻辑是:计算分类指标(FalseNegatives、AUC)时,Keras会校验模型输出的预测值必须≥0,但你训练到22%进度时,Softmax层输出了非法负值,触发断言中断。
Softmax理论上输出范围固定在[0,1],出现负值是典型的训练数值溢出问题,结合你的运行环境和代码,具体诱因按概率从高到低排列:

  • 输入特征未做归一化/标准化:你的输入是17维特征,如果不同特征的尺度差异极大(比如部分特征取值范围0-1,部分特征取值上千/上万),训练过程中权重会快速更新到爆炸区间,Dense层的线性输出值过大时,Softmax计算会出现数值下溢/上溢,产出非法负值。训练初期权重是小范围随机初始值,输出暂时合法,训练到22%时权重累积到溢出阈值就会报错,和你遇到的现象完全吻合。
  • Jupyter环境计算图缓存串扰:你打印的模型结构是model_8,层名是dense_32到dense_35,但报错栈里的输出张量来自model_6/dense_27,说明你反复运行模型构建单元格时,TensorFlow内存里残留了之前构建的旧模型计算图,实际训练执行的图和你当前看到的模型结构不一致,旧模型可能存在输出层配置错误。
  • 标签存在非法值:如果你的独热标签里存在负数、大于1的异常值,也会导致损失和梯度计算异常,间接引发输出数值溢出。
修复方案

按以下顺序操作即可解决问题:

  • 对输入特征做标准化处理:在送入模型前,对train_features做Z-score归一化,代码参考:
mean = train_features.mean(axis=0)
std = train_features.std(axis=0)
train_features = (train_features - mean) / (std + 1e-8) # 加小常数避免除0

也可以直接在模型开头加tf.keras.layers.Normalization层适配特征,从根源避免权重尺度爆炸。

  • 重启Jupyter内核,从头按顺序运行所有代码单元格,不要反复多次执行模型构建的代码块,清除残留的旧计算图缓存,保证训练时执行的是你当前定义的模型结构。
  • (可选,提升数值稳定性)将输出层的Softmax激活拆到损失函数内部计算,避免手动计算Softmax的数值溢出问题,修改后的模型构建代码如下:
def make_model():
  input =  tf.keras.Input(shape=train_df.shape[1:])
  x = tf.keras.layers.Flatten()(input)
  x = tf.keras.layers.Dense(128, activation='relu')(x)
  x = tf.keras.layers.Dense(64, activation='relu')(x)
  x = tf.keras.layers.Dense(32, activation='relu')(x)
  output = tf.keras.layers.Dense(8)(x) # 移除激活函数,输出原始logit
  model = tf.keras.models.Model(input,output)
  
  model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3),
                # 开启from_logits,让Keras内部做稳定的Softmax计算
                loss= tf.keras.losses.CategoricalCrossentropy(from_logits=True),
                metrics=[tf.keras.metrics.CategoricalAccuracy(),
                        tf.keras.metrics.FalseNegatives(),
                        tf.keras.metrics.AUC(name='prc', curve='PR', from_logits=True)])
  return model

注意AUC指标也要同步加from_logits=True参数匹配输出。

  • 校验标签合法性:执行print(train_labels.min(), train_labels.max()),确认标签值全部在[0,1]区间,没有负数或大于1的异常值,如果有异常值先修正标签再训练。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:24:29