我正在为我构建的 cnn 模型测试不同的超参数,但是在查看 Tensorboard 中的摘要时我有点烦恼。问题似乎是数据只是在连续运行中“添加”,因此除非我将信息视为“相对”而不是“逐步”,否则这些函数会导致奇怪的叠加。看这里:
我试过杀死 tensorboard 的进程并擦除日志文件,但似乎还不够。
所以问题是,我如何重置这些信息?
谢谢!!
我正在为我构建的 cnn 模型测试不同的超参数,但是在查看 Tensorboard 中的摘要时我有点烦恼。问题似乎是数据只是在连续运行中“添加”,因此除非我将信息视为“相对”而不是“逐步”,否则这些函数会导致奇怪的叠加。看这里:
我试过杀死 tensorboard 的进程并擦除日志文件,但似乎还不够。
所以问题是,我如何重置这些信息?
谢谢!!
注意:您发布的解决方案(擦除 TensorBoard 的日志文件并终止进程)会起作用,但不是首选,因为它会破坏有关您的训练的历史信息。
相反,您可以让每个新的训练作业写入一个新的子目录(您的顶级日志目录)。然后,TensorBoard 将每个作业视为一个新的“运行”,并将创建一个很好的比较视图,以便您可以看到模型迭代之间的训练有何不同。
在以下来自https://www.tensorflow.org/tensorboard/get_started的示例中:
model = create_model()
...
model.compile(...)
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
model.fit(..., callbacks=[tensorboard_callback])
是的,我相信最终这方面是积极的。
例如,在我的脚本中,我通过以下方式自动化新的运行日志datetime
:
from datetime import datetime
now = datetime.now()
logdir = "tf_logs/.../" + now.strftime("%Y%m%d-%H%M%S") + "/"
然后在运行 TensorBoard 时,如果您在父目录中运行 TensorBoard,您可以单击打开和关闭不同的运行。
如果您知道自己不关心以前的运行并希望它退出您的生活,那么是的,您需要删除事件文件并重新启动 TensorBoard。
好的,由于某种原因,它以前不起作用,但现在它起作用了:
您必须删除 Tensorboard 的日志文件并终止其进程
杀死进程后运行fuser 6006/tcp -k
释放端口 6006(如果你在 linux 中)并再次启动 tensorboard。
我有一个类似的问题,但是计算图的重复:当我打电话时它们刚刚添加到张量板中
writer.add_graph(graph=sess.graph)
就我而言,这不是关于日志文件,而是关于 Jupyter Notebook 上下文。
我发现在多次运行带有 Graph 定义的 Jupyter 单元后,该图尚未重置,但在上下文中显示为重复,所以我添加了
tf.reset_default_graph()
在开始构建计算图之前。
希望它会有所帮助。
我只是想出了解决这个问题的方法。只需将每个 Events.out 文件放在日志目录内的单独文件夹中即可。您将在 tensorboard 中获得很好的可视化效果,每次运行都使用不同的颜色。
将以下代码段添加到您的代码中,它应该会自动重置您的张量板。
if tf.gfile.Exists(dirpath):
tf.gfile.DeleteRecursively(dirpath)
这将删除以前的日志。
有一个类似的问题,它引发了一个错误:'您必须使用 dtype float 和 shape 为占位符张量'dense_input'提供一个值'。此处讨论了此具体问题。对我有用的建议使用:
from keras.backend import clear_session
# Before instantiating a tf.data.Dataset obj & before model creation, call:
clear_session()
还要确保为每个模型的 TensorBoard log_dir 使用唯一名称。然后查看所有模型,从终端在日志文件的父目录运行 TensorBoard,即:
tensorboard --logdir <projDir>/logs/tf_log
这会自动删除日志目录。
import shutil
shutil.rmtree('log_dir', ignore_errors=True)