caffe修炼之路--数据的基本介绍

平台 Ubuntu14.04LTS

       这篇文章主要是讲caffe中的数据存储机制,参考资料是caffe的官网,并且本文也并非深入理解这些东西,更多的是翻译官网上的文档,然后加上自己的理解。

Blob是caffe运行过程中很重要的数据包装器,可以在CPU与GPU间传递。Blob数据是一个四维矩阵(Num, Channel, Height, Width),结合图像,很容易理解这个矩阵,其中Num就是每个batch的中包含的图像的个数,Channels就是图像的通道数,Height与Width分别是每幅图的高度与宽度。不过caffe不仅仅可以用在图像上,所以对于其他方面的应用时,可以自己调整Channels、Height、Width,以适应自己的要求。Blob存储数据时和C语言一样(与MATLAB相反)是行优先的,对于 Blob(n, k, h, w) 的位置就是((n * K + k) * H + h) * W + w  ,注意这里的大写和小写。

Blob的参数是由当前层的配置所决定的。比如对于一个包含有11*11大小的96个滤波器、输入个数为3的Blob,它的参数就是 96*3*11*11。再比如一个完全连接层,如果它由1000个输出, 1024个输入, 那么它的Blob的参数就是 1* 1 * 1000* 1024. 

关于GPU与CPU数据交换这方面,官网上有介绍,不过对于一般的用户不用去看,直接在配置文件中修改模式即可。

下面说说Layer的数据。

Layer有三个已经定义好了的标准计算:setup、forward和backward。setup就是初始化,forward定义了输入与输出之间的计算,backward定义的是偏导(given the gradient w.r.t. the top output compute the gradient w.r.t. to the input and send to the bottom. A layer with parameters computes the gradient w.r.t. to its parameters and stores it internally)。                      


你可能感兴趣的:(GPU,深度学习,caffe)