# lenet_consolidated_solver.prototxt consolidates the lenet_solver, lenet_train, # and lenet_test prototxts into a single file. It also adds an additional test # net which runs on the training set, e.g., for the purpose of comparing # train/test accuracy (accuracy is computed only on the test set in the included # LeNet example). This is mainly included as an example of using these features # (specify NetParameters directly in the solver, specify multiple test nets) # if desired. # # Carry out testing every 500 training iterations. test_interval: 500 # The base learning rate, momentum and the weight decay of the network. base_lr: 0.01 momentum: 0.9 weight_decay: 0.0005 # The learning rate policy lr_policy: "inv" gamma: 0.0001 power: 0.75 # Display every 100 iterations display: 100 # The maximum number of iterations max_iter: 10000 # snapshot intermediate results snapshot: 5000 snapshot_prefix: "examples/mnist/lenet" # Set a random_seed for repeatable results. # (For results that vary due to random initialization, comment out the below # line, or set to a negative integer -- e.g. "random_seed: -1") random_seed: 1701 # solver mode: CPU or GPU solver_mode: GPU # We test on both the test and train set using "stages". The TEST DATA layers # each have a stage, either 'test-on-train-set' or 'test-on-test-set'. # test_iter specifies how many forward passes the test should carry out. # In the case of MNIST, we have test batch size 100 and 100 test iterations, # covering the full 10,000 testing images. test_iter: 100 test_state: { stage: "test-on-test-set" } # The train set has 60K images, so we run 600 test iters (600 * 100 = 60K). test_iter: 600 test_state: { stage: "test-on-train-set" } # The net protocol buffer definition net_param { name: "LeNet" layers { name: "mnist" type: DATA top: "data" top: "label" data_param { source: "examples/mnist/mnist_train_lmdb" backend: LMDB batch_size: 64 } transform_param { scale: 0.00390625 } include: { phase: TRAIN } } layers { name: "mnist" type: DATA top: "data" top: "label" data_param { source: "examples/mnist/mnist_test_lmdb" backend: LMDB batch_size: 100 } transform_param { scale: 0.00390625 } include: { phase: TEST stage: "test-on-test-set" } } layers { name: "mnist" type: DATA top: "data" top: "label" data_param { source: "examples/mnist/mnist_train_lmdb" backend: LMDB batch_size: 100 } transform_param { scale: 0.00390625 } include: { phase: TEST stage: "test-on-train-set" } } layers { name: "conv1" type: CONVOLUTION bottom: "data" top: "conv1" blobs_lr: 1 blobs_lr: 2 convolution_param { num_output: 20 kernel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } } } layers { name: "pool1" type: POOLING bottom: "conv1" top: "pool1" pooling_param { pool: MAX kernel_size: 2 stride: 2 } } layers { name: "conv2" type: CONVOLUTION bottom: "pool1" top: "conv2" blobs_lr: 1 blobs_lr: 2 convolution_param { num_output: 50 kernel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } } } layers { name: "pool2" type: POOLING bottom: "conv2" top: "pool2" pooling_param { pool: MAX kernel_size: 2 stride: 2 } } layers { name: "ip1" type: INNER_PRODUCT bottom: "pool2" top: "ip1" blobs_lr: 1 blobs_lr: 2 inner_product_param { num_output: 500 weight_filler { type: "xavier" } bias_filler { type: "constant" } } } layers { name: "relu1" type: RELU bottom: "ip1" top: "ip1" } layers { name: "ip2" type: INNER_PRODUCT bottom: "ip1" top: "ip2" blobs_lr: 1 blobs_lr: 2 inner_product_param { num_output: 10 weight_filler { type: "xavier" } bias_filler { type: "constant" } } } layers { name: "accuracy" type: ACCURACY bottom: "ip2" bottom: "label" top: "accuracy" } layers { name: "loss" type: SOFTMAX_LOSS bottom: "ip2" bottom: "label" top: "loss" } } # Expected results for first and last 500 iterations: # (with portions of log omitted for brevity) # # Iteration 0, Testing net (#0) # Test score #0: 0.067 # Test score #1: 2.30256 # Iteration 0, Testing net (#1) # Test score #0: 0.0670334 # Test score #1: 2.30258 # Iteration 100, lr = 0.00992565 # Iteration 100, loss = 0.280585 # Iteration 200, lr = 0.00985258 # Iteration 200, loss = 0.345601 # Iteration 300, lr = 0.00978075 # Iteration 300, loss = 0.172217 # Iteration 400, lr = 0.00971013 # Iteration 400, loss = 0.261836 # Iteration 500, lr = 0.00964069 # Iteration 500, loss = 0.157803 # Iteration 500, Testing net (#0) # Test score #0: 0.968 # Test score #1: 0.0993772 # Iteration 500, Testing net (#1) # Test score #0: 0.965883 # Test score #1: 0.109374 # # [...] # # Iteration 9500, Testing net (#0) # Test score #0: 0.9899 # Test score #1: 0.0308299 # Iteration 9500, Testing net (#1) # Test score #0: 0.996816 # Test score #1: 0.0118238 # Iteration 9600, lr = 0.00603682 # Iteration 9600, loss = 0.0126215 # Iteration 9700, lr = 0.00601382 # Iteration 9700, loss = 0.00579304 # Iteration 9800, lr = 0.00599102 # Iteration 9800, loss = 0.00500633 # Iteration 9900, lr = 0.00596843 # Iteration 9900, loss = 0.00796607 # Iteration 10000, lr = 0.00594604 # Iteration 10000, loss = 0.00271736 # Iteration 10000, Testing net (#0) # Test score #0: 0.9914 # Test score #1: 0.0276671 # Iteration 10000, Testing net (#1) # Test score #0: 0.997782 # Test score #1: 0.00908085