Reputation: 1270
I am trying to train a Keras Model which include two nested models, and I want to save the weights of both inner models separately. Right now I am able to save weights of the whole model, but I am unable to load the weights of nested models within big model.
Output of Big_model.summary
looks like this
Model: "model_3"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_4 (InputLayer) [(None, 128, 128, 1)] 0
_________________________________________________________________
model (Model) (None, 16, 16, 512) 170369024
_________________________________________________________________
model_1 (Model) (None, 128, 128, 1) 15342209
=================================================================
Total params: 185,711,233
Trainable params: 185,711,233
Non-trainable params: 0
How can I even see the summary of both inner models, e.g Big_model.inner_Model1.summary()
something like that, Or save the weights of both inner models separately after training using Big_model.inner_Model1.save_weights()
and Big_model.inner_Model2.save_weights()
or callbacks
during model.fit
.
What I am getting is Big_model
has no module as inner_Model1
, Any help Please ??
PS: There is no problem with training or anything, I can run the training, also I am using Tensorflow version tf.keras.models.Model
for models.
This is how I am creating models
inner_Model1 = tf.keras.models.Model()
inner_Model2 = tf.keras.models.Model()
x = tf.keras.layers.Input(shape=IMAGE_SHAPE)
Big_model = tf.keras.models.Model(x, inner_model2(inner_model1(x)))
Big_model.compile(optimizer=optimizer, loss='mean_absolute_error')
Upvotes: 4
Views: 2712
Reputation: 86600
In that summary you posted, model
is layer 1, and model_1
is layer 2:
Big_model.layers[1].summary() #this is inner_Model1.summary()
Big_model.layers[2].summary() #this is inner_Model2.summary()
Do whatever you want with them.
If you created the model like you did, there is nothing wrong with simply doing:
inner_Model1.save_weights(...)
inner_Model2.save_weights(...)
It will also work OK if you load the weights outside the big model, it will see the changes.
inner_Model1.load_weights(...)
inner_Model2.load_weights(...)
Upvotes: 2