Caffe中Mnist的训练日志解读

原文链接http://blog.csdn.net/xiaoyezi_1834/article/details/50724424

Lenet的网络结构图如下:


Mnist的训练日志如下(其中max_iter设为3,使用CPU模式)

I0223 14:55:42.870805  6406 caffe.cpp:178] Use CPU.//使用CPU模式

I0223 14:55:42.871371  6406 solver.cpp:48] Initializing solver from parameters: //利用solver.prototxt文件,初始化solver参数

test_iter: 100

test_interval: 500

base_lr: 0.01

display: 100

max_iter: 3

lr_policy: "inv"

gamma: 0.0001

power: 0.75

momentum: 0.9

weight_decay: 0.0005

snapshot: 5000

snapshot_prefix: "examples/mnist/lenet"

solver_mode: CPU

net: "examples/mnist/lenet_train_test.prototxt"

I0223 14:55:42.871707  6406 solver.cpp:91] Creating training net from net file: examples/mnist/lenet_train_test.prototxt

I0223 14:55:42.872799  6406 net.cpp:322] The NetState phase (0) differed from the phase (1) specified by a rule in layer mnist

I0223 14:55:42.872871  6406 net.cpp:322] The NetState phase (0) differed from the phase (1) specified by a rule in layer accuracy

I0223 14:55:42.873092  6406 net.cpp:49] Initializing net from parameters: //初始化网络参数

name: "LeNet"

state {

  phase: TRAIN

}

layer {

  name: "mnist"

  type: "Data"

  top: "data"

  top: "label"

  include {

    phase: TRAIN

  }

  transform_param {

    scale: 0.00390625

  }

  data_param {

    source: "examples/mnist/mnist_train_lmdb"

    batch_size: 64

    backend: LMDB

  }

}

layer {

  name: "conv1"

  type: "Convolution"

  bottom: "data"

  top: "conv1"

  param {

    lr_mult: 1

  }

  param {

    lr_mult: 2

  }

  convolution_param {

    num_output: 20

    kernel_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

    kernel_size: 2

    stride: 2

  }

}

layer {

  name: "conv2"

  type: "Convolution"

  bottom: "pool1"

  top: "conv2"

  param {

    lr_mult: 1

  }

  param {

    lr_mult: 2

  }

  convolution_param {

    num_output: 50

    kernel_size: 5

    stride: 1

    weight_filler {

      type: "xavier"

    }

    bias_filler {

      type: "constant"

    }

  }

}

layer {

  name: "pool2"

  type: "Pooling"

  bottom: "conv2"

  top: "pool2"

  pooling_param {

    pool: MAX

    kernel_size: 2

    stride: 2

  }

}

layer {

  name: "ip1"

  type: "InnerProduct"

  bottom: "pool2"

  top: "ip1"

  param {

    lr_mult: 1

  }

  param {

    lr_mult: 2

  }

  inner_product_param {

    num_output: 500

    weight_filler {

      type: "xavier"

    }

    bias_filler {

      type: "constant"

    }

  }

}

layer {

  name: "relu1"

  type: "ReLU"

  bottom: "ip1"

  top: "ip1"

}

layer {

  name: "ip2"

  type: "InnerProduct"

  bottom: "ip1"

  top: "ip2"

  param {

    lr_mult: 1

  }

  param {

    lr_mult: 2

  }

  inner_product_param {

    num_output: 10

    weight_filler {

      type: "xavier"

    }

    bias_filler {

      type: "constant"

    }

  }

}

layer {

  name: "loss"

  type: "SoftmaxWithLoss"

  bottom: "ip2"

  bottom: "label"

  top: "loss"

}

//构造Lenet网络结构

I0223 14:55:42.873805  6406 layer_factory.hpp:77] Creating layer mnist//构建mnist层,也就是数据层

I0223 14:55:42.875214  6406 net.cpp:106] Creating Layer mnist

I0223 14:55:42.875300  6406 net.cpp:411] mnist -> data

