Я использую Tensorflow 2.1 с API Keras. Я придерживаюсь следующего стиля кодирования:
model = tf.keras.Sequential()
...
model.fit(..., callbacks=callbacks)
Теперь я хотел бы сохранить некоторое значение тензора промежуточного слоя в качестве сводки изображения (как пример того, что происходит на n-м этапе обучения). Для этого я реализовал свой собственный класс обратного вызова. Я также узнал, как реализован keras.callbacks.TensorBoard
, поскольку он может сохранять веса слоев в виде сводок изображений. В моем on_epoch_end
я делаю следующее:
tensor = self.model.get_layer(layer_name).output
with context.eager_mode():
with ops.init_scope():
tensor = tf.keras.backend.get_value(tensor)
tf.summary.image(layer_name, tensor, step=step, max_outputs=1)
К сожалению, я все еще сталкиваюсь с проблемой, связанной с рвением / графикой:
tensor = tf.keras.backend.get_value(tensor)
File "/home/matwey/lab/venv/lib/python3.6/site-packages/tensorflow_core/python/keras/backend.py", line 3241, in get_value
return x.numpy()
AttributeError: 'Tensor' object has no attribute 'numpy'
К сожалению, мало что или нет документация о том, как правильно комбинировать обратные вызовы keras и tf.summary.image
. Как я мог решить эту проблему?
upd: tf_nightly-2.2.0.dev20200427 имеет такое же поведение.