您的位置:首页 > Web前端

关于Caffe之Contrastive + Softmax在MNIST上的实验

2016-10-17 19:56 716 查看
因为DeepID2 将softmax和contrastive结合在一起,所以初步设想:先在MNIST上做个softmax和contrastive结合的实验,观察一些结果。

由于caffe的examples里有MNIST两个单独的softmax(即mnist)和contrastive(即siamese)网络结构,所以实现两者的结合是相对容易些的,这里我们提供一种方法即通过修改部分的caffe源码来达到这个目的。

本文的代码见百度云盘,链接: http://pan.baidu.com/s/1eSNsHpg 密码: y7jr 

实验的目的:

在MNIST上实现softmax和contrastive的结合,并在测试集上做一些结果比较。

 

实验方法:

为了实现softmax和contrastive的结合,需要尝试修改caffe源码,包括 accuracy_layer.cu(cpp), contrastive_layer.cu(cpp), softmax_layer.cu(cpp)等(具体的修改细节见下方或提供的修改后的caffe代码)。

 

第一步,创建训练用的leveldb

参考siamese创建levledb的实现代码,这里的实现代码是

examples/mnist_softmax_contrastive/convert_mnist_softmax_contrastive_data.cpp,具体的细节处是设定datum.set_label(?),这里不同于siamese,修改这个label的原因在于:

> softmax(即mnist)时的label是0~9即真实的数字

> 而contrastive(即siamese)时的label是0 or 1即代表是不是同一个数字

所以要想实现softmax和contrastive的结合,必须修改这个label,修改后的label既能体现真实的数字,又能代表是不是同一个数字,这里我们修改后的label是一个三位数ABC,其中:

> 百位位A是0 or 1代表是不是同一个数字;

>  十位数B代表第一个channel的label;

>  个位数C代表第二个channel的label.

创建leveldb的命令:create_mnist_softmax_contrastive.sh

 

第二步,需要修改网络结构和代码来训练

首先,修改网络结构,修改的细节是保持softmax(即mnist)的最后500dim的结构和contrastive(即siamese)的最后2 dim的结构,具体见

examples/mnist_softmax_contrastive/mnist_softmax_contrastive_train_test.prototxt

 

接着,修改src/caffe/layers/accuracy_layer.cu(cpp), src/caffe/layers/contrastive_layer.cu(cpp),src/caffe/layers/softmax_layer.cu(cpp),修改的细节主要是对应的label处,具体见代码。

 

最后,利用训练的model来提取特征

提取特征的实现代码是

examples/mnist_softmax_contrastive/extract_features_siamse_leveldb.cpp

提取测试集的特征的命令是

 .build_release/examples/mnist_softmax_contrastive/extract_features_siamse_leveldb.binlayers.prototxt  mnist_softmax_contrastive_iter_58000.caffemodel  featureTest1w_iter58000_2dim.bin
注1: 这里的layers.prototxt的source指定了是测试集,extract_features_siamse_leveldb.cpp有个变量int num_mini_batches= 10000;//mnist test number指定了是1w,所以如果想提取训练集的特征需要修改这两处。 

 

实验结果:

做个对比实验,对比的结果可能会有些潜意识的偏向,请大家仔细实验辨别。

首先,类似LFW的测试方式,构造了3000个的同一个数字的pair,和3000个的不同数字的pair. 另外提取特征时用的model是训练时loss稳定时的model。

 

实验方式
对比方式1: 通过softmax到0~9的准确率,Matlab
对比方式2:在6000 pairs上的准确率, L2
Softmax(即mnist)
99.12% (feature: 500-dim)
L2: 82.65% (feature: 500-dim)
Contrastive(即siamese)
------------
L2: 92.63%(feature: 2-dim)
98.18% (feature: 500-dim)
L2: 80.62% (feature: 500-dim)
Softmax+contrastive
------------
L2: 96.08 %(feature: 2-dim)
99.21% (feature: 500-dim)
L2:86.23 % (feature: 500-dim)
 

以上数据显示:Softmax+contrastive的结果是最好的。

 

撰写者:孔勇20161015

注:本实验大体是在4月份做的,但困于时间且手头上的资源有限、拖后整理了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: