Добавление выпадающего слоя после каждого слоя активации в предварительно обученной модели resnet в tensorflow-2

#python #tensorflow #keras #resnet #dropout

#python #tensorflow #keras #resnet #выпадающий

Вопрос:

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

 def add_dropouts(model, probability = 0.5):
    print("Adding Dropouts")
    
    updated_model = tf.keras.models.Sequential()
    for layer in model.layers:
        print("layer = ", layer)
        updated_model.add(layer)
        if isinstance(layer, tf.keras.layers.Activation):
            updated_model.add(tf.keras.layers.Dropout(probability))

    print("updated model Summary = ", updated_model.summary)
    print("model Summary = ", model.summary)

    model = updated_model

    return model


base_model = tf.keras.applications.ResNet50V2(weights=weights, include_top=False, input_shape=input_img_shape, pooling='avg')

base_model = add_dropouts(base_model, probability = 0.5)

  

Но я получаю следующую ошибку:

Ошибка значения: ввод 0 слоя conv2_block1_3_conv несовместим со слоем: ожидаемая ось -1 входной формы имеет значение 64, но получен ввод с формой [Нет, 128, 128, 256]

Это мешает мне копировать слои по отдельности. Как я могу это решить? Если у кого-нибудь есть идея получше добавлять выпадающие после каждого слоя активации, пожалуйста, поделитесь.

Комментарии:

1. ResNet не является последовательной моделью, поэтому ваш код не будет работать из-за этого неправильного предположения.

2. Спасибо, это имеет смысл. Какой подход я могу использовать для добавления отсева в середине предварительно обученной архитектуры ResNet.