关于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。
以上数据显示:Softmax+contrastive的结果是最好的。
撰写者:孔勇20161015
注:本实验大体是在4月份做的,但困于时间且手头上的资源有限、拖后整理了。
由于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月份做的,但困于时间且手头上的资源有限、拖后整理了。
相关文章推荐
- 关于Caffe之Contrastive + Softmax在CASIA-WebFace上的实验
- Machine Learning系列实验--SoftMax Regression
- Caffe 代码解读之 softmax layer
- 【深度学习】Tensorflow学习记录(一) softmax regression mnist训练
- Caffe源码 - SoftmaxWithLossLayer
- TensorFlow 学习 - MNIST 之 SoftMax Regression 实现(完整代码,拷贝可运行)
- 【Machine Learning实验3】SoftMax regression
- caffe中的Accuracy+softmaxWithLoss
- FCN网络中使用的caffe类型层汇总--Convolution/Deconvolution/Crop/Eltwise/SoftmaxWithLoss
- tensorflow 第一个程序MNIST手写数字识别(Softmax Regression实现)
- Machine Learning实验3】SoftMax regression
- caffe softmax 层形状
- caffe SoftmaxWithLoss 层
- TensorFlow入门-MNIST & softmax regression
- Caffe框架源码剖析(9)—损失层SoftmaxWithLossLayer
- UFLDL实验报告1: Softmax Regression
- caffe小问题(2):softmaxWithLoss
- 梳理caffe代码softmaxWithLoss(二十三)
- Caffe源码解读: SoftmaxLayer的前向与反向传播
- tensorflow(1) mnist_softmax.py