【问题标题】:In Keras, CNN layer result is different from the result of model.predict在 Keras 中,CNN 层结果与 model.predict 的结果不同
【发布时间】:2018-11-07 12:50:31
【问题描述】:
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](最后一层)的结果与 predict_prob_train 相同。然而,结果却不同。 (如下图)

enter image description here

为什么结果不同?

【问题讨论】:

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


    【解决方案1】:

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

    这样想:Conv 输出一些东西,也就是Dense1 的输入 -> Dense2。所有这些层都在同时学习。所以Dense1 层的目标是了解Conv 层在“试图告诉它”什么,如何解释Conv 层的结果。如果您将图像输入到此Dense1 层,然后输入到Dense2 层,您将不会得到相同的结果(也不会得到正确的结果)。所有这些层都在协同工作以获得正确的预测。

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

    【讨论】:

    • 谢谢,那layer_outs是什么意思呢?我认为这些都是同时训练所有层时每一层的结果。所以我认为layers_out[13]是当模型使用所有层同时训练时通过最后一个密集层的结果。如果不是,结果是什么意思?
    • Layer_out 表示模型的输出,模型最后一层的输出。这就是你必须解释的,这就是结果
    • 我的意思是列表名称是“layer_outs”,包含 13 个元素。你可以在我的第一张照片中看到它。有 13 个 Numpy 数组。我认为当使用所有层训练模型时,“layer_outs”中索引为 13 的 Numpy 数组是模型的输出。但是,结果与 model.predict 不同。
    猜你喜欢
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2022-12-03
    • 1970-01-01
    • 2015-01-19
    相关资源
    最近更新 更多