net.cpp (init)

本文深入探讨了Caffe网络(包括训练网络和测试网络)的内部结构,详细解释了其成员变量及其作用,并阐述了初始化过程的细节。通过理解Caffe网络的基本构成,读者能够更好地掌握如何构建和配置有效的深度学习模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(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


我在ardupilot/library中新添加了两个文件,编译到最后出现报错usr/bin/ld: lib/libArduPlane_libs.a(AP_CANManager.cpp.0.o): in function `AP_CANManager::init()': AP_CANManager.cpp:(.text._ZN13AP_CANManager4initEv+0x556): undefined reference to `AP_ToshibaCAN::AP_ToshibaCAN()' collect2: error: ld returned 1 exit status Waf: Leaving directory `/home/hjhj3/ardupilot/build/sitl' Build failed -> task in 'bin/arduplane' failed (exit status 1): {task 127115774264480: cxxprogram AP_Arming.cpp.53.o,AP_ExternalControl_Plane.cpp.53.o,Attitude.cpp.53.o,GCS_MAVLink_Plane.cpp.53.o,GCS_Plane.cpp.53.o,Log.cpp.53.o,Parameters.cpp.53.o,Plane.cpp.53.o,RC_Channel_Plane.cpp.53.o,VTOL_Assist.cpp.53.o,afs_plane.cpp.53.o,altitude.cpp.53.o,avoidance_adsb.cpp.53.o,commands.cpp.53.o,commands_logic.cpp.53.o,control_modes.cpp.53.o,ekf_check.cpp.53.o,events.cpp.53.o,failsafe.cpp.53.o,fence.cpp.53.o,is_flying.cpp.53.o,mode.cpp.53.o,mode_LoiterAltQLand.cpp.53.o,mode_acro.cpp.53.o,mode_auto.cpp.53.o,mode_autoland.cpp.53.o,mode_autotune.cpp.53.o,mode_avoidADSB.cpp.53.o,mode_circle.cpp.53.o,mode_cruise.cpp.53.o,mode_fbwa.cpp.53.o,mode_fbwb.cpp.53.o,mode_guided.cpp.53.o,mode_loiter.cpp.53.o,mode_manual.cpp.53.o,mode_qacro.cpp.53.o,mode_qautotune.cpp.53.o,mode_qhover.cpp.53.o,mode_qland.cpp.53.o,mode_qloiter.cpp.53.o,mode_qrtl.cpp.53.o,mode_qstabilize.cpp.53.o,mode_rtl.cpp.53.o,mode_stabilize.cpp.53.o,mode_takeoff.cpp.53.o,mode_thermal.cpp.53.o,mode_training.cpp.53.o,motor_test.cpp.53.o,navigation.cpp.53.o,parachute.cpp.53.o,pullup.cpp.53.o,qautotune.cpp.53.o,quadplane.cpp.53.o,radio.cpp.53.o,reverse_thrust.cpp.53.o,sensors.cpp.53.o,servos.cpp.53.o,soaring.cpp.53.o,system.cpp.53.o,tailsitter.cpp.53.o,takeoff.cpp.53.o,tiltrotor.cpp.53.o,tuning.cpp.53.o -> arduplane} (run with -v to display more information)
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值