Как ввести последний слой предварительно обученной сети как тензор для выравнивания в Керасе - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь сделать модель с двумя выходами, один для классификации и другой для регрессии. Я использую предварительно обученный VGG16 от Keras в качестве экстрактора сверточных функций. Но когда я пытаюсь построить следующий выравнивающий слой в обеих выходных последовательностях, я получаю ошибку, что вход не является тензором. Как мне убедиться, что я подаю только последний слой сверточного основания в качестве входных данных для следующих слоев?

conv_base = VGG16(include_top = False,
                  weights = 'imagenet')
conv_base.trainable = False
with tf.variable_scope('classification_head', reuse=tf.AUTO_REUSE):
    x = Flatten()(conv_base.layers[-1])
    x = Dense()(x)

Ошибка:

ValueError: Слой flatten_1 был вызван со входом, который не является символическим тензором. Полученный тип: класс 'keras.layers.pooling.MaxPooling2D'. Полный ввод: [keras.layers.pooling.MaxPooling2D объект в 0xc2855c9b0]. Все входы в слой должны быть тензорами.

1 Ответ

0 голосов
/ 27 апреля 2019

Получил необходимый тензор как:

features = conv_base.output 
print(features)

Тензор ("block5_pool / MaxPool: 0", shape = (?, 11, 14, 512), dtype = float32)

...