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

TensorFlow嵌套调用模型报错:层不支持浮点输入问题求助

问题分析与修复方案

核心错误点

  • 错误调用已实例化模型:mlp1已经是tf.keras.Sequential的实例,你在subq0类的__init__中写成了self.mlp1=mlp1(),这相当于无输入调用模型实例,导致self.mlp1变成了EagerTensor对象而非模型实例。后续在call方法中调用self.mlp1(inputs)时,自然会触发“'EagerTensor'对象不可调用”的错误。
  • 变量名拼写错误:最后训练代码中,模型实例是polynom,但你写成了polynomial.fit(...),变量名多了一个字母i,后续会触发NameError。
  • build参数不规范:polynom.build(input_shape=(1,))的输入形状应指定为(None, 1),Keras模型输入形状默认格式为(批次大小, 特征维度),None表示批次大小可变,直接写(1,)会限制批次大小为1,不符合常规训练场景。

修正后的完整代码

import tensorflow as tf
from tensorflow.keras.layers import Dense

mlp1 = tf.keras.Sequential(
    [tf.keras.layers.Input(shape=(1), dtype=tf.float32),
     Dense(20, activation="relu", name="layer1"),
     Dense(20, activation="relu", name="layer2"),
     Dense(1, activation="softplus", name="layer3"),
    ]
)


class subq0(tf.keras.Model):
    def __init__(self):
        super().__init__()
        # 直接赋值已实例化的mlp1,无需加()调用
        self.mlp1 = mlp1

    def call(self, inputs):
        sigma = self.mlp1(inputs)
        return sigma


polynom = subq0()
optimizer = tf.optimizers.SGD(learning_rate=0.0001, momentum=0.9)
polynom.compile(optimizer=optimizer, loss="mse")
# 修正input_shape为(None, 1),适配可变批次大小
polynom.build(input_shape=(None, 1))
polynom.summary()

# 修正变量名为polynom,与实例化的模型名一致
polynom.fit(X_train, y_train, epochs=100, verbose=0, batch_size=64, validation_data=(X_val, y_val))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:25:15