【撸码caffe 三】 caffe.cpp】的更多相关文章

caffe.cpp文件完成对网络模型以及模型配置参数的读入和提取,提供了网络模型训练的入口函数train和对模型的测试入口函数test.文件中使用了很多gflags和glog指令,gflags是google的一个开源的处理命令行参数的库,glog是一个有效的日志记录工具. 补充一点CUDA中查询GPU设备属性的知识: CUDA C中的cudaGetDeviceProperties函数可以很方便的获取到设备的信息,caffe.cpp中就使用到了这个函数查询设备信息,函数原型是: cudaError…
caffe中solver的作用就是交替低啊用前向(forward)算法和后向(backward)算法来更新参数,从而最小化loss,实际上就是一种迭代的优化算法. solver.cpp中的Solver提供了执行模型训练的入口,在caffe.cpp中train函数的最后通过 solver->Solve()调用: template <typename Dtype> void Solver<Dtype>::Solve(const char* resume_file) { //检查是…
caffe.cpp中的train函数内声明了一个类型为Solver类的智能指针solver: // Train / Finetune a model. int train() { -- shared_ptr<caffe::Solver<float> > solver(caffe::SolverRegistry<float>::CreateSolver(solver_param)); -- } 之后调用Solver类的构造函数,在构造函数内执行了 Init(param)函…
Blob类是caffe中对处理和传递的实际数据的封装,是caffe中基本的数据存储单元,包括前向传播中的图像数据,反向传播中的梯度数据以及网络层间的中间数据变量(包括权值,偏置等),训练模型的参数等等,可以说在caffe中,无数据不blob. blob可以认为是按C风格连续存储的N维数组,在硬件上可以认为是在内存中的一块连续的内存块. 补充一点智能指针的知识: C++中的动态内存管理是通过new和delete运算符完成的,没有及时delete释放内存或者提前释放内存都可能造成内存异常,导致内存泄…
SyncedMemory类主要负责在主机(CPU)和设备(GPU)之间管理内存分配和数据同步工作,封装了CPU和GPU之间的数据交互操作. 补充一点GPU的相关知识: 对CUDA架构而言,主机端的内存被分为两种,一种是可分页内存(pageable memroy)和页锁定内存(page-lock或 pinned).可分页内存是由操作系统API malloc()在主机上分配的,页锁定内存是由CUDA函数cudaHostAlloc()在主机内存上分配的,页锁定内存的重要属性是主机的操作系统将不会对这块…
首先说明:下面的内容不一定对 类body: 变量:LayerParameter param_ :它里面放的是:body传进来的layerparameter的参数: BlockingQueue<shared_ptr<QueuePair> > new_queue_pairs_:这是一个队列,它里面放的是一个队列对指针, 它的初始化:由传入的layerparameter参数赋值param_变量,并开启一个相应的进程: 它的析构函数:让进程停下来: 开启的这个进程它会干什么呢??用来读数据…
最近打算看一看caffe实现的源码,因为发现好多工作都是基于改动网络来实现自己的的目的.比如变更目标函数以及网络结构,以实现图片风格转化或者达到更好的效果. 深度学习框架 https://mp.weixin.qq.com/s?__biz=MzI1NTE4NTUwOQ==&mid=2650325746&idx=1&sn=378e1adc20bb9f4e388e1bd648707026&chksm=f235a5f8c5422ceee84aa4dff2b5c025397e3a42…
26 BasicUsageEnvironment基本使用环境--Live555源码阅读(三)UsageEnvironment 26 BasicUsageEnvironment基本使用环境--Live555源码阅读(三)UsageEnvironment 简介 以下是其定义 BasicUsageEnvironment的构造与析构 createNew方法(创建对象) getErrno方法 operator<<方法(输出到strerr) 这是Live555源码阅读的第三部分,包括了UsageEnvir…
前言:以前的帐号没有发首页的权限,特此把这篇文章从另外一个博客移过来,这篇是<我和小美的撸码日记>的序 一转眼务农6年了,呆过大公司也去过小作坊,码农的人生除了抠腚还是抠腚.在所有呆过的公司里,感觉项目没有不延期的,真的是因为自己不努力吗?也没有呀!上班不怎么聊QQ回家也很少看动作片,还搞过几次通宵撸码的. 以前总感觉是项目经理把工时估少了,后来自己也做过项目管理,按照以往的经历估工时,做到最后还是会有些延期,要不就是加班拼命赶.我发现在项目中总是会遇到一些这样那样的问题,比如:客户需求变了,…
01-learning-Lenet, 主要讲的是 如何用python写一个Lenet,以及用来对手写体数据进行分类(Mnist).从此教程可以知道如何用python写prototxt,知道如何单步训练网络,以及采用单步训练的方法来获取每一步训练的loss和accuracy,用来绘制曲线图. 其实并没有官方教程一说,只是在caffe/example/下有 00-classification.ipynb: 01-learning-lenet.ipynb: 02-fine-tuning.ipynb:…