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
相关产品推荐
相关产品推荐

