在Keras中,CNN层结果与模型结果不同

时间:2018-11-07 12:50:31

标签: python tensorflow neural-network keras conv-neural-network

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图层输出。 我想用CNN层输出(不是概率)训练svm模型

因此,我使用了Keras, How to get the output of each layer?中的代码,并且看到了结果。

但是我的CNN层结果与model.predict结果不同。 我监视了val精度,保存了最佳模型并加载了该模型。 这是我模型的结构。 (下图)

enter image description here

我希望layer_outs [13](最后一层)的结果与预测_prob_train相同。但是,结果不同。 (如下图所示)

enter image description here

为什么结果不同?

1 个答案:

答案 0 :(得分:0)

您在Conv层之后有7层(其中2层是Dense)。他们还学习东西,并且正在“做出决定”模型输出。

这样考虑:Conv输出一些内容,即Dense1-> Dense2的输入。所有这些层都在同时学习。因此,Dense1层的目标是了解Conv层在“试图告诉它”,以及如何解释Conv层的结果。如果将图像输入到此Dense1层,然后输入到Dense2层,则不会得到相同的结果(也不正确)。所有这些层都在共同努力,以获取正确的预测。

您不能隔离1层并期望得到正确的结果。