zoukankan      html  css  js  c++  java
  • 【caffe】基本数据结构blob

    blob是caffe中的基本数据结构,简单理解就是一个“4维数组”。但是,这个4维数组有什么意义?
    BTW,TensorFlow这款google出的框架,带出了tensor(张量)的概念。虽然是数学概念,个人还是倾向于简单理解为“多维数组”,那么放在这里,

    caffe的blob就相当于一个特殊的tensor了。而矩阵就是二维的张量。anyway,看看blob的4个维度都代表什么:

    num: 图像数量

    channel:通道数量

    width:图像宽度

    height:图像高度

    caffe中默认使用的SGD随机梯度下降,其实是mini-batch SGD
    每个batch,就是一堆图片。这一个batch的图片,就存储在一个blob中。

    当然,blob并不是这么受限的、专门给batch内的图片做存储用的。实际上,参数、梯度,也可以用blob存储的。只要是caffe的网络中传递的数据,都可以用blob存储。

    而且,blob实际上也并不一定是4维的。它在实现上其实就是1维的指针,而我们作为用户感受到的“多个维度”是通过shape来操作的。

    ========= 2016-10-26 20:32:45更新 ==========

    在用faster-rcnn训练的时候使用了ZF网络,对于ZF网络中的卷积、池化的计算,这里想自己算一算,结果发现对于卷积网的计算细节还是不太懂,于是找到这篇博客

    第一感觉是,conv1得到的应该是110x110x3x96的结果,而不是110x110x96。后来问了别人,再看看书,发现自己忽略了一个细节,

    就是卷积之后有一个∑和sigmoid的两个过程,前者是累加,后者是映射到0-1之间。具体到faster-rcnn,∑对应的就是:各个通道上对应位置做累加;

    而激活函数使用的应该是ReLU吧。anyway,这里的累加和激活函数处理后,通道数就变成了一个;也就是,对于一个滤波器,滑窗滤波+累加、

    激活函数后,得到的一个feature map。再具体点说,这里的滤波器(卷积核),是3维的,(Width,Height,Channel)这样;我们用它在一个feature map

    上按滑窗方式做卷积,其实是所有Channel上同时做sliding window的操作;每个sliding windows位置上,所有通道卷积的结果累加起来,再送给激活

    函数ReLU处理,就得到结果feature map中的一个像素的值。值得注意的是,滤波器的通道数量,和要处理的feature map的通道数量,其实可以不一

    样的,可以比feature map维度少一点,这相当于可以自行指定要选取feature map中的某些channel做卷积操作,相当于有一个采样的过程,甚至可以

    仅仅使用一个channel的卷积结果。具体例子,可以参考《人工智能(第三版)》(王万良著)里面的例子,结合例子中算出的“要学习的参数数量”来理解。

  • 相关阅读:
    day7 面向对象 静态方法 类方法 属性方法 类的特殊成员方法 元类 反射 异常处理
    day6 面向对象 封装 继承 多态 类与实例在内存中的关系 经典类和新式类
    day5 time datetime random os sys shutil json pickle shelve xml configparser hashlib subprocess logging re正则 python计算器
    kafka常用操作命令
    linux基础
    django学习1——初识web应用程序
    mysql数据库(三)——pymysql模块
    mysql数据库(二)——表的查询
    mysql数据库(一)
    Python常用模块——re模块
  • 原文地址:https://www.cnblogs.com/invisible2/p/10348225.html
Copyright © 2011-2022 走看看