#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.