Keras+TensorBoard报错:未找到标量数据,无法展示损失与精度曲线
我之前也踩过这个坑,别慌,咱们一步步来排查解决:
先确认日志目录路径是否正确
你启动TensorBoard用的--logdir=.../tmp/unet路径,得确保是绝对路径,或者和你当前终端所在目录匹配的相对路径。比如如果你的tmp/unet在项目根目录,但终端打开在桌面,那相对路径就会出错。可以先在终端里用ls .../tmp/unet(Windows用dir)检查:这个目录下有没有生成events.out.tfevents.*开头的文件?如果没有,要么是路径写错了,要么训练时压根没生成日志。检查模型编译与回调的基础设置
首先得保证模型编译时指定了要记录的指标,比如精度:# 模型编译时要明确metrics,不然TensorBoard没数据可记录 unet.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])另外确认
TensorBoard回调的导入是否正确:from tensorflow.keras.callbacks import TensorBoard要是导入错了,训练时回调根本不会生效,自然不会生成日志文件。
验证日志目录是否真的有数据
训练结束后,直接打开tmp/unet目录看看:有没有events.out.tfevents.xxxxxx这类文件?如果目录是空的,大概率是权限问题——比如你的程序没有写入tmp/unet的权限。建议换个更稳妥的路径,比如项目根目录下的./logs/unet,相对路径权限问题更少。检查TensorFlow与TensorBoard版本兼容性
版本不兼容也会导致读取不到数据。在终端分别执行这两条命令,确认大版本一致:# 查看TensorBoard版本 tensorboard --version # 查看TensorFlow版本 python -c "import tensorflow as tf; print(tf.__version__)"如果版本差得远,建议升级或降级到匹配的版本。
重启TensorBoard并清空旧缓存
有时候TensorBoard会缓存旧数据,或者进程没彻底关闭。先按Ctrl+C关掉当前TensorBoard进程,然后删除日志目录里的所有文件,重新训练模型,再启动TensorBoard:# 删除旧日志(Linux/macOS) rm -rf .../tmp/unet/* # Windows用这个 rmdir /s/q .../tmp/unet && mkdir .../tmp/unet # 重新训练模型后启动TensorBoard tensorboard --logdir=正确的日志路径
内容的提问来源于stack exchange,提问作者Punisher

