tensorflow: tf.keras.models.load_model fails on Sequential model
System information
- TensorFlow installed from:
pip
- TensorFlow version:
tf-nightly-2.0-preview-2.0.0.dev20190513
- Python version: 3.6.7
Describe the current behavior
Attempting tf.keras.models.load_model
on a Sequential
model throws
ValueError: You are trying to load a weight file containing 2 layers into a model with 0 layers.
Might be caused by a layers
/_layers
mismatch as mentioned here. Not sure if this is the problem but _clone_sequential_model
uses model._layers
whereas save_model_to_hdf5
accesses model.layers
.
Minimal example
import tensorflow as tf
model = tf.keras.Sequential(
[tf.keras.Input(3), tf.keras.layers.Dense(3), tf.keras.layers.Dense(1)]
)
model.compile(loss="mse", optimizer="adam")
model.fit(tf.constant([[1, 2, 3], [4, 5, 6]]), tf.constant([1, 2]))
model.save("model.h5")
restored_model = tf.keras.models.load_model("model.h5")
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Reactions: 2
- Comments: 20 (12 by maintainers)
@hartikainen Your example might not be, but the original Minimal example in the issue is related – if the
Input
is removed andinput_shape
set for the firstDense
layer, the model does load.So I believe the originally reported problem in this issue is a duplicate of #26809.
Your example is slightly different – your model does not specify input shape in any way, so it is constructed during the first call of the model. Such models however do not save the input shapes to h5 (and from h5 are similar to how a Sequential model is saved when the InputLayer is left out), so when you try to load the weights, the same code path triggers an error. If you
input_shape=image_shape
parameter to the Conv2D, the model can be loaded;This is fixed in latest TF 2.0 nightly build ‘2.0.0-dev20190718’ Thanks!
Tried running your snippet and was able to reproduce the error on mentioned TensorFlow version (2.0.0-dev20190513).
@jvishnuvardhan hey thanks a lot for the response and I found my error as I was having a problem with the version of TensorFlow and Keras.
@hartikainen Thanks for testing against TF 2.0 Can you please post a new issue for the same? Its better to track this separately. Thanks!
The case in which an
Input
orInputLayer
is an explicit part of model specification (like in the Minimal example of this issue description) it is definitely a bug (because the Input layer with information about input sizes is not saved).Your case where the model dimensions is defined by first usage is semantically a bit different – but personally I believe it is also a bug.