今天在用tensorboard的时候遇见了下面的错误:

Traceback (most recent call last):
File "vgg16_finetune.py", line 368, in <module>
callbacks=[tbCallBack,csvlog,checkpointer])
File "/home/eric/anaconda3/lib/python3.6/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "/home/eric/anaconda3/lib/python3.6/site-packages/keras/engine/training.py", line 2280, in fit_generator
callbacks.on_epoch_end(epoch, epoch_logs)
File "/home/eric/anaconda3/lib/python3.6/site-packages/keras/callbacks.py", line 77, in on_epoch_end
callback.on_epoch_end(epoch, logs)
File "/home/eric/anaconda3/lib/python3.6/site-packages/keras/callbacks.py", line 820, in on_epoch_end
raise ValueError('If printing histograms, validation_data must be '
ValueError: If printing histograms, validation_data must be provided, and cannot be a generator.

我的tensorboard的代码为:

tbCallBack = TensorBoard(log_dir=TENSORBOARD_PATH, histogram_freq=10,  
write_graph=True, write_images=True)
#* tensorboard --logdir path_to_current_dir/Graph --port 8080
print("tensorboard --logdir {} --port 8080".format(TENSORBOARD_PATH))

解决办法

直接把histogram置为0,就行了,我的环境是keras2.1.4, ubuntu 16.04

tbCallBack = TensorBoard(log_dir=TENSORBOARD_PATH, histogram_freq=0,  
write_graph=True, write_images=True)
#* tensorboard --logdir path_to_current_dir/Graph --port 8080
print("tensorboard --logdir {} --port 8080".format(TENSORBOARD_PATH))

参考文献

[1].TensorBoard callback does not create histograms when a generator is used to create validation data. ​​https://github.com/keras-team/keras/issues/3358​

[2]. Keras autoencoder with Tensorflow Dataset API and logging to Tensorboard. ​​https://stackoverflow.com/questions/54953883/keras-autoencoder-with-tensorflow-dataset-api-and-logging-to-tensorboard​