I0223 14:55:42.875455  6409 db_lmdb.cpp:38] Opened lmdb examples/mnist/mnist_train_lmdb//使用lmdb格式的训练数据

I0223 14:55:42.875653  6406 net.cpp:411] mnist -> label

//数据的输出大小为64*1*28*28(64:图像数,此处为batch大小 1:通道数 28:图像的高 28:图像的宽),数据层只有输出没有输入

I0223 14:55:42.875879  6406 data_layer.cpp:41] output data size: 64,1,28,28

I0223 14:55:42.876302  6406 base_data_layer.cpp:69] Initializing prefetch//初始化prefetch,该函数可以提前获取下一个batch,提高效率

I0223 14:55:42.876423  6406 base_data_layer.cpp:72] Prefetch initialized.

I0223 14:55:42.876461  6406 net.cpp:150] Setting up mnist

I0223 14:55:42.876531  6406 net.cpp:157] Top shape: 64 1 28 28 (50176)//50176=64*1*28*28

I0223 14:55:42.876636  6406 net.cpp:157] Top shape: 64 (64)

I0223 14:55:42.876716  6406 net.cpp:165] Memory required for data: 200960//此时所需要的内存大小

I0223 14:55:42.876829  6406 layer_factory.hpp:77] Creating layer conv1//构建卷积层conv1

I0223 14:55:42.877009  6406 net.cpp:106] Creating Layer conv1

I0223 14:55:42.877122  6406 net.cpp:454] conv1 <- data//数据层的top为卷积层conv1(即数据层data的后面一层为conv1)

I0223 14:55:42.877312  6406 net.cpp:411] conv1 -> conv1

I0223 14:55:42.877905  6406 net.cpp:150] Setting up conv1

//conv1的输出数据大小(20为通道数,也是卷积核的个数),卷积核大小为5,步长为1,经过卷积后图像大小已由28*28变为24*24

I0223 14:55:42.877964  6406 net.cpp:157] Top shape: 64 20 24 24 (737280)

I0223 14:55:42.877993  6406 net.cpp:165] Memory required for data: 3150080

I0223 14:55:42.878154  6406 layer_factory.hpp:77] Creating layer pool1//构建池化层pool1(使用的是最大池化方式)

I0223 14:55:42.878242  6406 net.cpp:106] Creating Layer pool1

I0223 14:55:42.878325  6406 net.cpp:454] pool1 <- conv1//卷积层conv1的top为池化层pool1

I0223 14:55:42.878412  6406 net.cpp:411] pool1 -> pool1

I0223 14:55:42.878540  6406 net.cpp:150] Setting up pool1

I0223 14:55:42.878597  6406 net.cpp:157] Top shape: 64 20 12 12 (184320)//经池化后,图像大小已由24*24变成12*12,池化大小为2*2

I0223 14:55:42.878628  6406 net.cpp:165] Memory required for data: 3887360

I0223 14:55:42.878662  6406 layer_factory.hpp:77] Creating layer conv2//构建卷积层conv2

I0223 14:55:42.878742  6406 net.cpp:106] Creating Layer conv2

I0223 14:55:42.878779  6406 net.cpp:454] conv2 <- pool1//池化层pool1的top为卷积层conv2

I0223 14:55:42.878862  6406 net.cpp:411] conv2 -> conv2

I0223 14:55:42.882365  6410 data_layer.cpp:102] Prefetch batch: 5 ms.//提前获取下一个batch

I0223 14:55:42.882421  6410 data_layer.cpp:103]      Read time: 0.791 ms.//batch的读取时间

I0223 14:55:42.882447  6410 data_layer.cpp:104] Transform time: 3.296 ms.//batch的转化时间

I0223 14:55:42.883898  6406 net.cpp:150] Setting up conv2//配置卷积层conv2

//卷积层conv2的输出大小由64*20*12*12变为64*50*8*8,卷积核数目为50,卷积核大小为5,步长为1

I0223 14:55:42.883935  6406 net.cpp:157] Top shape: 64 50 8 8 (204800)

