关于Caffe之Contrastive + Softmax在MNIST上的实验
来源:互联网 发布:网络文明志愿宣言100字 编辑:程序博客网 时间:2024/05/19 01:28
因为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月份做的,但困于时间且手头上的资源有限、拖后整理了。
- 关于Caffe之Contrastive + Softmax在MNIST上的实验
- 关于Caffe之Contrastive + Softmax在CASIA-WebFace上的实验
- MNIST在caffe上的训练与学习
- 用Caffe在MNIST上训练LeNet
- Caffe-Mnist实验
- caffe示例实现之4在MNIST手写数字数据集上训练与测试LeNet
- caffe示例实现之8在MNIST数据上训练与测试siamese网络
- caffe示例实现之4在MNIST手写数字数据集上训练与测试LeNet
- caffe示例实现之4在MNIST手写数字数据集上训练与测试LeNet
- 学习搭建自己的网络MNIST在caffe上训练学习
- 【caffe学习笔记二】学习搭建自己的网络 MNIST 在 caffe 上进行训练与学习
- Deeplearning4j 实战 (12):Mnist替代数据集Fashion Mnist在CNN上的实验及结果
- Caffe 实践 在数据集MNIST上使用LeNet
- 在大规模分布式集群上用caffe训练mnist模型
- caffe实例之mnist
- TensorFlow教程02:针对机器学习初学者的MNIST实验——Softmax回归
- Win10上编译Caffe之Libcaffe,运行mnist案例
- 单向RNN和双向RNN在mnist数据集上的分类实验
- 正则表达式
- hibernate --oracle ---大数据
- 51Nod-1521-一维战舰
- Java并发编程之十六:生产者—消费者模型(含代码)
- android:ImageView中XML属性src和background的区别
- 关于Caffe之Contrastive + Softmax在MNIST上的实验
- windows环境中mysql忘记root密码的解决办法
- java学习日记_49:内部类的位置和访问方式
- BSP自开发文件下载的一个demo
- 存储引擎
- Spring boot xstream解析UnknownFieldException异常
- 大数乘小数
- Linux信号学习笔记
- wav文件格式2