当前位置: 首页 > news >正文

松原网站建设公司房地产网站开发公司电话

松原网站建设公司,房地产网站开发公司电话,绩溪住房建设网站,帮人家做网站难吗前言 主要是想尝试看一下多标签的caffe是如何进行输入输出的#xff0c;但是目前还未找到基于原始caffe做多标签输入的代码#xff0c;大部分都是基于源码做了一部分修改实现多标签分类#xff0c;caffe官网倒是有一个多标签的Python程序#xff0c;这个我慢慢研究研究但是目前还未找到基于原始caffe做多标签输入的代码大部分都是基于源码做了一部分修改实现多标签分类caffe官网倒是有一个多标签的Python程序这个我慢慢研究研究此篇博客先看看单标签的数据格式制作与训练以hdf5和mnist数据集为例吧 【注】使用hdf5的好处有三个①相对于前面制作的lmdb和leveldb数据集用convert的那个代码转换前一般都要求一张图片一个标签也就是说猫图片的标签必须是“猫”而不是”绿“、“猫”而hdf5的数据格式就能支持后者一张图片可有多个标签描述。②当我们的数据是非图片类型的比如一维声音数据也能用hdf5制作满足caffe输入的数据集。③当程序无法一次性读取太大的数据集我们可以将数据集分别放到不同的hdf5文件 国际惯例参考博客 caffe HDF5Data 层使用及数据生成 解读创建hdf5的matlab程序 在caffe中自带了hdf5的处理程序我们先来研究研究然后再套入mnist数据集。 前面说过一个数据集可以放入不同的hdf5文件中那么我们肯定要现指定当前的数据存在哪个hdf5文件中 filenametrial.h5; 由于自带的程序中没有调用指定数据集所以事先随机生成了一系列样本 num_total_samples10000; % to simulate data being read from disk / generated etc. data_diskrand(5,5,1,num_total_samples); label_diskrand(10,num_total_samples); ​ 需要注意的是这个数据集的格式data_disk的每个维度分别代表宽、高、通道数、样本数刚好符合opencv的读取方式而matlab读取图片的方式是高、宽与这个刚好相反所以用自己的数据集记得要翻转前两个维度待会再说。此外label_disk的两个维度分别是标签的单热度编码、样本数与我们的习惯也相反我们习惯一行一个标签而这里是一列是一个样本的标签。 然后我们看看到底是怎么写入文件的 定义了三个变量分别是每次读取的数据大小是否覆盖写入原来的hdf5文件(1/0) chunksz100; created_flagfalse; totalct0; 看不懂没关系接着往下读代码 fprintf(batch no. %d\n, batchno);last_read(batchno-1)*chunksz;% to simulate maximum data to be held in memory before dumping to hdf5 file batchdatadata_disk(:,:,1,last_read1:last_readchunksz); batchlabslabel_disk(:,last_read1:last_readchunksz); 这里就是按照事先设置的chunksz分批读取数据。比如第一次读取第1-100个数据第二次就是101-200以此类推当然读取数据的时候虽然从每批的第一个数据(1/101/201…)开始读但是有时候我们需要从这个数据的第m个样本的第n行第m列开始读所以提供了这样一个结构体用于指示读取数据的开始位置 startlocstruct(dat,[1,1,1,totalct1], lab, [1,totalct1]); 也就是从totalct1个数据的第1行第1列第1个通道开始读取标签同理接下来就是存储每批数据到最开始指定的trial.h5文件中了 curr_dat_szstore2hdf5(filename, batchdata, batchlabs, ~created_flag, startloc, chunksz); 有兴趣可以看看store2hdf5的源码这里分别介绍一下几个参数的含义 filename存储的hdf5文件名称batchdata读取的数据一般是四个维度宽、高、通道、批大小batchlabs读取的批数据对应的输出可以是标签也可以是其它的东东两维类别、批大小created_flag是否覆盖写入(0不覆盖1覆盖)一般来说第一个批次肯定是覆盖写入(~false1)startloc前面说的第一个数据开始位置chunksz批大小curr_dat_sz返回值四维(宽、高、通道、已写入样本数)接下来两个就是重置3中的下一个读取数据的位置totalct和4中的是否覆盖写入为否(0~true) created_flagtrue;% flag set so that file is created only oncetotalctcurr_dat_sz(end);% updated dataset size (#samples) 【注】代码灵活多变请不要循环类似于“为什么函数store2hdf5用~created_flag而不把非号去掉”诸如此类的问题。后面有一行代码用于展示存储的hdf5数据情况 h5disp(filename); 自带的程序输出如下一般我们核对核对大小和样本数就行咯 HDF5 trial.h5 Group / Dataset data Size: 5x5x1x10000MaxSize: 5x5x1xInfDatatype: H5T_IEEE_F32LE (single)ChunkSize: 5x5x1x100Filters: noneFillValue: 0.000000Dataset label Size: 10x10000MaxSize: 10xInfDatatype: H5T_IEEE_F32LE (single)ChunkSize: 10x100Filters: noneFillValue: 0.000000这样还不够我们还得检测一下数据是不是真的是我们输入的数据也就是一致性 data_rdh5read(filename, /data, [1 1 1 1000], [5, 5, 1, 1000]); label_rdh5read(filename, /label, [1 1000], [10, 1000]); fprintf(Testing ...\n); try assert(isequal(data_rd, single(data_disk(:,:,:,1000:1999))), Data do not match);assert(isequal(label_rd, single(label_disk(:,1000:1999))), Labels do not match);fprintf(Success!\n); catch errfprintf(Test failed ...\n);getReport(err) end ​ 可以发现读取了存储的trial.h5文件中从第[1 1 1 1000]个数据开始的随后1000个每个大小[5,5,1]的数据。其实也就是按照[5,5,1]从第1000个样本的第一个数值读总共读1000个就行了即完成了读取第1000-1999的样本数据和标签。随后在try catch语句中判断这读出来的和我们原始数据data_disk和label_disk是不是对应的是就返回Success!错误的话不仅返回Test failed ...而且还有错误原因非常便于调试。最后当然就是指示一下我们的hdf5文件名字是什么为什么用txt文档存因为前面已经说了一个大的数据集一般存在多个hdf5中换行存储就行。自带源码只存储到了一个hdf5文件中因而对应的list.txt存储只有一行那就是: trial.h5在prototxt中使用hdf5的方法其实也就是换掉了type类型和指定hdf5存储的txt位置 layer {name: datatype: HDF5Datatop: datatop: labelvechdf5_data_param {source: /path/to/list.txtbatch_size: 64} } 以mnist为实例创建hdf5文件 制作训练集 去显示mnist手写数字这一博文中copy一下loadMNISTImages和loadMNISTLabels这两个文件用于读取存储mnist的四个二进制文件哪四个就不说了吧t10k-images-idx3-ubyte、t10k-labels-idx1-ubyte、train-images-idx3-ubyte、train-labels-idx1-ubyte 然后按照上面介绍的基本流程分别进行如下修改 数据集的读取 data loadMNISTImages(t10k-images-idx3-ubyte); labels loadMNISTLabels(t10k-labels-idx1-ubyte); num_total_samplessize(data,1); data_diskreshape(data,[28,28,1,num_total_samples]);%将数据集读取出来(高*宽*通道*样本数)图片宽高翻转和标签的行列变换 data_diskpermute(data_disk,[2 1 3 4]);%翻转matlab读取的高宽 label_diskpermute(labels,[2 1]);%转换为caffe标签的输入格式(类别数*总样本数)验证一致性 data_rdh5read(filename, /data, [1 1 1 1000], [28, 28, 1, 1000]); label_rdh5read(filename, /label, [1 1000], [1, 1000]);附上train.h5制作的完整代码注意test.h5的制作相同只需替换代码中的train为test以及测试数据对应的二进制文件即可。 %% WRITING TO HDF5 clear clc filenametrain.h5;%可改test.h5% data loadMNISTImages(train-images-idx3-ubyte);%可改test的数据集 % labels loadMNISTLabels(train-labels-idx1-ubyte);%可改test的标签 data loadMNISTImages(train-images-idx3-ubyte); labels loadMNISTLabels(train-labels-idx1-ubyte); num_total_samplessize(data,1); data_diskreshape(data,[28,28,1,num_total_samples]);%将数据集读取出来(高*宽*通道*样本数) %由于caffe正常的处理方法是opencv读取图片与matlab的高宽相反 data_diskpermute(data_disk,[2 1 3 4]);%翻转matlab读取的高宽 label_diskpermute(labels,[2 1]);%转换为caffe标签的输入格式(类别数*总样本数) % num_total_samples10000; % to simulate data being read from disk / generated etc. % data_diskrand(5,5,1,num_total_samples); % label_diskrand(10,num_total_samples); chunksz100; created_flagfalse; totalct0; for batchno1:num_total_samples/chunksz fprintf(batch no. %d\n, batchno); last_read(batchno-1)*chunksz;% to simulate maximum data to be held in memory before dumping to hdf5 file batchdatadata_disk(:,:,1,last_read1:last_readchunksz); batchlabslabel_disk(:,last_read1:last_readchunksz);% store to hdf5 startlocstruct(dat,[1,1,1,totalct1], lab, [1,totalct1]); curr_dat_szstore2hdf5(filename, batchdata, batchlabs, ~created_flag, startloc, chunksz); %1代表新建0代表附加 created_flagtrue;% flag set so that file is created only once totalctcurr_dat_sz(end);% updated dataset size (#samples) end% display structure of the stored HDF5 file h5disp(filename);%% READING FROM HDF5% Read data and labels for samples #1000 to 1999 data_rdh5read(filename, /data, [1 1 1 1000], [28, 28, 1, 1000]); label_rdh5read(filename, /label, [1 1000], [1, 1000]); fprintf(Testing ...\n); try assert(isequal(data_rd, single(data_disk(:,:,:,1000:1999))), Data do not match); assert(isequal(label_rd, single(label_disk(:,1000:1999))), Labels do not match);fprintf(Success!\n); catch err fprintf(Test failed ...\n); getReport(err) end%delete(filename);% CREATE list.txt containing filename, to be used as source for HDF5_DATA_LAYER FILEfopen(train.txt, w);%可改test.txt fprintf(FILE, %s, filename); fclose(FILE); fprintf(HDF5 filename listed in %s \n, list.txt);% NOTE: In net definition prototxt, use list.txt as input to HDF5_DATA as: % layer { % name: data % type: HDF5Data % top: data % top: labelvec % hdf5_data_param { % source: /path/to/list.txt % batch_size: 64 % } % } 运行结果总共600个batch HDF5 test.h5 Group / Dataset data Size: 28x28x1x60000MaxSize: 28x28x1xInfDatatype: H5T_IEEE_F32LE (single)ChunkSize: 28x28x1x100Filters: noneFillValue: 0.000000Dataset label Size: 1x60000MaxSize: 1xInfDatatype: H5T_IEEE_F32LE (single)ChunkSize: 1x100Filters: noneFillValue: 0.000000 Testing ... Success! HDF5 filename listed in list.txt 同理制作test.h5文件。 以hdf5为输入进行训练 把原始的lenet_train_test.prototxt的前两个’layer’改一下 name: LeNet layer { name: mnist type: HDF5Data top: data top: label include {phase: TRAIN } hdf5_data_param {source: train.txtbatch_size: 64 } } layer { name: mnist type: HDF5Data top: data top: label include {phase: TEST } hdf5_data_param {source: test.txtbatch_size: 100 } } 写个bat文件训练试试 E:\caffeDEV1\caffe-master\Build\x64\Release\caffe.exe train --solverlenet_solver.prototxt pause 截取了部分运行过程 I0621 11:01:55.571880 10520 solver.cpp:244] Train net output #0: loss 2.29 63 (* 1 2.2963 loss) I0621 11:01:55.571880 10520 sgd_solver.cpp:106] Iteration 6600, lr 0.00683784 I0621 11:01:56.463932 10520 solver.cpp:228] Iteration 6700, loss 2.29493 I0621 11:01:56.464931 10520 solver.cpp:244] Train net output #0: loss 2.29 493 (* 1 2.29493 loss) I0621 11:01:56.464931 10520 sgd_solver.cpp:106] Iteration 6700, lr 0.00680711 I0621 11:01:57.424986 10520 solver.cpp:228] Iteration 6800, loss 2.28502 I0621 11:01:57.425987 10520 solver.cpp:244] Train net output #0: loss 2.28 502 (* 1 2.28502 loss) I0621 11:01:57.425987 10520 sgd_solver.cpp:106] Iteration 6800, lr 0.0067767 I0621 11:01:58.465046 10520 solver.cpp:228] Iteration 6900, loss 2.29951 I0621 11:01:58.466047 10520 solver.cpp:244] Train net output #0: loss 2.29 951 (* 1 2.29951 loss) I0621 11:01:58.466047 10520 sgd_solver.cpp:106] Iteration 6900, lr 0.0067466 I0621 11:01:59.259091 10520 solver.cpp:337] Iteration 7000, Testing net (#0) I0621 11:01:59.883127 10520 solver.cpp:404] Test net output #0: accuracy 0 .1049 I0621 11:01:59.884127 10520 solver.cpp:404] Test net output #1: loss 2.385 52 (* 1 2.38552 loss) I0621 11:01:59.889127 10520 solver.cpp:228] Iteration 7000, loss 2.29426 I0621 11:01:59.889127 10520 solver.cpp:244] Train net output #0: loss 2.29 426 (* 1 2.29426 loss) I0621 11:01:59.889127 10520 sgd_solver.cpp:106] Iteration 7000, lr 0.00671681 好了附件打包 程序和prototxt以及bat下载地址: 链接http://pan.baidu.com/s/1hr4UM2o 密码bqiy mnist手写数字链接http://pan.baidu.com/s/1jHYCQJ8 密码vaeo 后续研究将扩展到多标签中预先参考文献戳这里 ​
http://wiki.neutronadmin.com/news/236936/