I0223 14:55:42.883962  6406 net.cpp:165] Memory required for data: 4706560

I0223 14:55:42.884052  6406 layer_factory.hpp:77] Creating layer pool2//构建池化层pool2

I0223 14:55:42.884110  6406 net.cpp:106] Creating Layer pool2

I0223 14:55:42.884181  6406 net.cpp:454] pool2 <- conv2//卷积层conv2的top为池化层pool2

I0223 14:55:42.884268  6406 net.cpp:411] pool2 -> pool2

I0223 14:55:42.884383  6406 net.cpp:150] Setting up pool2

I0223 14:55:42.884448  6406 net.cpp:157] Top shape: 64 50 4 4 (51200)//经池化后,图像大小已由8*8变成4*4,池化大小为2*2

I0223 14:55:42.884500  6406 net.cpp:165] Memory required for data: 4911360

I0223 14:55:42.884553  6406 layer_factory.hpp:77] Creating layer ip1//构建内积层ip1(InnerProduct)

I0223 14:55:42.884644  6406 net.cpp:106] Creating Layer ip1

I0223 14:55:42.884706  6406 net.cpp:454] ip1 <- pool2//池化层pool2的top为内积层ip1

I0223 14:55:42.884790  6406 net.cpp:411] ip1 -> ip1

I0223 14:55:42.887511  6410 data_layer.cpp:102] Prefetch batch: 4 ms.

I0223 14:55:42.887596  6410 data_layer.cpp:103]      Read time: 0.887 ms.

I0223 14:55:42.887634  6410 data_layer.cpp:104] Transform time: 2.494 ms.

I0223 14:55:42.892683  6410 data_layer.cpp:102] Prefetch batch: 4 ms.

I0223 14:55:42.892719  6410 data_layer.cpp:103]      Read time: 0.536 ms.

I0223 14:55:42.892736  6410 data_layer.cpp:104] Transform time: 3.193 ms.

I0223 14:55:42.929069  6406 net.cpp:150] Setting up ip1//配置内积层ip1

I0223 14:55:42.929119  6406 net.cpp:157] Top shape: 64 500 (32000)//数据的输出大小为64*500

I0223 14:55:42.929129  6406 net.cpp:165] Memory required for data: 5039360

I0223 14:55:42.929193  6406 layer_factory.hpp:77] Creating layer relu1//构建非线性变换层relu1

I0223 14:55:42.929252  6406 net.cpp:106] Creating Layer relu1

I0223 14:55:42.929280  6406 net.cpp:454] relu1 <- ip1//内积层ip1的数据传送至非线性变换层relu1

I0223 14:55:42.929325  6406 net.cpp:397] relu1 -> ip1 (in-place)//数据经过非线性变换后传回内积层ip1

I0223 14:55:42.929373  6406 net.cpp:150] Setting up relu1

I0223 14:55:42.929394  6406 net.cpp:157] Top shape: 64 500 (32000)//数据的输出大小为64*500

I0223 14:55:42.929409  6406 net.cpp:165] Memory required for data: 5167360

I0223 14:55:42.929425  6406 layer_factory.hpp:77] Creating layer ip2//构建内积层ip2

I0223 14:55:42.929464  6406 net.cpp:106] Creating Layer ip2

I0223 14:55:42.929483  6406 net.cpp:454] ip2 <- ip1//内积层ip1的top为ip2

I0223 14:55:42.929522  6406 net.cpp:411] ip2 -> ip2

I0223 14:55:42.930277  6406 net.cpp:150] Setting up ip2

I0223 14:55:42.930307  6406 net.cpp:157] Top shape: 64 10 (640)//数据的输出大小为64*10

I0223 14:55:42.930325  6406 net.cpp:165] Memory required for data: 5169920

I0223 14:55:42.930368  6406 layer_factory.hpp:77] Creating layer loss

I0223 14:55:42.930424  6406 net.cpp:106] Creating Layer loss//构建loss层loss

I0223 14:55:42.930449  6406 net.cpp:454] loss <- ip2//内积层ip2的top为loss层

