Keras resnet50 get_layer () ошибка `` нет такого слоя ''

Итак, я загружаю модель keras Resnet50, используя следующий код:

backbone = resnet50.ResNet50(include_top=False, weights=None, input_tensor=None, pooling=None, classes=1000)

Мне нужно получить уровень пакетной нормализации с именем bn5c_branch2c в коде resnet50 на github (строка 75).

При выполнении backbone.get_layer('bn5c_branch2c') возникает ValueError: такого уровня нет: bn5c_branch2c.

Печать названий слоев с помощью:

for layer in backbone.layers:
     print(layer.name)

Я обнаружил, что на самом деле ни один из слоев не имеет этого имени, вместо этого они называются примерно как «conv5_block1

for layer in backbone.layers:
     print(layer.name)
bn». Однако в коде resnet50 имя явно указано как «bn5c_branch2c». Я не могу понять, как это происходит и как извлечь слой по имени, присвоенному в коде. Любая помощь была бы замечательной. Спасибо.

tenorflow - 2.3.1 keras - ОС 2.4.3 - Ubuntu 20.04.1 LTS


person pratik    schedule 23.11.2020    source источник


Ответы (1)


Слой bn5c_branch2c работает с Tensorflow 1.13.1.

from tensorflow.keras.applications import resnet50
from tensorflow.keras import layers
from tensorflow.keras.layers import Concatenate, Conv2D, UpSampling2D, BatchNormalization, Add, Lambda
from tensorflow.keras.models import Model

backbone = resnet50.ResNet50(include_top=False,
                                          weights=None,
                                          input_tensor=None,
                                          pooling=None,
                                          classes=1000)

C5 =  backbone.get_layer('bn5c_branch2c').output
person TFer    schedule 31.12.2020