杀死张量流实例后如何“重置”张量板数据
Posted
技术标签:
【中文标题】杀死张量流实例后如何“重置”张量板数据【英文标题】:How to "reset" tensorboard data after killing tensorflow instance 【发布时间】:2016-03-31 00:18:05 【问题描述】:我正在为我构建的 cnn 模型测试不同的超参数,但在查看 Tensorboard 中的摘要时,我有点烦恼。问题似乎是数据只是在连续运行中“添加”,因此除非我将信息视为“相对”而不是“逐步”,否则这些函数会导致奇怪的叠加。见这里:
我已经尝试过杀死 tensorboard 的进程并擦除日志文件,但似乎还不够。
那么问题来了,我该如何重置这些信息?
谢谢!!
【问题讨论】:
这似乎很奇怪,即使在删除日志文件并重新启动 Web 应用程序后,它仍然显示旧数据。也许是浏览器的缓存? @fabrizioM 这仍然是一个问题。它通常需要多次重启、删除 cookie 并使用默认 URL(例如 localhost:6006 之后没有任何其他路径)来“修复”此行为。由于我在 PyTorch 中使用 Tensorboard 并观察到相同的行为,这肯定表明这是 Tensorboard 本身的问题。 【参考方案1】:注意:您发布的解决方案(擦除 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])
【讨论】:
确实如此。你所描述的是我用过很多次的 tensorflow 的杀手级功能。但有时您只需要反复检查一切是否符合您的预期。这就是为什么我需要擦除所有内容并从头开始 链接坏了:( 我在使用 binary_crossentropy 和自动编码器时遇到了同样的问题。我的火车值低于 1,但其中一些是负数。这会是个问题吗?我有这个:x_train.min()=-0.48 和 x_train.max()=0.51 @mjaskowski,我认为该链接有效。 2021 年 4 月。【参考方案2】:是的,我相信最终这方面是积极的。
例如,在我的脚本中,我通过 datetime
自动化新的运行日志:
from datetime import datetime
now = datetime.now()
logdir = "tf_logs/.../" + now.strftime("%Y%m%d-%H%M%S") + "/"
然后在运行 TensorBoard 时,如果您在父目录中运行了 TensorBoard,则可以单击打开和关闭不同的运行。
如果你知道你不关心之前的运行并希望它从你的生活中消失,那么是的,你需要删除事件文件并重新启动 TensorBoard。
【讨论】:
【参考方案3】:好的,由于某种原因,它以前不起作用,但现在它起作用了:
您必须清除 Tensorboard 的日志文件并终止其进程
杀死进程后,运行fuser 6006/tcp -k
以释放端口 6006(如果您在 linux 中)并再次触发 tensorboard。
【讨论】:
看来您所要做的就是删除旧目录(或重命名它)以使其刷新,尽管直到您传递给 --reload_interval 的秒数有已过。 而对于 mac,它将是lsof -i tcp:6006 | grep -v PID | awk 'print $2' | xargs kill
【参考方案4】:
我遇到了类似的问题,但是计算图有重复:当我调用它们时,它们刚刚添加到 tensorboard 中
writer.add_graph(graph=sess.graph)
就我而言,这与日志文件无关,而是与 Jupyter Notebook 上下文有关。
我发现,在多次运行带有 Graph 定义的 Jupyter 单元后,该图尚未重置,但在上下文中显示为副本,因此我添加了
tf.reset_default_graph()
在开始构建计算图之前。
希望它会有所帮助。
【讨论】:
绝对是 jupyter notebooks 的快速破解方法。 这个解决方案帮我解决了重复问题,谢谢@Стас Цепа【参考方案5】:我刚刚想出了解决这个问题的方法。只需将每个 Events.out 文件放在日志目录内的单独文件夹中即可。您将在 tensorboard 中获得漂亮的可视化效果,每次运行都以不同的颜色运行。
【讨论】:
【参考方案6】:将以下 sn-p 添加到您的代码中,它应该会自动重置您的张量板。
if tf.gfile.Exists(dirpath):
tf.gfile.DeleteRecursively(dirpath)
这将删除以前的日志。
【讨论】:
这不能完全工作——您还必须每次都关闭并重新启动 TB。 @Novak 你如何关闭 TB?!kill processId
?在我的情况下,notebook.list() 即使在杀死之后也会显示进程 ID。如何删除它们?我的目录中也没有日志文件。
同样可以使用:!rm -rf dirpath
like so !rm -rf /home/my_project/logs/*
【参考方案7】:
有一个类似的问题,它引发了错误:“您必须为占位符张量“dense_input”提供一个值,其中包含 dtype float 和 shape”。这个具体问题已在here 进行了讨论。 对我有用的建议是:
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
【讨论】:
【参考方案8】:这会自动删除日志目录。
import shutil
shutil.rmtree('log_dir', ignore_errors=True)
【讨论】:
请考虑写一些关于这个函数的作用以及为什么你认为这是一个正确的解决方案的解释。还可以考虑使用代码格式;-)以上是关于杀死张量流实例后如何“重置”张量板数据的主要内容,如果未能解决你的问题,请参考以下文章