#python #tensorflow #transfer-learning
#питон #тензорный поток #передача-обучение
Вопрос:
Я пытаюсь внедрить GradCAM в модель обучения с передачей. По этой причине мне нужен дополнительный вывод из последнего сверточного слоя базовой модели. Моя модель состоит из слоев предварительной обработки/увеличения, предварительно обученной мобильной сети и пользовательской головки. Когда MobileNet реализован на одном функциональном уровне, я всегда получаю ошибку отключенного графика. И из-за слоев расширения в начале мне не удалось реализовать MobileNet в виде отдельных слоев, как предлагали другие решения. Большое спасибо за любую помощь!
# transfer-learning model base_model = MobileNetV2(input_shape=(224, 224, 3), include_top=False, weights='imagenet') inputs = Input(shape=(224, 224, 3)) augmented = RandomFlip("horizontal")(inputs) augmented = RandomRotation(0.1)(augmented) augmented = RandomZoom(height_factor=(0.0, 0.3), width_factor=(0.0, 0.3), fill_mode='constant')(augmented) mobilenet = base_model(augmented) pooling = GlobalAveragePooling2D()(mobilenet) dropout = Dropout(0.5)(pooling) outputs = Dense(len(classes), activation="softmax")(dropout) model = Model(inputs=inputs, outputs=outputs) model.summary()
А вот моя модель для GradCAM:
gradModel = Model(inputs=[model.inputs], outputs=[model.get_layer('mobilenetv2_1.00_224').get_layer('Conv_1').output, model.output])
Комментарии:
1. Вы пытались передать [model.get_layer(‘mobilenetv2_1.00_224’).input] в качестве ввода в gradcam вместо [model.input]? Я использовал аналогичный подход для ResNet, и он работал просто отлично.
2. Да, я пытался. Это прекрасно работает, если я использую только ‘Conv_1’ из MobileNet в качестве вывода. Но как только я добавляю
model.output
в качестве второго вывода, я снова получаю ошибку отключения графика.