< NCNN-Lession-2 > Net/Layer/Blob
开始
今天我们开始第二课,也就是Net/Layer/Blob的讲解.
![](ncnn-lession-2/lession_2.png)Net/Layer/Blob这三个类是组成网络的基础.我们今天就学习和实现一下它们的基础功能.
作用
我们来分别说明它们三个类的作用.
Net类是共外部调用的一个类,它提供了两个重要的外部调用接口:
- load_param()
- load_model()
这两个接口可以调用用户自己网络的结构和权重信息,不过这个不是我们今天的重点.
Layer这个类包含了网络层的信息,比如层的名字(name), 类型(type)信息等等.
同时它是一个父类,它的子类包含了具体的网络层实现,比如convolution, relu等等.
Blob这个类比较简单,它主要包含了网络每一个blob的名字(name),产生该blob的层id(producer),使用该blob的层的id(consumers).
实现
关于Net的实现,我们先看图
我们今天主要讲它包含的两个变量:
- layers
- blobs
layers是一个包含了所有layer*的vector数组,它存放了所有layer的信.blobs是一个包含了所有blob的数组,它存放了所有blob的信息,关于blob我们下面会讲到.
关于layer的实现,我们先看图
它包含了4个重要的变量
- type
- name
- bottoms
- tops
这四个变量分别是layer的类型(type),名字(name),输入blob的id(bottoms), 输出blob的id(tops).
之所以要在Layer后面加上Father, 是因为它是具体子Layer实现类的父类,而这些具体的Layer实现类我们后面再做介绍.
关于blob的实现,我们先看图
它包含了3个重要变量
- name
- producer
- consumers
name当然是该blob的名字.
producer是一个int类型的变量,它存放着产生该blob的layer_id.
consumers 是一个vector容器,里面存放着需要该blob作为输入的层的id,也就是字面意思的需要“消费”该blob的layer_id,因为可能不止一个层需要用到该blob作为输入,所以这个layer_id可能有多个,它需要一个容器来保存.
代码示例
关于Net/Layer/Blob的测试程序在这里 .代码结构如下:
代码中主要把Net/Layer/Blob的构造函数测试了一下.
< NCNN-Lession-2 > Net/Layer/Blob