Вложенные модели Keras сохраняют и загружают веса отдельно или просматривают сводку всех вложенных моделей. - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь обучить модель Keras, которая включает две вложенные модели, и я хочу сохранить веса обеих внутренних моделей по отдельности.Сейчас я могу сохранить веса всей модели, но не могу загрузить веса вложенных моделей в пределах большой модели.

Вывод Big_model.summary выглядит следующим образом

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

Как я могу увидеть сводку обеих внутренних моделей, например, Big_model.inner_Model1.summary() что-то в этом роде, или сохранить веса обеих внутренних моделей отдельно после тренировки, используя Big_model.inner_Model1.save_weights() и Big_model.inner_Model2.save_weights() или callbacks во время model.fit.

То, что я получаю, Big_model не имеет модуля как inner_Model1, Любая помощь, пожалуйста ??

PS: Нет проблем с обучением или чем-то еще, я могу запустить обучение, такжеЯ использую версию Tensorflow tf.keras.models.Model для моделей.

Так я создаю модели

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')

1 Ответ

1 голос
/ 26 сентября 2019

В той сводке, которую вы опубликовали, model - это слой 1, а model_1 - это слой 2:

Big_model.layers[1].summary()   #this is inner_Model1.summary()
Big_model.layers[2].summary()   #this is inner_Model2.summary()

Делайте с ними все, что хотите.


Если вы создали модель, как вы это сделали, нет ничего плохого в простом выполнении:

inner_Model1.save_weights(...)
inner_Model2.save_weights(...)

Это также будет работать нормально, если вы загрузите веса вне большой модели,он увидит изменения.

inner_Model1.load_weights(...)
inner_Model2.load_weights(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...