caffe——cifar10模型训练自己的数据


本文是基于已建立自己的数据集,将数据集打包生成为 lmdb 格式以及生成均值文件 mean 文件。下面是针对CIFAR10 模型对自己数据集进行训练时需要进行的修改。

修改solver、train_val配置文件


把cifar的两个配置文件拷过来:

cifar10_quick_solver.prototxt
cifar10_quick_train_test.prototxt

首先修改cifar10_quick_train_test.prototxt的路径以及输出层数量(标注出黑体的部分):


name: "CIFAR10_quick"
layer {
  name: "cifar"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mean_file: "examples/my_simple_image/imagenet_mean.binaryproto"
  }
  data_param {
    source: "examples/my_simple_image/ilsvrc12_train_lmdb"
    batch_size: 50    #一次训练的图片数量,一般指定50也够了
    backend: LMDB
  }
}
layer {
  name: "cifar"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {
    mean_file: "examples/my_simple_image/imagenet_mean.binaryproto"
  }
  data_param {
    source: "examples/my_simple_image/ilsvrc12_val_lmdb"
    batch_size: 50    #一次训练的图片数量
    backend: LMDB
  }
}

..........

layer {
  name: "ip2"
  type: "InnerProduct"
  bottom: "ip1"
  top: "ip2"
  ..........
  inner_product_param {
    num_output: 3      #输出层数量,就是你要分类的个数
    weight_filler {
      type: "gaussian"
      std: 0.1
    }
    bias_filler {
      type: "constant"
    }
  }
}
......


注:这里需要注意到那一层num_output是表示输出层的数量,即分类的个数。


cifar10_quick_solver.prototxt的修改根据自己的实际需要:

net: "examples/my_simple_image/cifar/cifar10_quick_train_test.prototxt"   #网络文件路径
test_iter: 20        #测试执行的迭代次数
test_interval: 10    #迭代多少次进行测试
base_lr: 0.001       #迭代速率,这里我们改小了一个数量级,因为数据比较少
momentum: 0.9
weight_decay: 0.004
lr_policy: "fixed"   #采用固定学习速率的模式display: 1           #迭代几次就显示一下信息,这里我为了及时跟踪效果,改成1
max_iter: 4000       #最大迭代次数
snapshot: 1000       #迭代多少次生成一次快照
snapshot_prefix: "examples/my_simple_image/cifar/cifar10_quick"     #快照路径和前缀
solver_mode: CPU     #CPU或者GPU




修改完成后,便可以开始训练,运行 cifar10_quick_solver.prototxt 文件


./cifar10_quick_solver.prototxt



你可能感兴趣的:(caffe——cifar10模型训练自己的数据)