解决TensorFlow运行时EagerTensor对象不可调用的TypeError报错
问题原因
TypeError: 'tensorflow.python.framework.ops.EagerTensor' object is not callable报错的核心原因是:你误将EagerTensor类型的张量对象当成了可调用的函数、Keras层类实例来执行调用操作。
从你提供的复现代码可以直接定位问题:
eager1 = tf.random.uniform((1, 60, 512)) dense = tf.keras.layers.Dense(512)(eager1) # 以下是错误写法 eager2 = tf.random.uniform((1, 60, 512))(dense)
tf.random.uniform((1, 60, 512))的执行结果本身就是一个EagerTensor张量,不属于可调用对象,后面拼接(dense)相当于尝试对张量执行调用操作,直接触发报错。
解决方案
根据你实际的业务逻辑,二选一调整即可:
- 如果你是想将生成的eager2张量和dense层输出做逐元素运算,把中间的调用符号改成对应运算符即可,示例:
# 逐元素乘法示例,可替换为+、-、/等对应运算符 eager2 = tf.random.uniform((1, 60, 512)) * dense - 如果你是想以dense的属性为参数生成新的张量,直接把参数写入张量生成函数的入参位置即可,比如生成和dense形状一致的均匀分布张量:
eager2 = tf.random.uniform(tf.shape(dense))
通用排查思路
对应你实际业务代码中崩溃的标注部分,逐行检查所有张量(参数)格式的写法,确认是否存在把张量误当做可调用对象执行的逻辑,修正后即可解决问题。
内容的提问来源于stack exchange,提问作者OK 400
相关产品推荐
相关产品推荐

