TensorFlow报错:Sequential层未被调用,无已定义输出
问题原因与解决方案
为什么单独的预训练模型能输出output,但Sequential模型不行?
单独初始化的EfficientNetV2B3因为指定了input_shape,初始化时就完成了计算图的构建,所以直接访问output能拿到对应的张量信息。而Sequential模型是多个层的组合,即使每层都有明确的shape,整个模型的输出张量需要**完成一次构建(前向传播或手动触发)**才能确定,未构建时访问output就会触发报错。
解决方法
方法一:手动触发模型构建
调用build方法,传入输入的shape即可:my_model.build(input_shape=(None, 224, 224, 3)) print(my_model.output)方法二:传入dummy输入完成前向传播
生成一个符合输入格式的随机张量,调用模型一次,触发计算图构建:import tensorflow as tf dummy_input = tf.random.normal((1, 224, 224, 3)) _ = my_model(dummy_input) # 只需要触发一次,不需要保存结果 print(my_model.output)方法三:用
Input层替代InputLayer
改用Input(shape=...)定义输入层,部分场景下能让Sequential自动完成构建:from tensorflow.keras import Input, Sequential, layers my_model = Sequential([ Input(shape=(224, 224, 3)), layers.Rescaling(scale=1./127.5, offset=-1), base_model, layers.GlobalAveragePooling2D(), layers.Dense(256, activation='relu'), layers.Dropout(0.4), layers.Dense(128, activation='relu'), layers.Dropout(0.4), layers.Dense(6, activation='softmax') ]) print(my_model.output)
内容的提问来源于stack exchange,提问作者Gowtham
相关产品推荐
相关产品推荐

