如何绘制caffe训练过程中的loss和accurary的曲线

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何绘制caffe训练过程中的loss和accurary的曲线相关的知识,希望对你有一定的参考价值。

参考技术A 绘制caffe训练过程中的loss和accurary的曲线方法如下:
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\r\n', 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\r\n', res_str1);
end
end
tline = fgetl(fid);
end
fclose(fid);
fclose(fid_accuracy);

有礼

现在入学礼包等你来领

    官方电话在线客服官方服务
      官方网站就业保障热门专业入学指南在线课堂领取礼包
参考技术B 春天,我在这片土地上

Keras - 整个训练过程中的 Loss Nan 和 0.333 准确率

【中文标题】Keras - 整个训练过程中的 Loss Nan 和 0.333 准确率【英文标题】:Keras - Loss Nan and 0.333 accuracy throughout the training 【发布时间】:2018-09-12 23:19:05 【问题描述】:

我正在进行一项实验,其目标是将脑电图时间序列数据分为 3 类。但是,每当我进行训练时,我的 Loss 都是 NaN,准确度是 0.0。

我的数据有 150 步长,有 4 个通道。它都在 0 和 1 之间归一化。

Data Channels

我将它们输入到以下模型中。

model = Sequential()
model.add(Conv1D(8, kernel_size=(2,), strides=(1,),
                 activation='relu',
                 input_shape=(input_width, num_channels)))
model.add(MaxPooling1D(pool_size=2, strides=(2,), padding='same'))
model.add(Dropout(0.25))

model.add(Conv1D(9, kernel_size=(2,), strides=(1,),
                 activation='relu'))
model.add(MaxPooling1D(pool_size=2, strides=(2,), padding='same'))
model.add(Dropout(0.25))

model.add(Conv1D(18, kernel_size=(2,), strides=(1,),
                 activation='relu'))
model.add(MaxPooling1D(pool_size=2, strides=(2,), padding='same'))
model.add(Dropout(0.25))

model.add(Conv1D(36, kernel_size=(2,), strides=(1,),
                 activation='relu'))
model.add(MaxPooling1D(pool_size=2, strides=(2,), padding='same'))
model.add(Dropout(0.25))

model.add(Conv1D(72, kernel_size=(2,), strides=(1,),
                 activation='relu'))
model.add(MaxPooling1D(pool_size=2, strides=(2,), padding='same'))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(128, activation='tanh'),)
model.add(Dense(num_labels, activation='softmax'))

然后运行它

optimizer = Adam(lr=0.0001)

model.summary()

model.compile(optimizer=optimizer,
              loss='categorical_crossentropy',
              metrics=['accuracy'])

model.fit(X, labels,
          epochs=100,
          batch_size=32)

但是,结果是这样的:

Epoch 1/100
3855/3855 [==============================] - 24s 6ms/step - loss: nan - acc: 0.3331
Epoch 2/100
3855/3855 [==============================] - 25s 7ms/step - loss: nan - acc: 0.3331
.....
Epoch 100/100
3855/3855 [==============================] - 25s 7ms/step - loss: nan - acc: 0.3331

【问题讨论】:

查看这个答案***.com/questions/40050397/… 【参考方案1】:

我生成了合成数据并使用您的代码进行了训练。我没有想到 NaN 问题。您可能需要检查您的数据以查看是否有任何损坏。要尝试的另一件事是只保留一个 Conv/Pooling/Dropout 层,看看问题是否仍然存在。

【讨论】:

谢谢!我应该具体寻找什么?我的输入目前是 0 到 1 之间的 150 步,有 4 个通道。我的输出是一个包含 3 个类别的数组,因此 [0, 0, 1] 或 [0, 1, 0] 等。它可能是超参数吗? 我不确定...但是在调整超参数之前,可以尝试的一件事是逐步简化模型以定位错误,例如保留一个 Conv/Pooling/Dropout 层,看看是否问题仍然存在。

以上是关于如何绘制caffe训练过程中的loss和accurary的曲线的主要内容,如果未能解决你的问题,请参考以下文章

caffe绘制训练过程的loss和accuracy曲线

Caffe---自带工具 绘制loss和accuracy曲线

解决caffe绘制训练过程的loss和accuracy曲线时候报错:paste: aux4.txt: 没有那个文件或目录 rm: 无法删除"aux4.txt": 没有那个文件或目录

在训练时,accuracy不变,loss一直在降低是啥原因

caffe保存训练log日志文件并利用保存的log文件绘制accuary loss曲线图

如何利用caffe自带的工具包绘制accuracy/loss曲线