Следующий код (основанный на 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 , требующая аналогичной вещи.