为什么model.predict与最后一层(keras)的输出不同?

时间:2019-04-03 00:17:14

标签: python tensorflow keras neural-network deep-learning

我想评估一个模型,同时还要捕获倒数第二层的激活。我使用this answer作为解决方案。我使用pen_ulti_activs = layer_outs[-2]访问倒数第二次激活。

但是要再次检查该解决方案是否真的有效,我在代码中放了一个断言,通过比较从{{返回的最后一层激活)来验证functor的激活是否与model.predict的激活匹配1}},数组从functor返回。断言失败了。所以我想我误解了链接答案的预期用途。

model.predict

因此:为什么from keras import backend as K def evaluate_model(model, test_gen): inp = model.input # input placeholder outputs = [layer.output for layer in model.layers] # all layer outputs functor = K.function([inp, K.learning_phase()], outputs ) # evaluation function for inputs, targets in test_gen: layer_outs = functor([inputs, 1.]) predictions = layer_outs[-1] predictions_ = model.predict(inputs) assert(np.allclose(predictions, predictions_)) predictions不相等? predictions_是否应该返回最后一层的输出?毕竟model.predict返回最后一层的输出。

1 个答案:

答案 0 :(得分:1)

您不会提供太多有关模型的详细信息,因此只能猜测。一种可能性是,您正在使用softmax交叉熵进行分类,在这种情况下,最后一层通常会输出(未标准化的)对数,而predict()softmax应用于此输出以返回标准化的概率。