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

谁有wap网站济南泰安网站建设公司

谁有wap网站,济南泰安网站建设公司,3d建模教程,企业为什么要做网站建设原文链接#xff1a;https://www.zhihu.com/question/27982282 1.Caffe代码层次。回答里面有人说熟悉Blob#xff0c;Layer#xff0c;Net#xff0c;Solver这样的几大类#xff0c;我比较赞同。我基本是从这个顺序开始学习的#xff0c;这四个类复杂性从低到高#xff…原文链接https://www.zhihu.com/question/27982282 1.Caffe代码层次。回答里面有人说熟悉BlobLayerNetSolver这样的几大类我比较赞同。我基本是从这个顺序开始学习的这四个类复杂性从低到高贯穿了整个Caffe。把他们分为三个层次介绍。 Blob作为数据传输的媒介无论是网络权重参数还是输入数据都是转化为Blob数据结构来存储Layer作为网络的基础单元神经网络中层与层间的数据节点、前后传递都在该数据结构中被实现层类种类丰富比如常用的卷积层、全连接层、pooling层等等大大地增加了网络的多样性Net作为网络的整体骨架决定了网络中的层次数目以及各个层的类别等信息Solver作为网络的求解策略涉及到求解优化问题的策略选择以及参数确定方面修改这个模块的话一般都会是研究DL的优化求解的方向。 1. Blob1.1. Blob的类型描述Caffe内部采用的数据类型主要是对protocol buffer所定义的数据结构的继承因此可以在尽可能小的内存占用下获得很高的效率虽然追求性能的同时Caffe也会牺牲了一些代码可读性。直观来说可以把Blob看成一个有4维的结构体包含数据和梯度而实际上它们只是一维的指针而已其4维结构通过shape属性得以计算出来。1.2. Blob的重要成员函数和变量 shared_ptrSyncedMemory data_ //数据 shared_ptrSyncedMemory diff_ //梯度void BlobDtype::Reshape(const int num, const int channels, const int height, const int width)重新修改Blob的形状(4维)并根据形状来申请动态内存存储数据和梯度。 inline int count(int start_axis, int end_axis) const计算Blob所需要的基本数据单元的数量。 在更高一级的Layer中Blob用下面的形式表示学习到的参数 vectorshared_ptrBlobDtype blobs_; 这里使用的是一个Blob的容器是因为某些Layer包含多组学习参数比如多个卷积核的卷积层。以及Layer所传递的数据形式后面还会涉及到这里 vectorBlobDtype* bottom; vectorBlobDtype* *top 2.2. Layer2.2.1. 5大Layer派生类型Caffe十分强调网络的层次性也就是说卷积操作非线性变换ReLU等Pooling权值连接等全部都由某一种Layer来表示。具体来说分为5大类LayerNeuronLayer类 定义于neuron_layers.hpp中其派生类主要是元素级别的运算比如Dropout运算激活函数ReLuSigmoid等运算均为同址计算in-place computation返回值覆盖原值而占用新的内存。LossLayer类 定义于loss_layers.hpp中其派生类会产生loss只有这些层能够产生loss。数据层 定义于data_layer.hpp中作为网络的最底层主要实现数据格式的转换。特征表达层我自己分的类定义于vision_layers.hpp为什么叫vision这个名字我目前还不清楚实现特征表达功能更具体地说包含卷积操作Pooling操作他们基本都会产生新的内存占用Pooling相对较小。网络连接层和激活函数我自己分的类定义于common_layers.hppCaffe提供了单个层与多个层的连接并在这个头文件中声明。这里还包括了常用的全连接层InnerProductLayer类。2.2.2. Layer的重要成员函数在Layer内部数据主要有两种传递方式正向传导Forward和反向传导Backward。Forward和Backward有CPU和GPU部分有两种实现。Caffe中所有的Layer都要用这两种方法传递数据。 virtual void Forward(const vectorBlobDtype* bottom, vectorBlobDtype* *top) 0; virtual void Backward(const vectorBlobDtype* top, const vectorbool propagate_down, vectorBlobDtype* *bottom) 0; Layer类派生出来的层类通过这实现这两个虚函数产生了各式各样功能的层类。Forward是从根据bottom计算top的过程Backward则相反根据top计算bottom。注意这里为什么用了一个包含Blob的容器vector对于大多数Layer来说输入和输出都各连接只有一个Layer然而对于某些Layer存在一对多的情况比如LossLayer和某些连接层。在网路结构定义文件*.proto中每一层的参数bottom和top数目就决定了vector中元素数目。 layers {bottom: decode1neuron // 该层底下连接的第一个Layer bottom: flatdata // 该层底下连接的第二个Layer top: l2_error // 该层顶上连接的一个Layer name: loss // 该层的名字 type: EUCLIDEAN_LOSS // 该层的类型 loss_weight: 0 } 2.2.3. Layer的重要成员变量loss vectorDtype loss_; 每一层又有一个loss_值只不多大多数Layer都是0只有LossLayer才可能产生非0的loss_。计算loss是会把所有层的loss_相加。learnable parameters vectorshared_ptrBlobDtype blobs_; 前面提到过的Layer学习到的参数。 2.3. NetNet用容器的形式将多个Layer有序地放在一起其自身实现的功能主要是对逐层Layer进行初始化以及提供Update( )的接口更新网络参数本身不能对参数进行有效地学习过程。 vectorshared_ptrLayerDtype layers_;同样Net也有它自己的 vectorBlobDtype* Forward(const vectorBlobDtype* bottom, Dtype* loss NULL); void NetDtype::Backward(); 他们是对整个网络的前向和方向传导各调用一次就可以计算出网络的loss了。2.4. Solver这个类中包含一个Net的指针主要是实现了训练模型参数所采用的优化算法它所派生的类就可以对整个网络进行训练了。 shared_ptrNetDtype net_;不同的模型训练方法通过重载函数ComputeUpdateValue( )实现计算update参数的核心功能 virtual void ComputeUpdateValue() 0;最后当进行整个网络训练过程也就是你运行Caffe训练某个模型的时候实际上是在运行caffe.cpp中的train( )函数而这个函数实际上是实例化一个Solver对象初始化后调用了Solver中的Solve( )方法。而这个Solve( )函数主要就是在迭代运行下面这两个函数就是刚才介绍的哪几个函数。 ComputeUpdateValue(); net_-Update(); 至此从底层到顶层对Caffe的主要结构都应该有了大致的概念。为了集中重点介绍Caffe的代码结构文中略去了大量Caffe相关的实现细节和技巧比如Layer和Net的参数如何初始化proto文件的定义基于cblas的卷积等操作的实现cblas实现卷积这一点我的个人主页GanYuFei中的《Caffe学习笔记5-BLAS与boost::thread加速》有介绍等等就不一一列举了。 整体来看Layer部分代码最多也反映出Caffe比较重视丰富网络单元的类型然而由于Caffe的代码结构高度层次化使得某些研究以及应用比如研究类似非逐层连接的神经网络这种复杂的网络连接方式难以在该平台实现。这也就是一开始说的一个不足。 另外Caffe基本数据单元都用Blob使得数据在内存中的存储变得十分高效紧凑从而提升了整体训练能力而同时带来的问题是我们看见的一些可读性上的不便比如forward的参数也是直接用Blob而不是设计一个新类以增强可读性。所以说性能的提升是以可读性为代价的。 最后一点也是最重要的一点我从Caffe学到了很多。第一次看的C项目就看到这么好的代码实在是受益匪浅在这里也感谢作者贾扬清等人的贡献。 Net中有必要认识的几个名字 这里再补充几点 1.使用Linux 的grep指令来快速追踪某个关键字在caffe根目录下输入 grep -n -H -R REGISTER_LAYER_CREATOR(举例)其中-n 显示行号 -H显示文件名 -R递归查找每个子目录     转载于:https://www.cnblogs.com/zf-blog/p/6427624.html
http://www.zqtcl.cn/news/891161/

