如何为Keras实现Beholder(Tensorboard插件)?

Gic*_*ica 6 python tensorflow tensorboard

我正在尝试将Tensorboard中的Beholder插件实现为简单的CNN代码(我是Tensorflow的初学者),但是我不确定将放置在哪里visualizer.update(session=session)。一开始我有:

from tensorboard.plugins.beholder import Beholder
LOG_DIRECTORY='/tmp/tensorflow_logs'
visualizer = Beholder(logdir=LOG_DIRECTORY)
Run Code Online (Sandbox Code Playgroud)

我像这样训练我的模型:

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(253,27,3))) 
.
.
.
model.compile(loss='binary_crossentropy',
                  optimizer='rmsprop',
                  metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

我应该在哪里visualizer.update(session=session)以及应该在代码中另外放置什么,因为目前它说没有找到Beholder数据。谢谢!

rvi*_*nas 1

创建自定义 Keras 回调是合适的,这样您就可以visualizer.update(session=session)在每个 epoch 结束时(或您想要的任何时候)调用。下面的示例显示了此类回调的外观:

\n\n
from tensorboard.plugins.beholder import Beholder\nimport tensorflow as tf\nimport keras.backend as K\nimport keras\n\nLOG_DIRECTORY=\'/tmp/tensorflow_logs\'\n\n\nclass BeholderCallback(keras.callbacks.Callback):\n    def __init__(self, tensor, logdir=LOG_DIRECTORY, sess=None):\n        self.visualizer = Beholder(logdir=logdir)\n        self.sess = sess\n        if sess is None:\n            self.sess = K.get_session()\n        self.tensor = tensor\n\n    def on_epoch_end(self, epoch, logs=None):\n        frame = self.sess.run(self.tensor)  # depending on the tensor, this might require a feed_dict\n        self.visualizer.update(\n            session=self.sess,\n            frame=frame\n        )\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,在定义模型后,实例化回调并将其传递给model.fit

\n\n
# Define your Keras model\n# ...\n\n#\xc2\xa0Prepare callback\nsess = K.get_session() \nbeholder_callback = BeholderCallback(your_tensor, sess=sess)\n\n# Fit data into model and pass callback to model.fit\nmodel.fit(x=x_train,\n          y=y_train,\n          callbacks=[beholder_callback])\n
Run Code Online (Sandbox Code Playgroud)\n\n

您也可以以类似的方式使用arrays的参数。visualizer.update

\n