Почему model.predict отличается от результатов последнего слоя (керас)? - PullRequest
1 голос
/ 03 апреля 2019

Я хочу оценить модель и одновременно зафиксировать активации предпоследнего слоя. Я использовал этот ответ для решения. Я получаю доступ к предпоследним активациям с 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 возвращает выходные данные последнего слоя.

1 Ответ

1 голос
/ 03 апреля 2019

Вы не даете много подробностей о своей модели, так что можно только догадываться. Одна из возможностей заключается в том, что вы выполняете классификацию с использованием кросс-центропии softmax, и в этом случае последний слой обычно выводит (не нормализованные) логиты, тогда как predict() применяет softmax к этому выходу для возврата нормализованных вероятностей.

...