相关文章:

  • iis做网站文件下载软文营销怎么写
  • 网站 多语言最有效的线上推广方式
  • 外贸网站建设定制开发wordpress优化速度
  • 如何搭建微网站久久建筑有限公司
  • 合肥专业做网站公司有哪些wordpress用户注册地址
  • 好看响应式网站模板学广告设计学费是多少
  • 昆明云南微网站搭建all in one wordpress
  • 遂溪网站建设公司正确的网址格式怎么写
  • 网站建设各个模块的功能中国企业网是国企吗
  • 钛钢饰品网站建设网页模板好的网站好
  • 应聘网站运营建设面试影视后期制作培训机构全国排名
  • 网站开发制作全包网站图片缩略图
  • 上海网站开发公司网站建设中 模版下载
  • 网站平台代理百度seo搜搜
  • 做网站用什么语哪里有制作网站
  • 建设网站需要注意的事项企业网站空间选择
  • 网站服务器租用价格怎么算海口网站制作公司
  • 商品图片网站开发网页设计师工资一般多少钱
  • 网站搭建技术方案广告优化是做什么的
  • 网站建设这门课好学吗大石桥网站建设公司
  • dede后台做两个网站深圳银行网站建设
  • dedecms 网站标题 设置宿迁558网络专业做网站
  • wordpress 4.9 多站php 网站安装原理
  • 成年男女做羞羞视频网站网站做的好看术语
  • 江西网站开发联系方式wordpress网站换字体
  • 领优惠券的小网站怎么做室内设计师在哪里找
  • 做网站花钱么wordpress 中英双语
  • 杭州网站建设推广公司加盟微信小程序代理
  • 做封面字体下载好的网站html5个人网页完整代码
  • 东莞网站设计流程wordpress给模板添加title