前言
近期博主在搞毕业设计,需要用yolov3网络来训练自己的数据集。但是在训练数据集的时候想要保存log数据,在网上找了几种方法都是使用Linux的tee命令,将输出的log保存到文件。但是tee命令要在命令执行结束后才能写入文件(可能跟缓冲区有关,但是博主试了几种方法没有解决),很不方便(训练途中可能出现各种情况导致异常退出,权重文件可使用backup保存,但log文件没办法保存)。
解决方案
最终想到一种比较好的解决方案就是修改detector.c这个文件的代码,该文件的目录为/darknet/src/detector.c
在该文件的大约第316行,添加如下代码即可(添加完成后要重新编译darknet):
/************输出log到backup************/
char fileNameStr[256];
sprintf(fileNameStr, "%s/Log.txt", backup_directory);
FILE* fl =fopen(fileNameStr,"a");
if(fl) fprintf (LogFId,"\n %d: %f, %f avg loss, %f rate, %lf seconds, %d images, %f hours left\n", iteration, loss, avg_loss, get_current_rate(net), (what_time_is_it_now() - time), iteration*imgs, avg_time);
fflush(fl);
if(fl) fclose(fl);
/*************************************/
最终效果
每次迭代的log信息都会实时的保存到backup目录下的Log.txt文件。