【框架caffe】4:net.hpp/net.cpp——caffe将layer层派生出层类组合成网络

0.net简介

Net:是网络的搭建,将Layer所派生出层类组合成网络。Net用容器的形式将多个Layer有序地放在一起,其自身实现的功能主要是对逐层Layer进行初始化,以及提供Update( )的接口(更新网络参数),本身不能对参数进行有效地学习过程。
Net也有它自己的Forward()和Backward(),他们是对整个网络的前向和反向传导,各调用一次就可以计算出网络的loss了。
Net由一系列的Layer组成(无回路有向图DAG),Layer之间的连接由一个文本文件描述。模型初始化Net::Init()会产生blob和layer并调用Layer::SetUp。在此过程中Net会报告初始化进程。这里的初始化与设备无关,在初始化之后通过Caffe::set_mode()设置Caffe::mode()来选择运行平台CPU或GPU,结果是相同的。

1.net.hpp

包含的头文件

#include "caffe/blob.hpp"
#include "caffe/common.hpp"
#include "caffe/layer.hpp"
#include "caffe/proto/caffe.pb.h"

定义的函数及功能

Init()              初始化函数,用于创建blobs和layers,用于调用layers的setup函数来初始化layers。
ForwardPrefilled()  用于前馈预先填满,即预先进行一次前馈。
Forward()           把网络输入层的blob读到net_input_blobs_,然后进行前馈,计算出loss。Forward的重载,只是输入层的blob以string的格式传入。
Backward()          对整个网络进行反向传播。
Reshape()           用于改变每层的尺寸。
Update()            更新params_中blob的值。
ShareTrainedLayersWith(Net* other)      从Other网络复制某些层 。
CopyTrainedLayersFrom()                 调用FromProto函数把源层的blob赋给目标层的blob。
ToProto()                               把网络的参数存入prototxt中。
bottom_vecs_                            存每一层的输入blob指针
bottom_id_vecs_                         存每一层输入(bottom)的id
top_vecs_                               存每一层输出(top)的blob
params_lr()和params_weight_decay()      学习速率和权重衰减;
blob_by_name()                          判断是否存在名字为blob_name的blob;
FilterNet()                             给定当前phase/level/stage,移除指定层。
StateMeetsRule()                        net的state是否满足NetStaterule。
AppendTop()                             在网络中附加新的输入或top的blob。
AppendBottom()                          在网络中附加新的输入或bottom的blob。
AppendParam()                           在网络中附加新的参数blob。
GetLearningRateAndWeightDecay()         收集学习速率和权重衰减,即更新params_、params_lr_和params_weight_decay_ ;

2.net.cpp

net.cpp详解

你可能感兴趣的:(【框架caffe】4:net.hpp/net.cpp——caffe将layer层派生出层类组合成网络)