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

如何解决'Tensor' object has no attribute '_keras_history'报错

错误原因

AttributeError: 'Tensor' object has no attribute '_keras_history'错误的核心是:Keras搭建模型时,要求所有参与模型计算流的张量必须携带_keras_history属性,用来标记该张量对应的上游Keras层信息。如果代码中直接用TensorFlow原生算子处理Keras层的输出,没有用Keras Lambda层做封装,生成的新张量就会丢失这个属性,触发报错。
报错截图

针对你用的NER项目代码的修复方案
  • 先定位代码中所有直接调用TF原生算子处理Keras层输出的位置,该项目中高频出问题的是嵌入层后做维度调整、自定义mask计算的相关代码段
  • 所有TF原生操作必须包裹在Keras Lambda层内执行,参考修改示例:

错误写法(直接调用tf算子):

from keras.layers import Input, Embedding
import tensorflow as tf

input_seq = Input(shape=(max_seq_len,))
embed_out = Embedding(n_words, embed_dim)(input_seq)
# 直接调用tf.reshape处理Keras张量,丢失_keras_history属性
processed_embed = tf.reshape(embed_out, (-1, max_seq_len, embed_dim))

正确写法(Lambda层封装):

from keras.layers import Input, Embedding, Lambda
import tensorflow as tf

input_seq = Input(shape=(max_seq_len,))
embed_out = Embedding(n_words, embed_dim)(input_seq)
# 用Lambda层封装TF操作,保留Keras属性
processed_embed = Lambda(lambda x: tf.reshape(x, (-1, max_seq_len, embed_dim)))(embed_out)
其他排查点
  • 版本匹配问题:该项目使用的是独立Keras老版本,如果你当前环境用的是TF2.x内置的tf.keras,需要把代码中所有import keras.xxx的导入语句全部替换为import tensorflow.keras.xxx,避免跨包调用导致的属性丢失
  • 不要把eager模式下计算得到的numpy值转为张量后直接接入Keras模型中间层,所有中间计算逻辑必须通过Keras层实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:54:04