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相关推荐

  1. Alibaba Druid 源码阅读(三) 数据库连接池初始化探索

    Alibaba Druid 源码阅读(三) 数据库连接池初始化探索 简介 上文中探索了Alibaba Druid的连接池初始化和获取连接的关键代码,接下来详细看看初始化部分 数据库连接池初始化 对整个 ...

  2. Soul 网关源码阅读(三)请求处理概览

    Soul 源码阅读(三)请求处理概览 简介     基于上篇:Soul 源码阅读(二)代码初步运行的配置,这次debug下请求处理的大致路径,验证网关模型的路径 详细流程记录 查看运行日志,寻找切入点 ...

  3. Go-Excelize API源码阅读(三十一)——ProtectSheet(sheet string, settings *SheetProtectionOptions)

    Go-Excelize API源码阅读(三十一)-- ProtectSheet(sheet string, settings *SheetProtectionOptions) 开源摘星计划(WeOpe ...

  4. Mybatis源码阅读(三):结果集映射3.2 —— 嵌套映射

    *************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...

  5. LiLi-OM-ROT源码阅读(三)——factors部分

    源码阅读,能力有限,如有某处理解错误,请指出,谢谢. LidarKeyframeFactor.h:通过搭建边缘约束.平面约束,利用ceres非线性优化求解,求得q和t(当前帧到上一帧的位姿变换),使得 ...

  6. Mybatis源码阅读(三):结果集映射3.3 —— 主键生成策略

    *************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...

  7. LevelDB的源码阅读(三) Get操作

    在Linux上leveldb的安装和使用中我们写了这么一段测试代码,内容以及输出结果如下: #include <iostream> #include <string> #inc ...

  8. Python: matplotlib模块 源码阅读理解

      在写如下代码的时候,matplotlib模块引起了我的兴趣. #!/usr/bin/env python # -*- coding: utf-8 -*-import matplotlib as m ...

  9. Glide源码阅读理解一小时

    前言 这篇图.文.表.代码一起组成的 Glide 源码分析的文章是在上一篇文章 Android-Universal-Image-Loader源码分析 中之后的又一篇图片加载框架源码解析,它也具备了 I ...

  10. python语法分析器(parser)源码阅读(三)

    关于结构体tok_state以及结构体parser_state 这两个结构体主要出现在parsetok.c以及tokenizer.c文件中,对于这两个结构体,它们之间的关系应该是承上启下的关系即先生成 ...

最新文章

  1. Android Dialog 的使用总结(AlertDialog)
  2. 程序员因中年危机从北京回老家事业单位:工资从60万爆降到6万
  3. Android 拉伸四周空白,中间内容不变的9Patch
  4. 一文彻底理解Java单元测试
  5. Redis源码解析:07压缩列表
  6. [hadoop] kettle spoon 基础使用 (txt 内容抽取到excel中)
  7. LeetCode 680 验证回文字符串 Ⅱ
  8. 网络测试利器netperf安装和使用
  9. word---自定义编号样式
  10. Hive安装详细步骤
  11. [实时更新]草木瓜BLOG发表的全部文章
  12. 如何对多个文件夹进行重命名?这个方法可以批量修改文件夹名、给文件夹名加统一前缀或后缀
  13. OutOfMemoryError(OOM)和StackOverflowError(SOF)异常总结
  14. realme真我笔记本Air官宣发布时间 将于7月12日发布
  15. 2021-03-21 什么是鲁棒性?
  16. 圆形相交,相切,相离,包含
  17. 天翼光猫虚拟服务器怎么设置,电信光猫设置经验图解手把手教你(超级详细),换光猫怎么重新设置...
  18. linux编程性能,Linux性能评估工具
  19. 年年立计划却年年倒?用对计划管理工具是关键
  20. 项目启动出现Table ‘XXX.qrtz_LOCKS‘ doesn‘t exist处理办法

热门文章

  1. 如何修改PDF中图片的大小尺寸
  2. 木子-后端-Java小知识点
  3. jQuery 任意公历转为农历
  4. 【其他】bilibili下载的m4s格式视频如何还原为mp4
  5. Saliency map (fixation map) 生成热点图-python实现
  6. win10 卸载软件 清除注册表 Revo Uninstaller Pro
  7. 微信小程序开发账号找回
  8. 互联网信息服务【安全评估报告】详细攻略
  9. 【JVM Ⅵ】GC相关概念+引用
  10. 吃鸡手游竟然是 Python 写的?