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++强大的多态),现在呢,我们就可以用返回的地址来实现具体操作了。
(对于具体细节可以看一下源码)