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的卷积结果。具体例子,可以参考《人工智能(第三版)》(王万良著)里面的例子,结合例子中算出的“要学习的参数数量”来理解。

  • 相关阅读:
    TPCx-BB官宣最新世界纪录,阿里巴巴计算力持续突破
    Java 编程技巧之数据结构
    从零开始入门 K8s | Kubernetes 网络概念及策略控制
    从零开始入门 K8s | 可观测性:监控与日志
    如何在 Knative 中部署 WebSocket 和 gRPC 服务?
    全球首个开放应用模型 OAM 开源
    开放应用模型(OAM):全球首个云原生应用标准定义与架构模型
    一文读懂分布式架构知识体系(内含超全核心知识大图)
    更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读
    数论练习(1)——取余运算(快速幂)
  • 原文地址:https://www.cnblogs.com/invisible2/p/10348225.html
Copyright © 2011-2022 走看看