caffe学习-代码阅读Net

摘录自《深度学习轻松学》冯超
net.cpp包含了主要内容
Net 类的主要功能有两个 : 模型组装和模型计算 。 模型计算通过调用每一个 Layer 的前后向计算就完成了 。 Loss 计算相关的工作都是由 Layer 自己完成的 ,所以 Net 类中这部分代码基本没有加入新的内容 。
layer_factory .hpp : 77] Creating layer conv1
net . cpp:92] Creating Layer conv1
net.cpp :428] conv1 <- data
net . cpp :402] conv1 -> conv1
net.cpp:144] Setting up conv1
net.cpp : 151] Top shape : 64 20 24 24 (737280)
net.cpp : 159] Memory required for data: 3752192
第一行是创建这个 Layer 实例,具体的创建过程在 LayerReg istry 里面。只要提供 Layer 的名字(配置文件中的参数名叫 type ),就可以根据名字和对应参数实例化一个 Layer 类 。第 3 行和第 4 行显示了初始化 conv1 的 bottom 和 top 数据的过程 。 在完成了 Layer的创建后, Net 就要准备好这个 Layer 的输入输出数据, 以便进行 Layer 的初始化。 这里涉及 Net 类中的 AppendBottom 和 AppendTop 两个方法, 由 于这两个方法中主要包含了一些数据结构的存储代码, 比较烦琐且读懂的价值不算太大 , 所以在此不再详细介绍 。 第 5 行代表了 Layer 的 Setup 函数已经调用完成 (或者这个 Layer 和其他 Layer 共享)。 这部分内容在 4.4 节已经介绍过,而第 6 行明确 了 top数据维度后 , 输出 top 数据的维度 。 第 7 行则是统计模型累积到这里时, top 数据消耗的内存容量 。 可以看出截至到这一层 ,内存消耗大约是 3MB 多 ,还不算大。
layer_factory . hpp:77] Creating layer relu1
net . cpp : 92] Creating Layer relu1
net cpp:428] relu1 <- ip1
net . cpp :389] relu1 - > ip1 (in-place)
net.cpp : 144] Setting up r elu1
net.cpp : 151] Top shape: 64 500 (32000)
net.cpp : 159] Memory required for data: 5769472
最不同的就是第 4 行结尾的( in-place ),这说明 relul 这一层的 bottom blob 和 top
blob 是同一个数据
接下来的一段就是共享网络 conv1_p 的日 志了 :
layer_factory . hpp:77] Creating layer conv1_p
net.cpp:92] Creating Layer conv1_p
net . cpp : 428] conv1_p <- data_p
net.cpp:402] conv1_p -> conv1_p
net.cpp:144] Setting up conv1_p
net . cpp:151] Top shape: 64 20 24 24 (737280)
net.cpp : 159] Memory required for data: 8721664
net.cpp:488] Sharing paramaters ’ conv1_w ’ owned by layer ’ conv1 ’, para index 0
net.cpp : 488] Sharing parameters ’ conv1_b ’ owned by layer ’ conv1 ’ , para index 1
这一段最有特点的是最后两行以“Sharing” 开头的日志 。 因为 Siamese Model 中
拥有参数完全相同的两个网络,所以在构建第二个网络时 Caffe 检测到参数名字已经
存在,说明该层的参数和其他层共享,于是它在这里输出日志告诉用户这一点 。 实际
上 , Net 类中还负责了参数相关的一系列初始化, 除了参数共享的设定,还有对参数的learning_rate 、 weight_decay 的设定 。
接下来是模型中最特别的一层: Loss 层 。
[LINE!] net . cpp:92] Creating Layer loss
[LINE2] net . cpp:428] loss <- feat
[LINE3] net.cpp : 428] loss <- feat_p
[LINE4] net cpp:428] loss <- sim
[LINE5] net.cpp : 402] loss -> loss
[LINE6] net . cpp : 144] Setting up loss
[LINE7] net cpp:151] Top shape : (1)
[LINES] net . cpp: 154] with loss weight 1
[LINE9] net .cpp : 159] Memory required for data: 10742020
这一层看上去没有什么特别,该有的和前面一样,唯一不同的就是它的倒数第二行,这一层的 loss_weight 值为 l ,说明它是一个 Loss Layer
Net完成的工作
I. 实例化 Layer 。
2. 创建 bottom blob 、 top blob 。
3. 初始化 Layer ,确定 top blob 维度 。
4 . 确定 Layer 参数的 learning_rate 、 loss_weight 等信息 。
5 . 确定 Layer 的参数是否共享,不共享则创建新的 。
从上面的过程也可以看出, Net 保存了整个网络中所有的流动性变量( bottom blob ,
top blob ),还有各层的参数的指针信息 , 参数的共享关系等信息 。 这样的好处是把网络的数据集中到了一起,对数据进行统一操作时更方便 。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值