一、从网上自己下载数据集

1.1我下载了两类图片,分别为“鸟”:30张;“猫”:30张(注意:随意下载即可)

如何修改BertEmbedding内部结构_caffe

如何修改BertEmbedding内部结构_测试_02

二、数据集处理

2.1批量重命名

方法:将文件全部选中,然后右键点击重命名,修改如图所示:

如何修改BertEmbedding内部结构_layer_03

如何修改BertEmbedding内部结构_测试_04

2.2批量转换图片大小(先预定设置成28*28)

使用一般的看图软件就可以转换。(我这里使用2345看图王)

注意:在样本转换为LEVEDB文件之前,需要把图片弄到同一大小,否则会出错。

2.3准备训练和测试数据文件夹


(1)“鸟”和“猫”每一种选择25张图片作为训练集合,剩余5张作为测试集合

(2)所以最后train文件夹中由50张图片,test文件夹中由10张图片

2.4制作标签文件(txt)

手动制作如下:(在后面标明是哪一类,我这里使用0表示鸟,1表示猫)


如何修改BertEmbedding内部结构_layer_05


如何修改BertEmbedding内部结构_测试_06

三、编写脚本文件


(1)对测试数据集进行转换:先用txt文件编写,然后将后缀改为.bat然后双击运行就可以了

脚本文件内容如下:


SET GLOG_logtostderr=1
D:\caffe-master\Build\x64\Debug\convert_imageset.exe --backend=leveldb C:\Users\Administrator\Desktop\data\test\ C:\Users\Administrator\Desktop\data\test.txt C:\Users\Administrator\Desktop\data\mtestldb 
pause


如何修改BertEmbedding内部结构_caffe_07


(2)对训练集进行转换

脚本文件内容如下:

SET GLOG_logtostderr=1
D:\caffe-master\Build\x64\Debug\convert_imageset.exe --backend=leveldb C:\Users\Administrator\Desktop\data\train\ C:\Users\Administrator\Desktop\data\train.txt C:\Users\Administrator\Desktop\data\mtrainldb 
pause


如何修改BertEmbedding内部结构_测试_08

(3)均值计算

脚本内容如下:

D:\caffe-master\Build\x64\Debug\compute_image_mean.exe C:\Users\Administrator\Desktop\data\mtrainldb mean.binaryproto --backend=leveldb
pause


如何修改BertEmbedding内部结构_小项目_09

(4)在train-test文件夹中拷贝cifar10中的这俩文件然后进行修改

如何修改BertEmbedding内部结构_测试_10

(5)运行脚本创建

Caffe.bat

脚本内容如下:

SET GLOG_logtostderr=1
D:\caffe-master\Build\x64\Debug\caffe.exe train --solver C:\Users\Administrator\Desktop\data\train-test\cifar10_quick_solver.prototxt

按图修改即可,然后双击caffe.bat就会自动运行了

注意:要记得修改lenet_solver.protptxt和lenet_train_test.prototxt中的东西

 

四、经过以上步骤后,你的数据集文件夹中应包含如下文件:


如何修改BertEmbedding内部结构_小项目_11


五、

(1)

如何修改BertEmbedding内部结构_自己的数据集_12

这个batch_size表示一次读取的图片数量

(2)需要修改的地方1

name: "CIFAR10_quick"
layer {
  name: "cifar"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {        //【第1块修改的地方】下面是均值文件所在的路径,改为你自己的均值文件所在的路径
    mean_file: "data/mine/train_mean.binaryproto"
  }
  data_param {            //【第2块修改的地方】下面改为训练样本生成的数据库所在的目录[注意:是训练样本数据库]
    source: "data/mine/mtrainldb"
    batch_size: 50    //【第3块修改的地方】由于我们的训练样本不多,所以我们一次读入50张图片就好
    backend: LEVELDB
  }
}
layer {
  name: "cifar"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {    //【第4块修改的地方】下面是均值文件所在的路径,改为你自己的均值文件所在的路径
    mean_file: "data/mine/train_mean.binaryproto"
  }
  data_param {      //【第5块修改的地方】下面改为测试样本生成的数据库所在的目录[注意:是测试样本数据库]
    source: "data/mine/mtestldb"
    batch_size: 50//【第6块修改的地方】由于我们的测试样本只有150张,所以我们一次读入50张图片就好
    backend: LEVELDB
  }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }

   中间的省略......
layer {
  name: "ip2"
  type: "InnerProduct"
  bottom: "ip1"
  top: "ip2"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 3         //【第7块修改的地方】我们现在是3分类问题,所以将第二个全连接层改为3
    weight_filler {
      type: "gaussian"
      std: 0.1
    }
    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"
}




(3)需要修改的地方2

//【1】改为你自己的网络模型配置文件的目录
net: "data/mine/train-val/cifar10_quick_train_test.prototxt"
//【2】预测阶段迭代次数,设为3,因为batch_size设为50,这样就可以覆盖150张测试集图片
test_iter: 3
//【3】每迭代50次, 进行一次测试
test_interval: 50
//【4】权值学习率,其实就是在反向传播阶段,权值每次的调整量的程度
base_lr: 0.001
momentum: 0.9
weight_decay: 0.004
//【5】在整个过程中,我们使用固定的学习率,也可尝试使用可变学习率
lr_policy: "fixed"
//【6】因为想观察每一次训练的变化,所以设置迭代一次显示一次内容
display: 1
//【7】将最大迭代次数设为4000
max_iter: 4000
//【8】每迭代1000次输出一次结果
snapshot: 1000
//【9】输出格式
snapshot_format: HDF5
//【10】输出文件的前缀
snapshot_prefix: "data/mine/cifar10_quick"
//【11】用的是CPU
solver_mode: CPU

注意:在修改路径的时候,路径中不能含有中文,同时路径格式要正确,转义字符要用“/”或者“\\”,不可以使用“\”


(4)


如何修改BertEmbedding内部结构_测试_13


这个错误是刚刚修改的solver层设置出现了问题,回去继续修改就可以了。

至于如何修改,我现在刚刚接触,还在学习中,如果哪位朋友有好的资料可以分享以下,谢谢大家了。