我正在尝试将GradCAM实现到一个转移学习模型中。由于这个原因,我需要一个额外的输出,从基础模型的最后一个卷积层。我的模型包括预处理/增强层、预培训的MobileNet和自定义头。当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])发布于 2022-03-28 12:20:27
我遇到了类似的问题,最后在数据集级别而不是在模型层实现了增强。
train_ds = tf.keras.utils.image_dataset_from_directory(
train_dir,
validation_split=0.3,
label_mode='categorical',
subset="training",
seed=s,
color_mode="rgb",
image_size=image_size,
batch_size=batch_size,
)
data_augmentation = tf.keras.Sequential([
tf.keras.layers.RandomFlip("horizontal"),
tf.keras.layers.RandomRotation(0.1),
tf.keras.layers.RandomZoom(height_factor=(0.0, 0.3), width_factor=(0.0, 0.3), fill_mode='constant')
])
train_ds = train_ds.map(
lambda x, y: (data_augmentation(x, training=True), y)
)然后,我会将这些数据输入到模型中,结果达到了预期的效果。
model.fit(train_ds, EPOCHS)https://stackoverflow.com/questions/70154218
复制相似问题