我们想要复盘 matchNet的实验,可能需要从 mnist siamese example 入手。
note: 这种网络是 共享权重的,使用对比的loss function.
1.数据准备。
./data/mnist/get_mnist.sh
./examples/siamese/create_mnist_siamese.sh
打开creat_mnist_siamese文件
#!/usr/bin/env sh
# This script converts the mnist data into leveldb format.
set -e
EXAMPLES=./build/examples/siamese
DATA=./data/mnist
echo "Creating leveldb..."
rm -rf ./examples/siamese/mnist_siamese_train_leveldb //删除trian 和 test数据集。
rm -rf ./examples/siamese/mnist_siamese_test_leveldb
$EXAMPLES/convert_mnist_siamese_data.bin \
$DATA/train-images-idx3-ubyte \
$DATA/train-labels-idx1-ubyte \
./examples/siamese/mnist_siamese_train_leveldb
$EXAMPLES/convert_mnist_siamese_data.bin \
$DATA/t10k-images-idx3-ubyte \
$DATA/t10k-labels-idx1-ubyte \
./examples/siamese/mnist_siamese_test_leveldb
echo "Done."
———————————————————————————网络模型——————————————————————————————————
2.修改Lenet网络模型
网络模型在这个文件中,./examples/siamese/mnist_siamese.prototxt
.
这个模型是:输入-卷积层/pooling+卷积层/pooling+ Innerproduct /Relu+ Innerproduct+Innerproduct-输出 (就是常说的全连接层)
可以看到第二个 inner product, “feature”层输出两维数组 (这就是模型改变的地方)。
layer {
name: "feat"
type: "InnerProduct"
bottom: "ip2"
top: "feat"
param {
name: "feat_w"
lr_mult: 1
}
param {
name: "feat_b"
lr_mult: 2
}
inner_product_param {
num_output: 2
}
}
3.建立siameses 网络
首先,我们要完成文件mn