如何使用Keras的Tensorboard回调?


143

我已经用Keras建立了一个神经网络。我将通过Tensorboard可视化其数据,因此我利用了:

keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,
                            write_graph=True, write_images=True)

keras.io中所述。运行回调时,我得到了<keras.callbacks.TensorBoard at 0x7f9abb3898>,但是文件夹“ Graph”中没有任何文件。我使用此回调的方式有问题吗?


3
我建议设置histogram_freq1。“ histogram_freq:计算模型各层的激活直方图的频率(以时间为单位)。如果设置为0,将不计算直方图。”
马特·克莱因史密斯

10
注意:“ / Graph”在根目录中创建一个目录,而“ ./Graph”在工作目录中创建一个目录。
马特·克莱因史密斯

@MattKleinsmith如果设置为0,则不会通过验证数据来计算模型各层的激活和权重直方图,仍然会记录度量。
BugKiller

我认为这是更好地给唯一的名称LOGDIR看stackoverflow.com/a/54949146/1179925
mrgloom

Answers:


219
keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

该行创建了一个回调Tensorboard对象,您应该捕获该对象并将其提供给fit模型功能。

tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)
...
model.fit(...inputs and parameters..., callbacks=[tbCallBack])

这样,您就将回调对象提供给了函数。它会在训练期间运行,并输出可与tensorboard一起使用的文件。

如果要可视化培训期间创建的文件,请在终端中运行

tensorboard --logdir path_to_current_dir/Graph 

希望这可以帮助 !


我用这与以下错误,当write_images =假
阿卜杜勒qayyum

InvalidArgumentError(回溯,请参见上面的内容):张量必须是具有最后暗淡1、3或4的4-D,而不是[1,3,3,256,256,1] [[Node:conv_3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT, bad_color = Tensor <类型:uint8形状:[4]值:255 0 0 ...>,max_images = 3,_device =“ / job:localhost /副本:0 / task:0 / cpu:0”](conv_3。 2_2 / kernel_0_1 / tag,ExpandDims_50)]]
Abdul qayyum

并说占位符缺少dtype = float当True Any Idea吗?
阿卜杜勒·卡尤姆

2
尽管可以在“图形”选项卡上看到我的模型架构,但“标量”选项卡仍为空。
iratzhash

1
这只会产生训练损失和准确性的标量。您如何对传递给fit函数的validation_data做同样的事情?
Utku Ufuk '18

46

这是使用TensorBoard回调的方式

from keras.callbacks import TensorBoard

tensorboard = TensorBoard(log_dir='./logs', histogram_freq=0,
                          write_graph=True, write_images=False)
# define model
model.fit(X_train, Y_train,
          batch_size=batch_size,
          epochs=nb_epoch,
          validation_data=(X_test, Y_test),
          shuffle=True,
          callbacks=[tensorboard])

2
有没有一种方法可以更好地构建张量板的输出?Keras是否在这方面做了一些优化?
Nickpick

2
@nickpick我不知道你的意思。但是我认为这可能是另一个问题的候选人。
马丁·托马


需要注意的重要一点是,histogram_freq=0如果张量板不记录任何直方图时设置tf.summary.histogram-否则 histogram_freq不等于0!
敏捷豆

20

更改

keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

tbCallBack = keras.callbacks.TensorBoard(log_dir='Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

并设定你的模型

tbCallback.set_model(model)

在您的终端中运行

tensorboard  --logdir Graph/

我知道了AttributeError: 'TensorBoard' object has no attribute 'set_model'
法比奥·佩雷斯

15

如果您正在使用Keras库并且想要使用tensorboard打印准确性和其他变量的图,那么下面是要遵循的步骤。

步骤1:使用以下命令初始化keras回调库以导入张量板

from keras.callbacks import TensorBoard

第2步:在“ model.fit()”命令之前,在程序中包含以下命令。

tensor_board = TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)

注意:使用“ ./graph”。它将在您当前的工作目录中生成graph文件夹,避免使用“ / graph”。

步骤3:在“ model.fit()”中包含Tensorboard回调。示例如下。

model.fit(X_train,y_train, batch_size=batch_size, epochs=nb_epoch, verbose=1, validation_split=0.2,callbacks=[tensor_board])

步骤4:运行代码,并检查工作目录中是否存在图形文件夹。如果以上代码正常工作,您的工作目录中将包含“ Graph”文件夹。

步骤5:在工作目录中打开Terminal,然后输入以下命令。

tensorboard --logdir ./Graph

步骤6:现在打开您的Web浏览器并在下面输入地址。

http://localhost:6006

输入后,将打开Tensorbaord页面,您可以在其中查看不同变量的图形。


