Как получить выход промежуточных слоев Keras в пакетном режиме? - PullRequest
1 голос
/ 31 марта 2020

Я не уверен, как получить вывод промежуточного слоя в Керасе. Я читал другие вопросы по stackoverflow, но они кажутся функциями с одним примером в качестве входных данных. Я хочу получить выходные данные (на промежуточном уровне) также в пакетном режиме. Вот моя модель:

model = Sequential()
model.add(ResNet50(include_top = False, pooling = RESNET50_POOLING_AVERAGE, weights = resnet_weights_path)) #None
model.add(Dense(784, activation = 'relu'))
model.add(Dense(NUM_CLASSES, activation = DENSE_LAYER_ACTIVATION))
model.layers[0].trainable = True

После обучения модели в моем коде я хочу получить результат после первого плотного слоя (784 измерения). Это правильный способ сделать это?

pred = model.layers[1].predict_generator(data_generator, steps = len(data_generator), verbose = 1)

Я новичок в Keras, поэтому я немного не уверен. Нужно ли мне снова собирать модель после тренировки?

1 Ответ

1 голос
/ 02 апреля 2020

Нет , вам не нужно снова компилировать после тренировки.

На основе вашей Последовательной модели.

Layer 0 :: model.add(ResNet50(include_top = False, pooling = RESNET50_POOLING_AVERAGE, weights = resnet_weights_path)) #None
Layer 1 :: model.add(Dense(784, activation = 'relu'))
Layer 2 :: model.add(Dense(NUM_CLASSES, activation = DENSE_LAYER_ACTIVATION))

Доступ уровни могут отличаться, если используется Подход функционального API .

Используя Tensorflow 2.1.0 , вы можете попробовать этот подход, если хотите получить доступ к промежуточным выходам.

model_dense_784 = Model(inputs=model.input, outputs = model.layers[1].output)

pred_dense_784 = model_dense_784.predict(train_data_gen, steps = 1) # predict_generator is deprecated

print(pred_dense_784.shape) # Use this to check Output Shape

Настоятельно рекомендуется использовать метод model.predict() вместо model.predict_generator(), поскольку он уже устарел .
Вы также можете использовать метод shape(), чтобы проверить, сгенерированный вывод является таким же , как указано в model.summary().

...