如何绘制caffe训练过程中的loss和accurary的曲线
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何绘制caffe训练过程中的loss和accurary的曲线相关的知识,希望对你有一定的参考价值。
参考技术A绘制caffe训练过程中的loss和accurary的曲线
步骤如下:
1.记录训练日志
在训练过程中的命令中加入一行参数 ,实现Log日志的记录
GLOG_logtostderr=0 GLOG_log_dir=/home/liuyun/caffe/models/AAA/A12/Log/ \\
/home/liuyun/caffe/build/tools/caffe train -solver examples/AAA/solver.prototxt -weights ./models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
其中目录改成自己系统的目录,这样训练结束之后,会在Log文件夹中生成每次训练的Log日志。
2.解析训练日志
将最上面说的3个脚本文件拷贝到Log 文件夹下,执行:
./parse_log.sh caffe.liuyun-860-088cn.root.log.INFO.20160830-090533.5367
这样就会在当前文件夹下生成一个.train文件和一个.test文件。
3.生成图片
执行:
./plot_training_log.py.example 6 train_loss.png caffe.liuyun-860-088cn.root.log注意:一定将caffe.liuyun-860-088cn.root.log.INFO.20160830-090533.5367改为caffe.liuyun-860-088cn.root.log,.log为后缀。
就可以生成训练过程中的Train loss vs. Iters 曲线,其中6代表曲线类型, train_loss.png 代表保存的图片名称
caffe中支持很多种曲线绘制,通过指定不同的类型参数即可,具体参数如下:
Notes:
1. Supporting multiple logs.
2. Log file name must end with the lower-cased ".log".
Supported chart types:
0: Test accuracy vs. Iters
1: Test accuracy vs. Seconds
2: Test loss vs. Iters
3: Test loss vs. Seconds
4: Train learning rate vs. Iters
5: Train learning rate vs. Seconds
6: Train loss vs. Iters
7: Train loss vs. Seconds
最后,看一下效果:
参考技术B caffe的FCN的loss居高不下和执行训练命令的脚本有关是怎么回事GET、POST及其他快捷方法都会自动设置method参数,所以不需要手动设置。config对象会作为最后一个参数传递给$http.get和$http.post,所以,在所有的快捷方法内部都可以使用这个参数。你可以传递config对象来修改发送的请求,config对象可以设置以下键值。
method:一个字符串,表示HTTP请求的类型,例如GET或者POST。
url:URL字符串,表示请求的绝对或者相对资源路径。
params:一个键和值都是字符串的对象(确切来说是一个map),表示需要转换成URL参数的键和值。例如:
[key1: 'value1', key2: 'value2']
将会被转换成
?key1=value&key2=value2
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曲线时候报错:paste: aux4.txt: 没有那个文件或目录 rm: 无法删除"aux4.txt": 没有那个文件或目录