相关文章:

  • 网站建设响应式是什么医院网站建设方案策划书
  • 开鲁网站seo不用下载男女做羞羞事动画网站免费
  • 做网站客户需求新乡专业做网站多少钱
  • 邢台建设银行官方网站二维码生成器app下载
  • 自己怎么做网站游戏做网站就是做app
  • 怎样做一元购网站wordpress+淘客代码
  • 网站建设发展现状贵阳有哪些做网站的公司
  • 微博上如何做网站推广蝉知和wordpress
  • 泷澄建设集团网站北京建设执业资格注册网站
  • 门户网站建设情况报告深圳龙岗房价多少钱一平方米
  • 网站建设备案是什么ps培训班
  • 深圳网站推广优化wordpress 运行速度慢
  • 谁能给个网站谢谢发布广东建设工程信息网站
  • 网站建设用户需求分析中国加盟网
  • 建设上线网站seo关键词优化软件排名
  • 郑州手工网站建设公司企业做网站好做吗
  • 苏华建设集团网站产品营销网站
  • 郑州专业做网站的网站收录最好的方法
  • 微信小程序网站建设哪家好视频教学网站开发
  • 个人网站排行网站集约化后如何建设
  • 企业网站维护wordpress特效代码
  • 建设银行网站短信错误6次wordpress新主题去版权
  • 国外 配色网站天猫店购买交易平台
  • 网站推广广告词大全集网站和网络建设自查报告
  • 电子商务网站建设备案须知自己做的网站服务器在哪里
  • 怎样用wordpress做网站wordpress 首页判断
  • jsp做的网站效果织梦网站程序模板
  • 展示型网站设计公司网盘wordpress
  • 网站建设 保密学服装设计后悔了
  • 网站建设前端和后端网站开发所遵循的