net.cpp (init)

(caffe 最近又改版了,关于net 的记录边看边加上来)


net 指 training net 或者 test net  

这个class 定义了包含其中的各个layer, 以及每两个layers之间的 blob

( blob 这个word刚开始怎么都不理解,后来明白是每两个layer之间的数据) 


将要说下net 里的成员变量:

OVERVIEW:  1. net基本,2. layer, 3,总blob, 4, 各个layer的blob,   5, learing rate  


1.  name_

2. net 里的各层,这里会记录实体, 名字,序号,和是否后向

         layers_ (vector<Layer>),   layer_names_(vector<string>),  layer_names_index_(map<string,int>),   layer_need_backward(vector<bool>)

3. net 中的所有 blob, 包括实体,名字,序号, 和是否后向。 

    这个序号的制定顺序是: (1) txt 中的layer, (2) , 每个layer中的 bottom 或者 top

    这里的 blob 算是记录下net 中出现的所有的 blob

          blobs_(vextor(Blob)), blob_names_(vector(string),  blob_names_index_(map<sting,int>),  blob_need_backward_( vector<bool>) 

4.  上面记录了所有的blob, 这里更加详细的指出每个blob 是哪个layer的 bottom or top? 

      这里全部有序号来指定各项,就不需要blob 的名字了。  每个layer 里分 bottom 和 top, 记录bottom or top 的时候,用的是两层嵌套的 vector

      只有botttom 记录是否要 need_backward

         bottom_vecs_( vector<vector<blob>>) , bottom_id_vecs_( vector<vector<int>> ) , bottom_need_backward_ ( vector<vector<bool>> ) 

          top_vecs_( vector<vector<blob>>),  top_id_vecs_( vector<vector<int>>) 

     不是很明白这里为什么不只用id 指定就可以了,记录实体不是重复吗?

5. 记录 learing rate 和 weight_decay

          params_lr_ (vector<float>) ,  params_weight_decay_(vector<float>)

6.  这些我还不知道做什么的

     param_owners,  param_display_names_, param_layer_indices_,  param_names_index_

     net_input_blob_indices_, net_output_blob_indices_, net_input_blobs, net_output_blobs_


Init 过程

1.  (1) 先做 filtered, 把 exclude 排除掉 (include 和 exclude 都事先定义了)。 然后 InsertSplits(), 这个函数还不明白

     (2) 先检查 input_blob, 一般 train 和 test 没有, 在deploy 里有

2.  for ( each layer ) {

           (1)  update layers_ , layer_names_, 

           (2)  事实上先有top, 再有bottom

                  总的来说,在top 中先更新总的blob, 更新top, 再更新bottom


                  AppendBottom 加入这个layer的bottom blob

                          (1) 检查下 available_blob

                          (2)  压入bottom,  bottom_vecs_, bottom_id_vecs

                           (3) 删除 available

                           (4) 更新 bottom_need_backward_ (都是false) 

                  AppendTop 加入layer的top blob

                          (1) 更新总的blob,  blobs_, blob_names_, blob_need_backward_, blob_name_to_idx

                                   blob 的 blob_need_backward 都是false

                          (2) 压入 top,   top_vecs_, top_id_vecs_         

                          (3) 加入  available_blob


            (3) 每个layer 的 Setup(), 建立这个layer的 top和bottom的关系

                   输出 top shape

            (4)  查看是否有 blob_lr  (blob_lr大于0 说明是要need_backward)

                   更新 need_backward

            (5)  share_mode_size 还没看懂

            (6)  压入  layer_need_backward_ , 判断这个layer 要不要更新

                  关于这个layer 的 top 层都要 need_backward             

 }

3.  是否强制 backward

4.  剩下的 blob 被认为是 output blob

5.  GetLearningRateAndWeightDecay()

      检查每一个layer的定义,看有没有 lr 和 weight , 大于0 就说有。  没有定义的,指定为1.0


你可能感兴趣的:(caffe)