Извлечение функций из EfficientNet Tensorflow
У меня есть модель CNN, обученная с помощью EfficientNetB6. Моя задача - выделить особенности этой обученной модели, удалив последний плотный слой, а затем используя эти веса для обучения модели повышения. Я сделал это с помощью Pytorch ранее и смог извлечь веса из слоев, которые меня интересовали и прогнозировали на моем наборе проверки, а затем увеличили.
Я делаю это сейчас в тензорном потоке, но сейчас застрял. Ниже представлена структура моей модели, и я попытался использовать код на веб-сайте, но безуспешно.
Я хочу удалить последний плотный слой и спрогнозировать набор проверки, используя оставшиеся слои.
Я пробовал использовать:
layer_name = 'effectivenet-b6' intermediate_layer_model = tf.keras.Model(входы = model.input, output = model.get_layer(имя_уровня).output)
но я получаю сообщение об ошибке " ValueError: График отключен: не удается получить значение для тензорного тензора ("input_1:0", shape=(None, 760, 760, 3), dtype=float32) на уровне"input_1". Следующие предыдущие слои были получены без проблем: []"
Любой способ решить эту проблему?
1 ответ
Извини, моя ошибка. Я просто добавил слой GlobalAveragePooling2D после слоя effectivenet, и я могу извлечь веса и продолжить:)
просто для справки:
def build_model(dim=CFG['net_size'], ef=0):
inp = tf.keras.layers.Input(shape=(dim,dim,3))
base = EFNS[ef](input_shape=(dim,dim,3),weights='imagenet',include_top=False)
x = base(inp)
x = tf.keras.layers.GlobalAveragePooling2D()(x)
x = tf.keras.layers.Dense(1,activation='sigmoid')(x)
model = tf.keras.Model(inputs=inp,outputs=x)
opt = tf.keras.optimizers.Adam(learning_rate=0.001)
loss = tf.keras.losses.BinaryCrossentropy(label_smoothing=0.05)
model.compile(optimizer=CFG['optimizer'],loss=loss,metrics=[tf.keras.metrics.AUC(name='auc')])
print(model.summary())
return model