caffe中的filler.hpp源码的作用:

时间:2023-12-29 19:24:38

filler.hpp文件:(它应该没有对应的.cpp文件,一切实现都是在头文件中定义的,可能是因为filler只分在网络初始化时用到那么一次吧)

1,首先定义了基类:Filler,它包括:一个纯虚函数:filler(用于在子类里根据不同的情况具体实现)

一个数据:filler_param_(类型为FillerParameter,这是在proto里定义的)

2 定义具体子类继承的实现:共有7种请况(这是用来给权值初始化的7种方法 ):

constant

gaussian

positive_unitball

uniform

xavier

msra

bilinear

然后,子类的具体实现的函数为:filler(参数为:blob块),它干了什么事呢??

根据 filler_param_ 的参数把传入的blob块里的数据(mutable_cpu_data()) 按照指定的方法(7种方法之一)分别赋值;

3, 定义一个 GetFiller 的函数:GetFiller(传入参数为:FillerParameter类型的数据),返回为:上面7种子类实现的一个指针;

它干了一个什么事呢?就是根据传入的fillerparameter中的选定的type类型(即权值赋值的方法),然后返回一个对应的方法实现一个指针。(这里就是用指针来实现C++强大的多态),现在呢,我们就可以用返回的地址来实现具体操作了。

(对于具体细节可以看一下源码)