All test examples converge to one embedding point with siamese network model which is trained with cifar10 model definition

ساخت وبلاگ

Vote count: 0

I'm tring to lea siamese network model for cifar10 data.

I built paired data using cifar10 data and trained with revised cifar10 model definition (original: https://github.com/ycyoon/caffe/blob/master/examples/cifar10/cifar10_full_train_test.prototxt) for siamese network. I just appended feat layers for 2D embedding and changed weight filler from gausian to xavier.

Here's the revised model definition

name: "cifar10_siamese_train_test"
layer { name: "pair_data" type: "Data" top: "pair_data" top: "sim" include { phase: TRAIN } transform_param { scale: 0.00390625 } data_param { source: "examples/siamese/mnist_siamese_train_leveldb/" batch_size: 64 }
}
layer { name: "pair_data" type: "Data" top: "pair_data" top: "sim" include { phase: TEST } transform_param { scale: 0.00390625 } data_param { source: "examples/siamese/mnist_siamese_test_leveldb/" batch_size: 100 }
}
layer { name: "slice_pair" type: "Slice" bottom: "pair_data" top: "data" top: "data_p" slice_param { slice_dim: 1 slice_point: 1 }
}
layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 20 pad: 0 keel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } }
}
layer { name: "pool1" type: "Pooling" bottom: "conv1" top: "pool1" pooling_param { pool: MAX keel_size: 3 stride: 2 }
}
layer { name: "relu1" type: "ReLU" bottom: "pool1" top: "pool1"
}
layer { name: "norm1" type: "LRN" bottom: "pool1" top: "norm1" l_param { local_size: 3 alpha: 5e-05 beta: 0.75 norm_region: WITHIN_CHANNEL }
}
layer { name: "conv2" type: "Convolution" bottom: "norm1" top: "conv2" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 32 pad: 2 keel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } }
}
layer { name: "relu2" type: "ReLU" bottom: "conv2" top: "conv2"
}
layer { name: "pool2" type: "Pooling" bottom: "conv2" top: "pool2" pooling_param { pool: AVE keel_size: 3 stride: 2 }
}
layer { name: "norm2" type: "LRN" bottom: "pool2" top: "norm2" l_param { local_size: 3 alpha: 5e-05 beta: 0.75 norm_region: WITHIN_CHANNEL }
}
layer { name: "conv3" type: "Convolution" bottom: "norm2" top: "conv3" convolution_param { num_output: 64 pad: 2 keel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } }
}
layer { name: "relu3" type: "ReLU" bottom: "conv3" top: "conv3"
}
layer { name: "pool3" type: "Pooling" bottom: "conv3" top: "pool3" pooling_param { pool: AVE keel_size: 3 stride: 2 }
}
layer { name: "ip1" type: "InnerProduct" bottom: "pool3" top: "ip1" param { lr_mult: 1 decay_mult: 250 } param { lr_mult: 2 decay_mult: 0 } inner_product_param { num_output: 10 weight_filler { type: "xavier" } bias_filler { type: "constant" } }
}
layer { name: "feat" type: "InnerProduct" bottom: "ip1" top: "feat" param { lr_mult: 1 } param { lr_mult: 2 } inner_product_param { num_output: 2 weight_filler { type: "xavier" } bias_filler { type: "constant" } }
}
layer { name: "conv1_p" type: "Convolution" bottom: "data_p" top: "conv1_p" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 20 pad: 0 keel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } }
}
layer { name: "pool1_p" type: "Pooling" bottom: "conv1_p" top: "pool1_p" pooling_param { pool: MAX keel_size: 3 stride: 2 }
}
layer { name: "relu1_p" type: "ReLU" bottom: "pool1_p" top: "pool1_p"
}
layer { name: "norm1_p" type: "LRN" bottom: "pool1_p" top: "norm1_p" l_param { local_size: 3 alpha: 5e-05 beta: 0.75 norm_region: WITHIN_CHANNEL }
}
layer { name: "conv2_p" type: "Convolution" bottom: "norm1_p" top: "conv2_p" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 32 pad: 2 keel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } }
}
layer { name: "relu2_p" type: "ReLU" bottom: "conv2_p" top: "conv2_p"
}
layer { name: "pool2_p" type: "Pooling" bottom: "conv2_p" top: "pool2_p" pooling_param { pool: AVE keel_size: 3 stride: 2 }
}
layer { name: "norm2_p" type: "LRN" bottom: "pool2_p" top: "norm2_p" l_param { local_size: 3 alpha: 5e-05 beta: 0.75 norm_region: WITHIN_CHANNEL }
}
layer { name: "conv3_p" type: "Convolution" bottom: "norm2_p" top: "conv3_p" convolution_param { num_output: 64 pad: 2 keel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } }
}
layer { name: "relu3_p" type: "ReLU" bottom: "conv3_p" top: "conv3_p"
}
layer { name: "pool3_p" type: "Pooling" bottom: "conv3_p" top: "pool3_p" pooling_param { pool: AVE keel_size: 3 stride: 2 }
}
layer { name: "ip1_p" type: "InnerProduct" bottom: "pool3_p" top: "ip1_p" param { lr_mult: 1 decay_mult: 250 } param { lr_mult: 2 decay_mult: 0 } inner_product_param { num_output: 10 weight_filler { type: "xavier" } bias_filler { type: "constant" } }
}
layer { name: "feat_p" type: "InnerProduct" bottom: "ip1_p" top: "feat_p" param { lr_mult: 1 } param { lr_mult: 2 } inner_product_param { num_output: 2 weight_filler { type: "xavier" } bias_filler { type: "constant" } }
}
layer { name: "loss" type: "ContrastiveLoss" bottom: "feat" bottom: "feat_p" bottom: "sim" top: "loss" contrastive_loss_param { margin: 1 }
}

However, when I tried to get embeding points from test examples, all outputs are converged to one same point. (for example, 0.38288754 -0.08905841)

I changed the cifar10 data to mnist data, however it also gives the same result.

Is there anything wrong with the definition file?

asked 1 min ago

back soft...
ما را در سایت back soft دنبال می کنید

برچسب : نویسنده : استخدام کار backsoft بازدید : 193 تاريخ : چهارشنبه 4 فروردين 1395 ساعت: 13:11