#ifndef CAFFE_HDF5_DATA_LAYER_HPP_ #define CAFFE_HDF5_DATA_LAYER_HPP_ #include "hdf5.h" #include #include #include "caffe/blob.hpp" #include "caffe/layer.hpp" #include "caffe/proto/caffe.pb.h" #include "caffe/layers/base_data_layer.hpp" namespace caffe { /** * @brief Provides data to the Net from HDF5 files. * * TODO(dox): thorough documentation for Forward and proto params. */ template class HDF5DataLayer : public Layer { public: explicit HDF5DataLayer(const LayerParameter& param) : Layer(param), offset_() {} virtual ~HDF5DataLayer(); virtual void LayerSetUp(const vector*>& bottom, const vector*>& top); // Data layers have no bottoms, so reshaping is trivial. virtual void Reshape(const vector*>& bottom, const vector*>& top) {} virtual inline const char* type() const { return "HDF5Data"; } virtual inline int ExactNumBottomBlobs() const { return 0; } virtual inline int MinTopBlobs() const { return 1; } protected: void Next(); bool Skip(); virtual void Forward_cpu(const vector*>& bottom, const vector*>& top); virtual void Forward_gpu(const vector*>& bottom, const vector*>& top); virtual void Backward_cpu(const vector*>& top, const vector& propagate_down, const vector*>& bottom) {} virtual void Backward_gpu(const vector*>& top, const vector& propagate_down, const vector*>& bottom) {} virtual void LoadHDF5FileData(const char* filename); std::vector hdf_filenames_; unsigned int num_files_; unsigned int current_file_; hsize_t current_row_; std::vector > > hdf_blobs_; std::vector data_permutation_; std::vector file_permutation_; uint64_t offset_; }; } // namespace caffe #endif // CAFFE_HDF5_DATA_LAYER_HPP_