I0223 14:55:42.930486  6406 net.cpp:454] loss <- label//数据标签层label的top为loss层

I0223 14:55:42.930532  6406 net.cpp:411] loss -> loss//利用Softmax计算loss

I0223 14:55:42.930603  6406 layer_factory.hpp:77] Creating layer loss

I0223 14:55:42.930709  6406 net.cpp:150] Setting up loss

I0223 14:55:42.930735  6406 net.cpp:157] Top shape: (1)//loss层的数据输出大小为1

I0223 14:55:42.930747  6406 net.cpp:160]     with loss weight 1//loss的权重为1

I0223 14:55:42.930768  6406 net.cpp:165] Memory required for data: 5169924

I0223 14:55:42.930788  6406 net.cpp:226] loss needs backward computation.//进行反向传播梯度

I0223 14:55:42.930810  6406 net.cpp:226] ip2 needs backward computation.

I0223 14:55:42.930827  6406 net.cpp:226] relu1 needs backward computation.

I0223 14:55:42.930843  6406 net.cpp:226] ip1 needs backward computation.

I0223 14:55:42.930887  6406 net.cpp:226] pool2 needs backward computation.

I0223 14:55:42.930909  6406 net.cpp:226] conv2 needs backward computation.

I0223 14:55:42.930930  6406 net.cpp:226] pool1 needs backward computation.

I0223 14:55:42.930951  6406 net.cpp:226] conv1 needs backward computation.

I0223 14:55:42.930973  6406 net.cpp:228] mnist does not need backward computation.

I0223 14:55:42.930984  6406 net.cpp:270] This network produces output loss

I0223 14:55:42.931020  6406 net.cpp:283] Network initialization done.

//接下来是进行测试网络的构建与测试过程,总共100次迭代过程,每次迭代的batch大小为1000,故测试集的大小为100*100=10000

I0223 14:55:42.931638  6406 solver.cpp:181] Creating test net (#0) specified by net file: examples/mnist/lenet_train_test.prototxt

I0223 14:55:42.931759  6406 net.cpp:322] The NetState phase (1) differed from the phase (0) specified by a rule in layer mnist

I0223 14:55:42.931941  6406 net.cpp:49] Initializing net from parameters: 

name: "LeNet"

state {

  phase: TEST

}

layer {

  name: "mnist"

  type: "Data"

  top: "data"

  top: "label"

  include {

    phase: TEST

  }

  transform_param {

    scale: 0.00390625

  }

  data_param {

    source: "examples/mnist/mnist_test_lmdb"

    batch_size: 100

    backend: LMDB

  }

}

layer {

  name: "conv1"

  type: "Convolution"

  bottom: "data"

  top: "conv1"

  param {

    lr_mult: 1

  }

  param {

    lr_mult: 2

  }

  convolution_param {

    num_output: 20

    kernel_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

    kernel_size: 2

    stride: 2

  }

}

layer {

  name: "conv2"

  type: "Convolution"

  bottom: "pool1"

  top: "conv2"

  param {

    lr_mult: 1

  }

  param {

    lr_mult: 2

  }

  convolution_param {

    num_output: 50

    kernel_size: 5

    stride: 1

    weight_filler {

      type: "xavier"

    }

    bias_filler {

      type: "constant"

    }

  }

}

layer {

  name: "pool2"

  type: "Pooling"

  bottom: "conv2"

  top: "pool2"

  pooling_param {

    pool: MAX

    kernel_size: 2

    stride: 2

  }

}

layer {

  name: "ip1"

  type: "InnerProduct"

  bottom: "pool2"

  top: "ip1"

  param {

    lr_mult: 1

  }

  param {

    lr_mult: 2

  }

  inner_product_param {

    num_output: 500

    weight_filler {

      type: "xavier"

    }

    bias_filler {

      type: "constant"

    }

  }

}

layer {

  name: "relu1"

  type: "ReLU"

  bottom: "ip1"

  top: "ip1"

}

layer {

  name: "ip2"

  type: "InnerProduct"

  bottom: "ip1"

  top: "ip2"

  param {

    lr_mult: 1

  }

  param {

    lr_mult: 2

  }

  inner_product_param {

    num_output: 10

    weight_filler {

      type: "xavier"

    }

    bias_filler {

      type: "constant"

    }

  }

}

layer {

  name: "accuracy"

  type: "Accuracy"

  bottom: "ip2"

  bottom: "label"

  top: "accuracy"

  include {

    phase: TEST

  }

}

layer {

  name: "loss"

  type: "SoftmaxWithLoss"

  bottom: "ip2"

  bottom: "label"

  top: "loss"

}

I0223 14:55:42.932307  6406 layer_factory.hpp:77] Creating layer mnist

I0223 14:55:42.934370  6406 net.cpp:106] Creating Layer mnist

I0223 14:55:42.934464  6406 net.cpp:411] mnist -> data

I0223 14:55:42.934545  6411 db_lmdb.cpp:38] Opened lmdb examples/mnist/mnist_test_lmdb

I0223 14:55:42.934552  6406 net.cpp:411] mnist -> label

I0223 14:55:42.934733  6406 data_layer.cpp:41] output data size: 100,1,28,28

I0223 14:55:42.935247  6406 base_data_layer.cpp:69] Initializing prefetch

I0223 14:55:42.935431  6406 base_data_layer.cpp:72] Prefetch initialized.

I0223 14:55:42.935503  6406 net.cpp:150] Setting up mnist

I0223 14:55:42.935598  6406 net.cpp:157] Top shape: 100 1 28 28 (78400)

I0223 14:55:42.935681  6406 net.cpp:157] Top shape: 100 (100)

I0223 14:55:42.935739  6406 net.cpp:165] Memory required for data: 314000

I0223 14:55:42.935811  6406 layer_factory.hpp:77] Creating layer label_mnist_1_split

I0223 14:55:42.935909  6406 net.cpp:106] Creating Layer label_mnist_1_split

I0223 14:55:42.935940  6406 net.cpp:454] label_mnist_1_split <- label

I0223 14:55:42.935992  6406 net.cpp:411] label_mnist_1_split -> label_mnist_1_split_0

I0223 14:55:42.936048  6406 net.cpp:411] label_mnist_1_split -> label_mnist_1_split_1

I0223 14:55:42.936138  6406 net.cpp:150] Setting up label_mnist_1_split

I0223 14:55:42.936182  6406 net.cpp:157] Top shape: 100 (100)

I0223 14:55:42.936202  6406 net.cpp:157] Top shape: 100 (100)

I0223 14:55:42.936223  6406 net.cpp:165] Memory required for data: 314800

I0223 14:55:42.936246  6406 layer_factory.hpp:77] Creating layer conv1

I0223 14:55:42.936327  6406 net.cpp:106] Creating Layer conv1

I0223 14:55:42.936350  6406 net.cpp:454] conv1 <- data

I0223 14:55:42.936396  6406 net.cpp:411] conv1 -> conv1

I0223 14:55:42.936653  6406 net.cpp:150] Setting up conv1

I0223 14:55:42.936681  6406 net.cpp:157] Top shape: 100 20 24 24 (1152000)

I0223 14:55:42.936693  6406 net.cpp:165] Memory required for data: 4922800

I0223 14:55:42.936758  6406 layer_factory.hpp:77] Creating layer pool1

I0223 14:55:42.936802  6406 net.cpp:106] Creating Layer pool1

I0223 14:55:42.936823  6406 net.cpp:454] pool1 <- conv1

I0223 14:55:42.936872  6406 net.cpp:411] pool1 -> pool1

I0223 14:55:42.936938  6406 net.cpp:150] Setting up pool1

I0223 14:55:42.936962  6406 net.cpp:157] Top shape: 100 20 12 12 (288000)

I0223 14:55:42.936975  6406 net.cpp:165] Memory required for data: 6074800

I0223 14:55:42.936990  6406 layer_factory.hpp:77] Creating layer conv2

