Ошибка Keras resnet50 get_layer() ‘нет такого слоя’

#python #tensorflow #keras #keras-layer #resnet

#python #тензорный поток #keras #keras-layer #resnet

Вопрос:

Итак, я загружаю модель 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_3_bn‘. Однако в коде resnet50 имя явно передается как ‘bn5c_branch2c‘. Я не могу понять, как это происходит и как я могу извлечь слой по имени, которое ему присвоено в коде. Любая помощь была бы отличной. Спасибо.

tensorflow — 2.3.1 keras — 2.4.3 OS — Ubuntu 20.04.1 LTS

Ответ №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