Как я могу напечатать активации каждого слоя модели во время тренировки той же модели Keras? - PullRequest
0 голосов
/ 17 января 2020

Следующий код (основанный на https://keras.io/getting-started/faq/#how -can-i-получить-вывод-промежуточного слоя ) позволяет распечатать выходные данные промежуточного слоя модели , учитывая некоторые входные данные , которые мы должны предоставить. В частности, в этом примере я печатаю выходные данные слоя dense, учитывая входные данные для слоя input_1, который также является входным слоем моей модели (но это не обязательно должно быть так) .

import numpy as np
import tensorflow as tf


def get_model():
    inp = tf.keras.layers.Input(shape=(1,))
    x = tf.keras.layers.Dense(8)(inp)
    x = tf.keras.layers.Dense(16)(x)
    out = tf.keras.layers.Dense(1)(x)
    model = tf.keras.Model(inputs=inp, outputs=out)
    model.summary()
    return model


def train():
    my_model = get_model()
    my_model.compile(optimizer="adam", loss="mse")

    get_layer_output = tf.keras.backend.function([my_model.get_layer("input_1").input],
                                                 [my_model.get_layer("dense").output])

    data_x = np.array([[1], [2], [3], [4]])
    layer_output = get_layer_output(data_x)[0]
    print(layer_output)


if __name__ == '__main__':
    train()

Однако я хотел бы напечатать выходные данные каждого слоя, учитывая выходные данные соответствующего предыдущего слоя (как определено моделью), во время обучения модели, т.е. после каждой мини-партии , Я попытался использовать callback , который вызывает tf.print для печати вывода модели, но я получаю сообщение об ошибке, которое описано в этой проблеме Github (то есть ошибка в TensorFlow 2.0, которая является версией, которую я использую, и которую я хочу использовать).

Чтобы быть более понятным, я хотел бы отладить выходные данные каждого слоя, пока я тренирую модель, чтобы я мог понять, как входные потоки проходят через каждый слой и если активации не слишком высоки (взорваться) или слишком маленький (vani sh). Я мог бы итеративно предоставить пакет данных для get_layer_output, но я хотел бы иметь возможность печатать активации каждого слоя при обучении модели с помощью fit или fit_generator. Кроме того, я хотел бы понять, как значения активаций эволюционируют от входного слоя к выходному слою, а не просто печатать активации одного слоя с учетом ввода в другой слой.

Вот проблема Github , требующая аналогичной вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...