利用caffe训练cifar之训练数据集合生成leveldb

来源:互联网 发布:java并发编程 编辑:程序博客网 时间:2024/06/05 06:14

1.首先要搭建好VS+Caffe的训练环境。

2.下载训练集合Cifar:

下载地址:http://www.cs.toronto.edu/~kriz/cifar.html

获得训练集合:cifar-10-binary.tar.gz

解压缩后获得cifar-10-batches-bin数据文件,里面有6个bin文件,为训练数据集合。在windows环境下可以直接使用rar解压缩。


3.在目录路径caffe-master\caffe-master\Build\x64\Debug的Debug文件下创建数据输入层文件夹。文件名名input_folder。(ps,文件名是固定的,这是代码中已经固定好的,请确认文件夹名是否问input_folder.)然后将上面解压后得到的6个bin文件拷贝到这个文件夹中。



4.在Debug目录级下新建一个bat文件,命名为training.bat,然后编辑内容:

convert_cifar_data.exe input_folder output_foldersleveldb

pause

点击运行bat文件就行了。


ps:bat文件名称可以随意,不一定非要为trainning,里面的代码也很简单,就是利用convert_cifar_data.exe执行文件训练input_folder文件夹中的数据集,然后设置leveldb文件。训练结果中自动生成两个leveldb文件夹为:


cifar10_test_leveldb中的文件内容为:


cifar10_test_leveldb中的文件内容为:


这里我们就生成了cifar的leveldb文件。

最后附加我第一次学习中遇到的两个问题:

1.第一个问题

创建input_folder文件添加训练数据后,点击bat文件,出现错误:

D:\caffe\caffe-master\caffe-master\Build\x64\Debug>convert_cifar_data.exe input
_folder output_folders leveldb
I0422 21:51:02.593572 20568 db_leveldb.cpp:18] Opened leveldb output_folders/cif
ar10_train_leveldb
I0422 21:51:02.594573 20568 convert_cifar_data.cpp:52] Writing Training data
I0422 21:51:02.594573 20568 convert_cifar_data.cpp:55] Training Batch 1
F0422 21:51:02.594573 20568 convert_cifar_data.cpp:60] Check failed: data_file U
nable to open train file #1

*** Check failure stack trace: ***

解决方法:用VS Debug到错误处代码:

for (int fileid = 0; fileid < kCIFARTrainBatches; ++fileid) {    // Open files    LOG(INFO) << "Training Batch " << fileid + 1;    string batchFileName = input_folder + "/data_batch_"      + caffe::format_int(fileid+1) + ".bin";    std::ifstream data_file(batchFileName.c_str(),        std::ios::in | std::ios::binary);    CHECK(data_file) << "Unable to open train file #" << fileid + 1;    for (int itemid = 0; itemid < kCIFARBatchSize; ++itemid) {      read_image(&data_file, &label, str_buffer);      datum.set_label(label);      datum.set_data(str_buffer, kCIFARImageNBytes);      string out;      CHECK(datum.SerializeToString(&out));      txn->Put(caffe::format_int(fileid * kCIFARBatchSize + itemid, 5), out);    }

肯定是数据集或者数据集的路径出现了问题,首先检查自己的数据集文件,也就是6个bin文件是否大小都为30010KB,以保证文件数据没有缺失。网上说用rar解压cifar-10-binary.tar.gz得到的数据不正确,本人觉得纯属于胡扯,本人亲自试验用7-zip和rar解压获得数据文件都是一样,都可以进行训练。

数据文件完好无损的后,检查数据文件名称是否问input_folder!!!!!!博主第一次出现Check failed: data_file Unable to open train file这个问题就是因为创建input_folder文件多加了个空格,导致运行错误。说到心塞。注意路径!注意路径!注意路径!重要的事说三遍。


2.第二个问题

运行bat文件后出现错误信息:

D:\caffe\caffe-master\caffe-master\Build\x64\Debug>convert_cifar_data.exe input
_folder output_folders leveldb
F0414 09:18:39.685039 4272 db_leveldb.cpp:16] Check failed: status.ok() Failed
to open leveldb output_folders/cifar10_train_leveldb
Invalid argument: output_folders/cifar10_train_leveldb: exists (error_if_exists
is true)

*** Check failure stack trace: ***


解决办法:删除output_folders文件夹重新运行bat文件。问题解决。

1 0
原创粉丝点击