I0223 14:55:42.937044  6406 net.cpp:106] Creating Layer conv2

I0223 14:55:42.937064  6406 net.cpp:454] conv2 <- pool1

I0223 14:55:42.937110  6406 net.cpp:411] conv2 -> conv2

I0223 14:55:42.940639  6406 net.cpp:150] Setting up conv2

I0223 14:55:42.940696  6406 net.cpp:157] Top shape: 100 50 8 8 (320000)

I0223 14:55:42.940711  6406 net.cpp:165] Memory required for data: 7354800

I0223 14:55:42.940803  6406 layer_factory.hpp:77] Creating layer pool2

I0223 14:55:42.940876  6406 net.cpp:106] Creating Layer pool2

I0223 14:55:42.940910  6406 net.cpp:454] pool2 <- conv2

I0223 14:55:42.940970  6406 net.cpp:411] pool2 -> pool2

I0223 14:55:42.941061  6406 net.cpp:150] Setting up pool2

I0223 14:55:42.941093  6406 net.cpp:157] Top shape: 100 50 4 4 (80000)

I0223 14:55:42.941108  6406 net.cpp:165] Memory required for data: 7674800

I0223 14:55:42.941131  6406 layer_factory.hpp:77] Creating layer ip1

I0223 14:55:42.941184  6406 net.cpp:106] Creating Layer ip1

I0223 14:55:42.941210  6406 net.cpp:454] ip1 <- pool2

I0223 14:55:42.941262  6406 net.cpp:411] ip1 -> ip1

……

//输出准确率accuracy和损失loss

I0223 14:55:59.623518  6406 solver.cpp:408]     Test net output #0: accuracy = 0.1309

I0223 14:55:59.623611  6406 solver.cpp:408]     Test net output #1: loss = 2.31399 (* 1 = 2.31399 loss)

I0223 14:55:59.623705  6406 base_data_layer.cpp:115] Prefetch copied

I0223 14:55:59.625409  6410 data_layer.cpp:102] Prefetch batch: 1 ms.

I0223 14:55:59.625458  6410 data_layer.cpp:103]      Read time: 0.188 ms.

I0223 14:55:59.625468  6410 data_layer.cpp:104] Transform time: 1.022 ms.

I0223 14:55:59.874915  6406 solver.cpp:229] Iteration 0, loss = 2.30499

I0223 14:55:59.874987  6406 solver.cpp:245]     Train net output #0: loss = 2.30499 (* 1 = 2.30499 loss)

I0223 14:55:59.875026  6406 sgd_solver.cpp:106] Iteration 0, lr = 0.01

I0223 14:55:59.879196  6406 base_data_layer.cpp:115] Prefetch copied

I0223 14:55:59.881901  6410 data_layer.cpp:102] Prefetch batch: 2 ms.

I0223 14:55:59.881934  6410 data_layer.cpp:103]      Read time: 0.413 ms.

I0223 14:55:59.881945  6410 data_layer.cpp:104] Transform time: 1.312 ms.

I0223 14:56:00.149636  6406 base_data_layer.cpp:115] Prefetch copied

I0223 14:56:00.151485  6410 data_layer.cpp:102] Prefetch batch: 1 ms.

I0223 14:56:00.151515  6410 data_layer.cpp:103]      Read time: 0.195 ms.

I0223 14:56:00.151525  6410 data_layer.cpp:104] Transform time: 1.073 ms.

I0223 14:56:00.400404  6406 solver.cpp:458] Snapshotting to binary proto file examples/mnist/lenet_iter_3.caffemodel//保存当前训练模型快照

I0223 14:56:00.400461  6406 net.cpp:918] Serializing 9 layers

//保存当前solver的快照

I0223 14:56:00.434458  6406 sgd_solver.cpp:273] Snapshotting solver state to binary proto file examples/mnist/lenet_iter_3.solverstate

I0223 14:56:00.455166  6406 solver.cpp:323] Optimization Done.

I0223 14:56:00.455202  6406 caffe.cpp:222] Optimization Done.//程序运行结束

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值