如何繪製caffe訓練過程中的loss和accurary的曲線??

用caffe訓練了一個自己的網路後,想要繪製一個橫軸是訓練次數,縱軸是loss/accurary的曲線,請問caffe中有沒有存儲loss和accurary的歷史數據呢,如果有的話,從哪裡提取出來?如果一個數據一個數據的記錄,感覺太麻煩了。o(╯□╰)o

謝謝!


caffe/tools/extra/plot_training_log.py.example自帶的繪圖的小腳本

關於獲取日誌文件,我用的方法和@齊浩之 提到的一樣,寫個腳本,運行這個腳本開始訓練,這樣就可以保存日誌了, 腳本如下

#!/bin/bash
LOG=log/train-`date +%Y-%m-%d-%H-%M-%S`.log
CAFFE=~/caffe/build/tools/caffe

$CAFFE train --solver=solver.prototxt --gpu=0 2&>1 | tee $LOG


1. 你可以從系統 /tmp 文件夾獲取,名字是什麼 caffe.ubuntu.username.log.INFO.....之類。

2. 在train的時候最後加 tee $folder_prefix/caffe.log,就可以重定向到文件夾了。

然後寫個parser就能把圖畫出來了。

也不是parser。。。因為output規律很強,就是最最naive的字元串處理一下。

貼一下matlab給題主好了

% Well, this is a function that write the
% iteration vs accurancy
% iteration vs loss
% To a file

clc;
clear;

% log file of caffe model
logName = "caffe.log.INFO.20150704-163137.27688";

fid = fopen(logName, "r");
fid_accuracy = fopen("output_accuracy.txt", "w");
fid_loss = fopen("output_loss.txt", "w");

tline = fgetl(fid);

while ischar(tline)
% First find the accuracy line
k = strfind(tline, "Test net output");
if (k)
k = strfind(tline, "accuracy");
if (k)
% If the string contain test and accuracy at the same time
% The bias from "accuracy" to the float number
indexStart = k + 11;
indexEnd = size(tline);
str = tline(indexStart : indexEnd(2));
end

% Get the number of index
k = strfind(tline, "#");
if (k)
indexStart = k + 1;
indexEnd = strfind(tline, ":");
str2 = tline(indexStart : indexEnd - 1);
end

% Concatenation of two string
res_str = strcat(str2, "/", str);
fprintf(fid_accuracy, "%s
", res_str);
end

% Then find the loss line
k1 = strfind(tline, "Iteration");
if (k1)
k2 = strfind(tline, "loss");
if (k2)
indexStart = k2 + 7;
indexEnd = size(tline);
str1 = tline(indexStart:indexEnd(2));
indexStart = k1 + 10;
indexEnd = strfind(tline, ",") - 1;
str2 = tline(indexStart:indexEnd);
res_str1 = strcat(str2, "/", str1);
fprintf(fid_loss, "%s
", res_str1);
end
end
tline = fgetl(fid);
end

fclose(fid);
fclose(fid_accuracy);


caffe繪製訓練過程的loss和accuracy曲線 這裡有個使用caffe內腳本實現的方法


以上兩位說的很好,自己動手,豐衣足食。

若需借力,建議用cuda-convnet2,自帶畫loss和accuracy曲線功能。

除了曲線,還可以繪製圖像,例如中間某個卷積層的卷積核可視化效果:

以及預測結果:

自己也可以試著實現下這些功能,用過matlab的同學都應該覺得不難。


我是改了下源碼,訓練時會把每次輸出的loss和accuracy寫到一個txt文件中,再用matlab畫出來。


推薦閱讀:

batch normalization的multi-GPU版本該怎麼實現?
做圖像檢索,圖像庫從哪兒能下載到?
沐神的第三代parameter server的worker節點只需要保存部分參數,怎麼理解?
目前世界上有對強人工智慧的嘗試嗎?具體瓶頸是什麼?
目前火熱的Deep Learning會滅絕傳統的SIFT/ SURF的特徵提取的演算法嗎?

TAG:深度學習DeepLearning | Caffe深度學習框架 |