caffe知识扫盲
- 格式:doc
- 大小:124.50 KB
- 文档页数:6
读书笔记1 CIFAR-10在caffe上进行训练与学习2014.7.21薛开宇本次学习笔记作用,知道如何在caffe上训练与学习,如何看结果。
1.1使用数据库:CIFAR-1060000张32X32 彩色图像10类50000张训练10000张测试1.2准备在终端运行以下指令:cd $CAFFE_ROOT/data/cifar10./get_cifar10.shcd $CAFFE_ROOT/examples/cifar10./create_cifar10.sh其中CAFFE_ROOT是caffe-master在你机子的地址运行之后,将会在examples中出现数据库文件./cifar10-leveldb和数据库图像均值二进制文件./mean.binaryproto1.3模型该CNN由卷积层,POOLing层,非线性变换层,在顶端的局部对比归一化线性分类器组成。
该模型的定义在CAFFE_ROOT/examples/cifar10 directory’s cifar10_quick_train.prototxt中,可以进行修改。
其实后缀为prototxt很多都是用来修改配置的。
1.4训练和测试训练这个模型非常简单,当我们写好参数设置的文件cifar10_quick_solver.prototxt和定义的文件cifar10_quick_train.prototxt和cifar10_quick_test.prototxt后,运行train_quick.sh或者在终端输入下面的命令:cd $CAFFE_ROOT/examples/cifar10./train_quick.sh即可,train_quick.sh是一个简单的脚本,会把执行的信息显示出来,培训的工具是train_net.bin,cifar10_quick_solver.prototxt作为参数。
然后出现类似以下的信息:I0317 21:52:48.945710 2008298256 net.cpp:74] Creating Layer conv1I0317 21:52:48.945716 2008298256 net.cpp:84] conv1 <- dataI0317 21:52:48.945725 2008298256 net.cpp:110] conv1 -> conv1I0317 21:52:49.298691 2008298256 net.cpp:125] Top shape: 100 32 32 32 (3276800)I0317 21:52:49.298719 2008298256 net.cpp:151] conv1 needs backward computation.这是搭建模型的相关信息接着:0317 21:52:49.309370 2008298256 net.cpp:166] Network initialization done.I0317 21:52:49.309376 2008298256 net.cpp:167] Memory required for Data 23790808I0317 21:52:49.309422 2008298256 solver.cpp:36] Solver scaffolding done.I0317 21:52:49.309447 2008298256 solver.cpp:47] Solving CIFAR10_quick_train之后,训练开始I0317 21:53:12.179772 2008298256 solver.cpp:208] Iteration 100, lr = 0.001I0317 21:53:12.185698 2008298256 solver.cpp:65] Iteration 100, loss = 1.73643...I0317 21:54:41.150030 2008298256 solver.cpp:87] Iteration 500, Testing netI0317 21:54:47.129461 2008298256 solver.cpp:114] Test score #0: 0.5504I0317 21:54:47.129500 2008298256 solver.cpp:114] Test score #1: 1.27805其中每100次迭代次数显示一次训练时lr(learning rate),和loss(训练损失函数),每500次测试一次,输出score 0(准确率)和score 1(测试损失函数)当5000次迭代之后,正确率约为75%,模型的参数存储在二进制protobuf格式在cifar10_quick_iter_5000然后,这个模型就可以用来运行在新数据上了。
下面这个复制于一片知乎首先应该了解下几个大的类,比如blob,net,layer,solver,然后看怎么从proto文件中初始化创建网络,blob, layer, net这几层关系中数据是如何传递的。
至于不同的layer,用到那种layer的时候再看就ok。
1. 初识Caffe1.1. Caffe相对与其他DL框架的优点和缺点:优点:∙速度快。
Google Protocol Buffer数据标准为Caffe提升了效率。
∙学术论文采用此模型较多。
不确定是不是最多,但接触到的不少论文都与Caffe有关(R-CNN,DSN,最近还有人用Caffe实现LSTM)缺点:∙曾更新过重要函数接口。
有人反映,偶尔会出现接口变换的情况,自己很久前写的代码可能过了一段时间就不能和新版本很好地兼容了。
(现在更新速度放缓,接口逐步趋于稳定,感谢评论区王峰的建议)∙对于某些研究方向来说的人并不适合。
这个需要对Caffe的结构有一定了解,(后面提到)。
1.2. Caffe代码层次。
回答里面有人说熟悉Blob,Layer,Net,Solver这样的几大类,我比较赞同。
我基本是从这个顺序开始学习的,这四个类复杂性从低到高,贯穿了整个Caffe。
把他们分为三个层次介绍。
∙Blob:是基础的数据结构,是用来保存学习到的参数以及网络传输过程中产生数据的类。
∙Layer:是网络的基本单元,由此派生出了各种层类。
修改这部分的人主要是研究特征表达方向的。
∙Net:是网络的搭建,将Layer所派生出层类组合成网络。
Solver:是Net的求解,修改这部分人主要会是研究DL求解方向的。
==============================================================2. Caffe进阶2.1. Blob:Caffe支持CUDA,在数据级别上也做了一些优化,这部分最重要的是知道它主要是对protocol buffer所定义的数据结构的继承,Caffe也因此可以在尽可能小的内存占用下获得很高的效率。
[Caffe]:关于caffe新手入门Caffe的几个重要文件用了这么久Caffe都没好好写过一篇新手入门的博客,最近应实验室小师妹要求,打算写一篇简单、快熟入门的科普文。
利用Caffe进行深度神经网络训练第一步需要搞懂几个重要文件:1.solver.prototxt2.train_val.prototxt3.train.sh接下来我们按顺序一个个说明。
solver.prototxtsolver这个文件主要存放模型训练所用到的一些超参数:•net := 指定待训练模型结构文件,即train_val.prototxt•test_interval := 测试间隔,即每隔多少次迭代进行一次测试•test_initialization := 指定是否进行初始测试,即模型未进行训练时的测试•test_iteration := 指定测试时进行的迭代次数•base_lr := 指定基本学习率•lr_policy := 学习率变更策略,这里有介绍,可供参考•gamma := 学习率变更策略需要用到的参数•power := 同上•stepsize := 学习率变更策略Step的变更步长(固定步长)•stepvalue := 学习率变更策略Multistep的变更步长(可变步长)•max_iter := 模型训练的最大迭代次数•momentum := 动量,这是优化策略(Adam, SGD, … )用到的参数•momentum2 := 优化策略Adam用到的参数•weight_decay := 权重衰减率•clip_gradients := 固定梯度范围•display := 每隔几次迭代显示一次结果•snapshot := 快照,每隔几次保存一次模型参数•snapshot_prefix := 保存模型文件的前缀,可以是路径•type := solver优化策略,即SGD、Adam、AdaGRAD、RMSProp、NESTROVE、ADADELTA等•solver_mode := 指定训练模式,即GPU/CPU•debug_info := 指定是否打印调试信息,这里有对启用该功能的输出作介绍•device_id := 指定设备号(使用GPU模式),默认为0用户根据自己的情况进行相应设置,黑体参数为必须指定的,其余参数为可选(根据情况选择)。
Caffe深⼊分析(源码)Caffe的整体流程图:程序⼊⼝:main()1int main(int argc, char** argv) {2 .....3return GetBrewFunction(caffe::string(argv[1]))();4 ....5 }g_brew_map实现过程,⾸先通过 typedef定义函数指针 typedef int (*BrewFunction)(); 这个是⽤typedef定义函数指针⽅法。
这个程序定义⼀个BrewFunction函数指针类型,在caffe.cpp 中 BrewFunction 作为GetBrewFunction()函数的返回类型,可以是train(),test(),device_query(),time() 这四个函数指针的其中⼀个。
在train(),test(),中可以调⽤solver类的函数,从⽽进⼊到net,进⼊到每⼀层,运⾏整个caffe程序。
然后对每个函数注册。
1 RegisterBrewFunction(train)2 RegisterBrewFunction(test)3 RegisterBrewFunction(device_query)4 RegisterBrewFunction(time)train: 训练或者调整⼀个模型test : 在测试集上测试⼀个模型device_query : 打印GPU的调试信息time: 压测⼀个模型的执⾏时间如果需要,可以增加其他的⽅式,然后通过RegisterBrewFunction()函数注册⼀下即可。
接着调⽤train()函数,train函数中主要有三个⽅法ReadSolverParamsFromTextFileOrDie、CreateSolver、Solve。
1// Train / Finetune a model.2int train() {3 ......4 caffe::SolverParameter solver_param;5 caffe::ReadSolverParamsFromTextFileOrDie(FLAGS_solver, &solver_param);//从-solver参数读取solver_param6 ......7 shared_ptr<caffe::Solver<float> >8 solver(caffe::SolverRegistry<float>::CreateSolver(solver_param));//从参数创建solver,同样采⽤string到函数指针的映射实现,⽤到了⼯⼚模式910if (FLAGS_snapshot.size()) {//迭代snapshot次后保存模型⼀次11 LOG(INFO) << "Resuming from " << FLAGS_snapshot;12 solver->Restore(FLAGS_snapshot.c_str());13 } else if (FLAGS_weights.size()) {//若采⽤finetuning,则拷贝weight到指定模型14 CopyLayers(solver.get(), FLAGS_weights);15 }1617if (gpus.size() > 1) {18 caffe::P2PSync<float> sync(solver, NULL, solver->param());19 sync.Run(gpus);20 } else {21 LOG(INFO) << "Starting Optimization";22 solver->Solve();//开始训练⽹络23 }24 LOG(INFO) << "Optimization Done.";25return0;26 }ReadSolverParamsFromTextFileOrDiecaffe::ReadSolverParamsFromTextFileOrDie(FLAGS_solver, &solver_param)解析-solver指定的solver.prototxt的⽂件内容到solver_param 中CreateSolverCreateSolver函数构建solver和net,该函数是初始化的⼊⼝,会通过执⾏Solver的构造函数,调⽤ void Solver<Dtype>::Init(const SolverParameter& param),该函数内有InitTrainNet()、InitTestNets()。
世界最全的咖啡知识(完整版)“咖啡”一词起源于意大利“caffe”,在意大利文和其他许多古代语言中,“Caffe”意指饮用未经冲泡的浓浆,这种文化在两千多年前开始流传,但实际上,最早有关咖啡的叙述可以追溯到9世纪的年代,其中记载着一种被称为“Kefo-kefo”的浓浆。
咖啡最初是由阿拉伯人发明的,他们称其为“coffee”,因其神奇的能量而受到热捧,随后于1700年的法国和1800年的美国引入,逐渐普及于世界各地,成为每个人享受的必备饮料。
咖啡知识涉及咖啡树、咖啡品种、烘焙、冲泡、杯子、杯型、装饰等众多方面。
咖啡树:咖啡树实际上是一种大豆类植物。
古希腊人后来称其为“Coffea”,而在意大利语中,更是将其称为“caffe”,也就是咖啡的名字来源。
现在,各种咖啡树多如牛毛,他们分布在热带、亚热带和温带植物群落。
咖啡品种:目前已有上百种咖啡品种问世,它们种植在热带到温带地区,阿拉比卡、坦桑尼亚、非洲、拉丁美洲等国家对咖啡品种很熟悉。
其中,有些咖啡品种为全咖啡,如阿拉比卡全咖啡、活力全咖啡、马尔济斯全咖啡等;有些则是装饰咖啡,比如小米咖啡、玫瑰花咖啡等;此外还有许多古典咖啡,像卡布奇诺、玛格丽塔、摩卡、拿铁等。
烘焙:烘焙是指将咖啡豆煮熟后,干燥后通过二次烘烤而制成烘焙咖啡,它包含有深焙和浅焙两种。
深焙就是将咖啡豆内部熟度调到最大,使其口感更醇厚,几乎没有苦涩气味;而浅焙的咖啡口感则比较柔和,一般富含浓浆的香气。
冲泡:冲泡指的是将烘焙好的咖啡豆碎成粉末后,放入杯中,用适宜温度的水冲泡而得到的浓咖啡,它的颜色、口感以及浓度都是说明其质量的指标。
杯子:杯子不仅能提升咖啡的口感,与杯型也有着紧密的关系,比如慕诗杯、玻璃杯、拉法尔杯等,都是不可或缺的两款咖啡杯。
杯型:咖啡杯型有着特殊的用途,可以帮助你一次欣赏多种咖啡,比如拿铁、卡布奇诺、拉丝等,可以根据自己的口味去选择不同的咖啡杯型。
装饰:装饰是一种让你咖啡更美味的装饰技巧,可以将咖啡中添加特别的香料、点缀巧克力、撒上一层芝士碎片等,就能让咖啡变得不一样。
caffe框架相关知识-caffe这是每个行数索引相对于kernel的行和列位置然后对所有的目标的数据(卷积后的)位置,得到很显然,h_pad是卷积后h所对应的卷积前的c参数链接位置。
然后把数据通过最后两行复制过去。
通过这很明显看到im2col_cpu()干了什么事情。
这个操作是为了方便计算卷积操作的,假设原数据是channels*height*width。
卷积之后成了(channels*kernel_h*kernel_w)x(height_col*wight_col)。
我们知道卷积操作有channels*kernel_h*kernel_w参数,代表kernel的weight,一共有channle个kernel。
每个kernel的一个位置和(height_col*wight_col)有边相连。
这样的话计算卷积的话,只需要算个矩阵乘法。
滴啊用cblas的矩阵乘法运算函数定义为:void cblas_sgemm(const enum CBLAS_ORDER Order, const enumCBLAS_TRANSPOSE TransA,const enum CBLAS_TRANSPOSE TransB, const int M, const int N,const int K, const float alpha, const float *A,const int lda, const float *B, const int ldb,const float beta, float *C, const int ldc)得到的结果是:C = alpha*op( A )*op( B ) + beta*Cconst enum CBLAS_ORDER Order,这是指的数据的存储形式,在CBLAS的函数中无论一维还是二维数据都是用一维数组存储,这就要涉及是行主序还是列主序,在C语言中数组是用行主序,fortran中是列主序。
(完整版)Caffe深度学习框架上手教程编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整版)Caffe深度学习框架上手教程)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整版)Caffe深度学习框架上手教程的全部内容。
(完整版)Caffe深度学习框架上手教程编辑整理:张嬗雒老师尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布到文库,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是我们任然希望(完整版)Caffe深度学习框架上手教程这篇文档能够给您的工作和学习带来便利。
同时我们也真诚的希望收到您的建议和反馈到下面的留言区,这将是我们进步的源泉,前进的动力.本文可编辑可修改,如果觉得对您有帮助请下载收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为 <(完整版)Caffe深度学习框架上手教程> 这篇文档的全部内容。
Caffe 深度学习框架上手教程UC BerkeleyGoogle工作。
Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU直接无缝切换:Caffe::set_mode(Caffe::GPU);Caffe的优势1.上手快:模型与相应优化都是以文本形式而非代码形式给出。
Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。
2.速度快:能够运行最棒的模型与海量的数据。
Caffe与cuDNN结合使用,测试AlexNet模型,在K40上处理每张图片只需要1.17ms。
3.模块化:方便扩展到新的任务和设置上。
一.数据层及参数要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等,而一个模型由多个屋(layer)构成,每一屋又由许多参数组成。
所有的参数都定义在caffe.proto这个文件中。
要熟练使用caffe,最重要的就是学会配置文件(prototxt)的编写。
层有很多种类型,比如Data,Convolution,Pooling等,层之间的数据流动是以Blobs的方式进行。
今天我们就先介绍一下数据层.数据层是每个模型的最底层,是模型的入口,不仅提供数据的输入,也提供数据从Blobs 转换成别的格式进行保存输出。
通常数据的预处理(如减去均值, 放大缩小, 裁剪和镜像等),也在这一层设置参数实现。
数据来源可以来自高效的数据库(如LevelDB和LMDB),也可以直接来自于内存。
如果不是很注重效率的话,数据也可来自磁盘的hdf5文件和图片格式文件。
所有的数据层的都具有的公用参数:先看示例layer {name: "cifar"type: "Data"top: "data"top: "label"include {phase: TRAIN}transform_param {mean_file: "examples/cifar10/mean.binaryproto"}data_param {source: "examples/cifar10/cifar10_train_lmdb"batch_size: 100backend: LMDB}}name: 表示该层的名称,可随意取type: 层类型,如果是Data,表示数据来源于LevelDB或LMDB。
根据数据的来源不同,数据层的类型也不同(后面会详细阐述)。
一般在练习的时候,我们都是采用的LevelDB或LMDB数据,因此层类型设置为Data。
咖啡厅服务员培训资料咖啡知识普及(送给所有爱喝咖啡的朋友) (2011-05-19 09:04:44)转载标签:意大利gb2312宋体楷体卡布奇诺美食相信大家都有喝咖啡的习惯吧~特别是温暖的午后喝着咖啡更有一种惬意的感觉,那大家对咖啡又有多了解呢,接下来为大家收集了咖啡品种的普及知道,真的值得一看,肯定会对你有帮助的~开始扫盲了哦,一起看看吧~拿铁咖啡(Caffe Latte)拿铁是最为国人熟悉的意式咖啡品项,它是在沉厚浓郁的Espresso中加进等比例,甚至更多牛奶的花式咖啡。
有了牛奶的温润调味,让原本甘苦的咖啡变得柔滑香甜,甘美浓郁,就连不习惯喝咖啡的人,也难敌拿铁芳美的滋味。
和卡布奇诺一样,拿铁因为含有多量的牛奶而适合在早晨饮用。
意大利人也喜欢拿它来暖胃,搭配早餐用。
意大利人早晨的厨房里,照得到阳光的炉子上通常会同时煮着咖啡和牛奶。
喝拿铁的意大利人,与其说他们喜欢意大利浓缩咖啡,不如说他们喜欢牛奶,也只有Espresso才能给普普通通的牛奶带来让人难以忘怀的味道。
【意大利式拿铁咖啡】需要一小杯Espresso和一杯牛奶(150,200毫升),拿铁咖啡中牛奶多而咖啡少,这与Cappuccino有很大不同。
拿铁咖啡做法极其简单,就是在刚刚做好的意大利浓缩咖啡中倒入接近沸腾的牛奶。
事实上,加入多少牛奶没有一定之规,可依个人口味自由调配。
如果在热牛奶上再加上一些打成泡沫的冷牛奶,就成了一杯【美式拿铁咖啡】。
星巴克的美式拿铁就是用这种方法制成的,底部是意大利浓缩咖啡,中间是加热到65,75?的牛奶,最后是一层不超过半厘米的冷的牛奶泡沫。
欧蕾咖啡(Café Au Lait)法国人是欧蕾咖啡最热情的拥护者,你在法国入的早餐桌上会看到肚子圆圆的欧蕾杯,里面盛的是他们一天好心情的源泉。
有趣的是,比较所有的咖啡杯,可能法国人用来盛欧蕾咖啡的杯子是最大号的。
欧蕾咖啡的做法也很简单,就是把一杯意大利浓缩咖啡和一大杯热热的牛奶同时倒入一个大杯子,最后在液体表面放两勺打成泡沫的奶油。
深度学习开源工具——caffe介绍_光环大数据培训简介报告时间是北京时间 12月14日凌晨一点到两点,主讲人是 Caffe 团队的核心之一 Evan Shelhamer。
第一次用 GoToMeeting 参加视频会议,效果真是不错。
报告后分享出了视频和展示文件。
另一讲座,cuDNN: Accelerating Convolutional Neural Networks using GPUs,视频和展示文件也已放出。
Caffe 此前听过没用过,所以报告前自己试运行了一下,参照官方教程。
Caffe 安装、上手都很快,Protobuf 式的层定义很直观,模型修改或算法调整变得很容易,相当于只需要改配置文件。
还找到了他们放在 Google Docs 上一个教程 PPT,DIY Deep Learning for Vision: a Hands-On Tutorial with Caffe (已搬到墙里),后来发现这次报告的 PPT 就是在这个基础上修改的。
本次报告主要内容是对机器学习、深度学习的一些介绍,包括若干深度学习的经典模型;Caffe 的优势(模块化、速度、社区支持等)、基本结构(网络定义、层定义、Blob等)和用法(模型中损失函数、优化方法、共享权重等的配置、应用举例、参数调优的技巧),以及未来方向(CPU/GPU 并行化、Pythonification、Fully Convolutional Networks等)。
以下是报告中的截图配上自己的一点笔记,一手资料请参见上面给出的会后分享链接。
要点记录PPT 的首页取自该项目的一个在线 demo,输入图片 url,识别物体类别。
左边是浅层特征,各类别物体杂乱无章;右边是深度特征,一些类别有较为明显的分别。
特别地,dog、bird、invertebrate 这三类动物类别离得较近,而building、vehicle、commodity 这类无生命类别离得较近,可见深度特征的强大。
常见咖啡扫盲班~
偶不是咖啡爱好者。
但每一次,与朋友在优雅的咖啡店里坐下,面对种类繁多看不懂的菜单,真不知道该选哪一种咖啡。
现在好啦,图片配文字解说扫盲了!
最近,我发现Lokesh Dhakar画过一张《咖啡饮料种类图》,解释了九种咖啡饮料的区别,简明易懂。
一、浓缩咖啡/意大利咖啡/浓咖啡/Espresso
受压的蒸气直接通过咖啡粉,得到的液体就叫浓缩咖啡。
它属于纯粹的咖啡,也是其他咖啡饮料的基底。
二、美式咖啡/清咖啡/Americano
1份浓缩咖啡+2份水
三、白咖啡/Flat White
1份浓缩咖啡+1.5份热牛奶
四、玛琪雅朵/玛奇朵/Macchiato
1份浓缩咖啡+0.5份奶泡(牛奶中的脂肪)
五、康宝蓝/康巴纳/Con Panna
1份浓缩咖啡+0.5份鲜奶油
六、拿铁/Latte
1份浓缩咖啡+1.5份热牛奶+0.5份奶泡
七、布列夫/半拿铁/Breve
1份浓缩咖啡+0.75份热牛奶+0.75份鲜奶油+0.5份奶泡
八、卡布奇诺/Cappuccino
1份浓缩咖啡+0.5份热牛奶+1.5份奶泡
九、摩卡/Mocha
1份浓缩咖+1份热牛奶+0.5份巧克力酱+0.5份鲜奶油。