首页 > 代码库 > 神经网络caffe框架源码解析--data_layer.cpp类代码研究

神经网络caffe框架源码解析--data_layer.cpp类代码研究


dataLayer作为整个网络的输入层,

数据从leveldb中取。leveldb的数据是通过图片转换过来的。

网络建立的时候,

datalayer主要是负责设置一些参数,比如batchsize,channels,height,width等。

这次会通过读leveldb一个数据块来获取这些信息。

然后启动一个线程来预先从leveldb拉取一批数据,这些数据是图像数据和图像标签。


正向传播的时候,

datalayer就把预先拉取好数据拷贝到指定的cpu或者gpu的内存。

然后启动新线程再预先拉取数据,这些数据留到下一次正向传播使用。


// Copyright 2013 Yangqing Jia

#include <stdint.h>
#include <leveldb/db.h>
#include <pthread.h>

#include <string>
#include <vector>

#include "caffe/layer.hpp"
#include "caffe/util/io.hpp"
#include "caffe/vision_layers.hpp"

using std::string;

namespace caffe {

template <typename Dtype>
void* DataLayerPrefetch(void* layer_pointer) {
  CHECK(layer_pointer);
  DataLayer<Dtype>* layer = reinterpret_cast<DataLayer<Dtype>*>(layer_pointer);
  CHECK(layer);
  Datum datum;
  CHECK(layer->prefetch_data_);
  Dtype* top_data = http://www.mamicode.com/layer->prefetch_data_->mutable_cpu_data();//数据>