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_ ;
网友评论