Извлечение функций из 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
Другие вопросы по тегам