Я хочу оценить модель и одновременно зафиксировать активации предпоследнего слоя. Я использовал этот ответ для решения. Я получаю доступ к предпоследним активациям с pen_ulti_activs = layer_outs[-2]
.
Но чтобы дважды проверить, действительно ли это решение работало, я вставил в свой код утверждение, чтобы убедиться, что активации из functor
действительно соответствуют активациям model.predict
, сравнив активации последнего уровня, возвращенные из 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
не должен возвращать то же самое, что и выходные данные последнего слоя? Ведь mode.predict
возвращает выходные данные последнего слоя.