需要注意的重要一点是,histogram_freq=0如果张量板不记录任何直方图时设置tf.summary.histogram-否则 histogram_freq不等于0!
敏捷豆

9

这是一些代码:

K.set_learning_phase(1)
K.set_image_data_format('channels_last')

tb_callback = keras.callbacks.TensorBoard(
    log_dir=log_path,
    histogram_freq=2,
    write_graph=True
)
tb_callback.set_model(model)
callbacks = []
callbacks.append(tb_callback)

# Train net:
history = model.fit(
    [x_train],
    [y_train, y_train_c],
    batch_size=int(hype_space['batch_size']),
    epochs=EPOCHS,
    shuffle=True,
    verbose=1,
    callbacks=callbacks,
    validation_data=([x_test], [y_test, y_test_coarse])
).history

# Test net:
K.set_learning_phase(0)
score = model.evaluate([x_test], [y_test, y_test_coarse], verbose=0)

基本上,它histogram_freq=2是调用此回调时要调整的最重要参数:它设置一个时间间隔来调用该回调,目的是减少磁盘上的文件数量。

因此,这是在TensorBoard中看到的整个训练过程中最后一次卷积值演变的示例可视化,它位于“直方图”选项卡下(我发现“分布”选项卡包含非常相似的图表,但侧向翻转):

张量板重量监控

如果您想在上下文中看到完整的示例,可以参考以下开源项目:https : //github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100


我对此表示反对,因为其中很大一部分实际上是问题,而不是问题的答案。不要在答案中提出新问题,无论是答案的一部分还是全部目的。
Zoe

我修改了问题,删除了您提到的内容。实际上,在我回答时,很难从文档中正确使用此回调。
Guillaume Chevalier

要回答“我如何使用Keras的TensorBoard回调?”,所有其他答案都是不完整的,只能回答问题的小范围-例如,没有人解决嵌入问题。至少,我已经记录了潜在的错误或需要避免的事情。我想我提出了重要的问题,甚至没人认为要考虑。我仍在等待完整的答案。此回调也有不良记录,例如癌症。
Guillaume Chevalier

4

如果您使用的是google-colab,则图表的简单可视化效果如下:

import tensorboardcolab as tb

tbc = tb.TensorBoardColab()
tensorboard = tb.TensorBoardColabCallback(tbc)


history = model.fit(x_train,# Features
                    y_train, # Target vector
                    batch_size=batch_size, # Number of observations per batch
                    epochs=epochs, # Number of epochs
                    callbacks=[early_stopping, tensorboard], # Early stopping
                    verbose=1, # Print description after each epoch
                    validation_split=0.2, #used for validation set every each epoch
                    validation_data=(x_test, y_test)) # Test data-set to evaluate the model in the end of training

2

你写的log_dir='/Graph'是你的意思./Graph吗?您已将其发送到/home/user/Graph


1
为什么要/Graph在用户的主目录中创建一个文件夹,而不仅仅是/Graph直接使用?
Michael Mior

2

您应该查看Losswise(https://losswise.com),它具有Keras 插件,比Tensorboard易于使用,并且具有一些不错的附加功能。使用Losswise,您只需使用from losswise.libs import LosswiseKerasCallback然后就可以使用callback = LosswiseKerasCallback(tag='my fancy convnet 1')了(请参阅https://docs.losswise.com/#keras-plugin)。


7
免责声明:OP是Losswise的创始人,后者是一种付费产品(尽管有相当大的免费套餐)
Michael Mior

@MichaelMior是正确的,尽管它不是付费产品,并且可能永远不会(除非将来会获得
Prem

2

有几件事。

首先,不/Graph./Graph

其次,当您使用TensorBoard回调时,请始终传递验证数据,因为如果没有验证数据,它将无法启动。

第三,如果要使用除标量汇总之外的任何内容,则应仅使用该fit方法,因为fit_generator它将无法工作。或者,您可以重写回调以使用fit_generator

要添加回调,只需将其添加到 model.fit(..., callbacks=your_list_of_callbacks)



2

创建Tensorboard回调:

from keras.callbacks import TensorBoard
from datetime import datetime
logDir = "./Graph/" + datetime.now().strftime("%Y%m%d-%H%M%S") + "/"
tb = TensorBoard(log_dir=logDir, histogram_freq=2, write_graph=True, write_images=True, write_grads=True)

将Tensorboard回调传递给fit调用:

history = model.fit(X_train, y_train, epochs=200, callbacks=[tb])

运行模型时,如果出现Keras错误

“必须输入占位符张量的值”

尝试通过执行以下操作在模型创建之前重置Keras会话:

import keras.backend as K
K.clear_session()

它解决了这个问题You must feed a value for placeholder tensor。知道为什么吗?
Ruthvik Vaila
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.