1 几个常用成员函数和变量介绍:
1.1 bottom和top
caffe是层与层之间类似搭积木的方式组合起来的。bottom代表上一层的输入,top代表这一层的输出。bottom[0]代表这一层第0个输入,可能活有多个输入,比如在一对多的分类情况中就是可以有多个输入。
1.2 count()
bottom[0]->count()指的是输入维度,如输入shape是(128,512,2,2),则count()返回的是128x512x2x2=262144,第1维度也就是bs=128是不会变的,后面三维对应c,h,w是有可能在传播过程中变化的;bottom[0]->count(1)代表的是从第一维度到最后一维度的长度,也就是512*2*2=cxhxw=2048
1.3 mini_batch和sub_batch_size
bottom[0]->num()返回BS,如输入shape是(128,3,4,5),则BS=128,也就是mini_batch,意义就是经过mini_batch数据更新一次权重。
sub_batch_size: 指的是caffe在定义model.prototxt。也就是每次实际传输的数量.经过iter_size更新一次参数.
iter_size=bottom[0]->num()/sub_batch_size_;
iter_size可以在solver配置中配置,sub_batch_size在peototxt中配置,只有当sub_batch_size没有配置的时候,iter_size的配置才有效。
1.4 set_gpu_data和set_gpu_diff
ip_bottom_.set_gpu_data(bottom_data + batch_ip_offset);//举个例子
caffe中类成员指向的数据空间有2种来源,一种是对象内部自己分配的,一种是外部指定的,为了区别这两种情况,如果是外部指定的需要调用set_cpu_data和set_gpu_data函数,这样把指针指向外部数据的空间,这样方便明确谁分配谁释放;这里是ip_bottom_的对象成员data_指向了外部的地址bottom_data + batch_ip_offset,详细的看blob.hpp
微信扫一扫下面的二维码,学习更多相关知识: