我想评估一个模型,同时还要捕获倒数第二层的激活。我使用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
返回最后一层的输出。
答案 0 :(得分:1)
您不会提供太多有关模型的详细信息,因此只能猜测。一种可能性是,您正在使用softmax交叉熵进行分类,在这种情况下,最后一层通常会输出(未标准化的)对数,而predict()
将softmax
应用于此输出以返回标准化的概率。