В Керасе результат слоя CNN отличается от результата model.predict - PullRequest
0 голосов
/ 07 ноября 2018
history = model.fit(x_spectro_train, y_train_onehot, batch_size=batch_size, epochs=training_epochs, validation_data =(x_spectro_test, y_test_onehot), shuffle=True, callbacks=callbacks_list,class_weight=class_weights, verbose=1)


model=load_model(model_name)
predict_prob_train = model.predict(x_spectro_train,batch_size=batch_size) 


inp = model.input                                           # input placeholder
outputs = [layer.output for layer in model.layers]          # all layer outputs
functors = [K.function([inp, K.learning_phase()], [out]) for out in outputs]    # evaluation functions
layer_outs = [func([x_spectro_train, 0.]) for func in functors] #test mode (0.0), train mode(1.0)

Я хочу сохранить выходные данные слоя CNN. Я хочу обучить модель SVM с выходами уровня CNN (не вероятность)

Итак, я использовал код из Keras, Как получить вывод каждого слоя? , и я увидел результат.

Но мой результат слоя CNN отличается от результата model.predict. Я контролировал точность val, сохранял лучшую модель и загружал ее Это структура моей модели. (ниже изображение)

введите описание изображения здесь

Я ожидал, что результат layer_outs [13] (последний уровень) будет таким же, как и дляа Предиката. Однако результаты были разные. (как на картинке ниже)

введите описание изображения здесь

Почему результаты отличаются?

1 Ответ

0 голосов
/ 07 ноября 2018

У вас есть 7 слоев после Conv слоя (2 из которых Dense). Они также изучают материал и «принимают решение» о выходе модели.

Думайте об этом так: Conv выводит что-то, то есть ввод в Dense1 -> Dense2. Все эти слои учатся одновременно. Итак, цель слоя Dense1 состоит в том, чтобы узнать, что слой «1009 *» «пытается сказать ему», как интерпретировать результаты слоя Conv. Если вы введете изображение в этот слой Dense1, а затем в слой Dense2, вы не получите тот же результат (и не правильный). Все эти слои работают вместе, чтобы получить правильный прогноз.

Вы не можете изолировать 1 слой и ожидать правильного результата.

...