Доступ к промежуточному слою в Keras после multi_gpu_model - PullRequest
0 голосов
/ 27 февраля 2020

Как указано в этой проблеме , Keras 'multi_gpu_model изменяет кажущуюся структуру слоев модели.

Например, когда выглядят слои из исходной модели:

>>> [l.name for l in my_model.layers]
[input, conv2d_1, conv2d_2, maxpool_1, conv2d_3, maxpool_2, dense_1, dense_2, dense_3]

После использования multi_gpu_model(my_model) слои станут:

>>> new_model = multi_gpu_model(my_model)
>>> [l.name for l in new_model.layers]
[input, lambda_1, lambda_2, lambda_3, lambda_4, model_1, dense_3]

Я пытаюсь получить доступ к выводу слоя maxpool_2 из исходной модели, чтобы использовать это в другую, последующую модель. Как получить доступ к выводу исходного слоя maxpool_2 после использования multi_gpu_model?

Примечание 1: поскольку old_model не обучен, я не заинтересован в получении вывода из old_model.get_layer('maxpool_2'). Здесь интересны только выходные данные с обучением new_model.

Примечание 2: попытка вызова new_model.get_layer('maxpool_2') вызовет ValueError: Нет такого слоя: maxpool_2.

1 Ответ

0 голосов
/ 27 февраля 2020

Из Исходный код Keras кажется, что исходная модель делит свои веса с моделью multi-gpu:

Поэтому достаточно выполнить следующие действия для доступа к промежуточному слою:

old_model.get_layer('maxpool_2').output

Который будет использовать выход обученной модели.

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