我正在运行一个程序,它会输出进度条。我是这样做的
python train.py |& tee train.log
The train.log
看起来像下面这样。
这是1号线
Training ...
这是2号线
...
[000] valid: 100%|█████████████████████████████████████████████████████████████▉| 2630/2631 [15:24<00:00, 2.98 track/s]
[000] valid: 100%|██████████████████████████████████████████████████████████████| 2631/2631 [15:25<00:00, 3.02 track/s]
Epoch 000: train=0.11940351 valid=0.10640465 best=0.1064 duration=0.79 days
这是3号线
...
[001] valid: 100%|█████████████████████████████████████████████████████████████▉| 2629/2631 [15:11<00:00, 2.90
[001] valid: 100%|█████████████████████████████████████████████████████████████▉| 2630/2631 [15:11<00:00, 2.89
[001] valid: 100%|██████████████████████████████████████████████████████████████| 2631/2631 [15:12<00:00, 2.88
Epoch 001: train=0.10971066 valid=0.09931737 best=0.0993 duration=0.79 days
在终端上,它们应该被视为替换自身,因此在日志文件中,有很多重复。所以当我这样做的时候wc -l train.log
,它只返回 3 行。然而,当我在文本编辑器中打开这个 5MB 的文本文件时,大约有 20000 行。
我的目标是只获取这些详细信息:
Epoch 000: train=0.11940351 valid=0.10640465 best=0.1064 duration=0.79 days
Epoch 001: train=0.10971066 valid=0.09931737 best=0.0993 duration=0.79 days
我的问题是:
我如何在不停止当前训练进度的情况下,从所谓的“3”行中提取我想要的详细信息train.log
?请记住,此训练将连续进行 10 个以上的 epoch,因此我不想在编辑器中打开整个垃圾进度条。
将来,我应该如何存储我的日志文件(而不是调用python train.py |& tee train.log
)这样,虽然我可以在终端中看到进度条,但我只将重要信息保留在文本文件中?
Edit 1 :这是该文件的链接训练日志 https://www.dropbox.com/s/oyox06k1k3oxy5h/train.log?dl=0
进度条可能会写入 stderr,您将其发送到tee
与标准输出一起使用|&
.
要仅将 stdout 写入文件,请使用普通管道|
反而。
进度条是通过写入一行然后一个回车符(\r
) but 没有换行符特点 (\n
)。要解决此问题并能够进一步处理文件,您可以使用例如sed 's/\r/\n/g'
.
以下适用于问题中链接的文件:
$ sed 's/\r/\n/g' train.log | grep Epoch
Epoch 000: train=0.11940351 valid=0.10640465 best=0.1064 duration=0.79 days
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)