ValueError: This model has not yet been built. Build the model first by calling build() or calling fit() with some data. Or specify input_shape or batch_input_shape in the first layer for automatic build. 报错原因
1、keras建模有3种实现方式——序列模型、函数模型、子类模型。
序列模型:即通过Sequential方式,初始创建Sequential对象,然后一层一层add添加层结构
函数模型:在函数内部,创建一层一层的layers,然后通过Sequential封装返回,Sequential此时会自动调用build函数,构建模型,后期我们不需要在调用model.build(input_shape)。这里的函数模型其实更强调是layer,而不是Model,这种方式也可以通过类的方式来写,只不过此时要继承layer.Layer,然后再调用时,创建完类对象后,要用Sequential封装一下。
子类模型:通过类的方式定义神经网络,此时一般继承自tf.keras.Model,然后在其他地方通过创建类创建神经网络
2、为何会报错
这种错误一般会出现在子类模型中,通过子类方式创建并不会默认调用build函数,需要我们自己调用build函数进行构建
model.build(input_shape) # `input_shape` is the shape of the input data, e.g. input_shape = (None, 32, 32, 3)
当然,也可将model.summary() 放在model.fit() 后面,此时不用调用model.buile() 也不会报错
3、参考
https://blog.csdn.net/weixin_39190382/article/details/109322296
https://blog.csdn.net/sisiel/article/details/103163016