【ncnn】源码阅读理解(三)——blobs
1. blobs容量如何得来
在ncnn网络初始化参数的时候,有两个vector容器,
std::vector<Blob> blobs;
std::vector<Layer*> layers;
blobs是每个网络层输出的数据容器
这里我们以squeeze模型为例,说明blobs的容量是怎么确定的。
squeezenet blobs的数据容量为83,为红色矩形框的和。
2. layer.bottom 和layer.top
某层网络在前向推理的时候,需要知道从blobs中哪里取数据,然后放到哪里,这里会对每个layer的bottom和top进行赋值
layer->bottoms[i] = bottom_blob_index; // 将这层网络的输入,索引到上一层网络的输入
layer->tops[i] = blob_index;
3. 某层网络的参数不同
通过layer->load_param,从配置文件中读取配置参数。layer是一个指针,指向数据层,卷积层,池化层等。
但是不同层具有不同的参数。这里以输入层和卷积层为例:
// input layer
int Input::load_param(FILE* paramfp)
{int nscan = fscanf(paramfp, "%d %d %d",&size[0], &size[1], &size[2]);if (nscan != 3){fprintf(stderr, "Input load_param failed %d\n", nscan);return -1;}return 0;
}// convolution layer
int Convolution::load_param(FILE* paramfp)
{int nscan = fscanf(paramfp, "%d %d %d %d %d %d %d",&num_output, &kernel_size, &dilation, &stride, &pad, &bias_term, // 读取卷积层的参数,共7个参数,最后一个是参数个数&weight_data_size);if (nscan != 7){fprintf(stderr, "Convolution load_param failed %d\n", nscan);return -1;}return 0;
}
【ncnn】源码阅读理解(三)——blobs相关推荐
- Alibaba Druid 源码阅读(三) 数据库连接池初始化探索
Alibaba Druid 源码阅读(三) 数据库连接池初始化探索 简介 上文中探索了Alibaba Druid的连接池初始化和获取连接的关键代码,接下来详细看看初始化部分 数据库连接池初始化 对整个 ...
- Soul 网关源码阅读(三)请求处理概览
Soul 源码阅读(三)请求处理概览 简介 基于上篇:Soul 源码阅读(二)代码初步运行的配置,这次debug下请求处理的大致路径,验证网关模型的路径 详细流程记录 查看运行日志,寻找切入点 ...
- Go-Excelize API源码阅读(三十一)——ProtectSheet(sheet string, settings *SheetProtectionOptions)
Go-Excelize API源码阅读(三十一)-- ProtectSheet(sheet string, settings *SheetProtectionOptions) 开源摘星计划(WeOpe ...
- Mybatis源码阅读(三):结果集映射3.2 —— 嵌套映射
*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...
- LiLi-OM-ROT源码阅读(三)——factors部分
源码阅读,能力有限,如有某处理解错误,请指出,谢谢. LidarKeyframeFactor.h:通过搭建边缘约束.平面约束,利用ceres非线性优化求解,求得q和t(当前帧到上一帧的位姿变换),使得 ...
- Mybatis源码阅读(三):结果集映射3.3 —— 主键生成策略
*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...
- LevelDB的源码阅读(三) Get操作
在Linux上leveldb的安装和使用中我们写了这么一段测试代码,内容以及输出结果如下: #include <iostream> #include <string> #inc ...
- Python: matplotlib模块 源码阅读理解
在写如下代码的时候,matplotlib模块引起了我的兴趣. #!/usr/bin/env python # -*- coding: utf-8 -*-import matplotlib as m ...
- Glide源码阅读理解一小时
前言 这篇图.文.表.代码一起组成的 Glide 源码分析的文章是在上一篇文章 Android-Universal-Image-Loader源码分析 中之后的又一篇图片加载框架源码解析,它也具备了 I ...
- python语法分析器(parser)源码阅读(三)
关于结构体tok_state以及结构体parser_state 这两个结构体主要出现在parsetok.c以及tokenizer.c文件中,对于这两个结构体,它们之间的关系应该是承上启下的关系即先生成 ...
最新文章
- Android Dialog 的使用总结(AlertDialog)
- 程序员因中年危机从北京回老家事业单位:工资从60万爆降到6万
- Android 拉伸四周空白,中间内容不变的9Patch
- 一文彻底理解Java单元测试
- Redis源码解析:07压缩列表
- [hadoop] kettle spoon 基础使用 (txt 内容抽取到excel中)
- LeetCode 680 验证回文字符串 Ⅱ
- 网络测试利器netperf安装和使用
- word---自定义编号样式
- Hive安装详细步骤
- [实时更新]草木瓜BLOG发表的全部文章
- 如何对多个文件夹进行重命名?这个方法可以批量修改文件夹名、给文件夹名加统一前缀或后缀
- OutOfMemoryError(OOM)和StackOverflowError(SOF)异常总结
- realme真我笔记本Air官宣发布时间 将于7月12日发布
- 2021-03-21 什么是鲁棒性?
- 圆形相交,相切,相离,包含
- 天翼光猫虚拟服务器怎么设置,电信光猫设置经验图解手把手教你(超级详细),换光猫怎么重新设置...
- linux编程性能,Linux性能评估工具
- 年年立计划却年年倒?用对计划管理工具是关键
- 项目启动出现Table ‘XXX.qrtz_LOCKS‘ doesn‘t exist处理办法