HDF5_DATA + MEMORY_DATA refuse loudly to transform
authorEvan Shelhamer <shelhamer@imaginarynumber.net>
Sat, 7 Feb 2015 07:12:33 +0000 (23:12 -0800)
committerEvan Shelhamer <shelhamer@imaginarynumber.net>
Sat, 7 Feb 2015 07:17:55 +0000 (23:17 -0800)
These layers are meant for generic inputs so they do not do
transformations. As `transform_param` was pulled out of data layers'
proto definitions for reuse, these layers silently ignored
transformation parameters until now instead of signalling their refusal.

src/caffe/layers/hdf5_data_layer.cpp
src/caffe/layers/memory_data_layer.cpp

index 7755521..3d856ec 100644 (file)
@@ -58,6 +58,9 @@ void HDF5DataLayer<Dtype>::LoadHDF5FileData(const char* filename) {
 template <typename Dtype>
 void HDF5DataLayer<Dtype>::LayerSetUp(const vector<Blob<Dtype>*>& bottom,
       const vector<Blob<Dtype>*>& top) {
+  // Refuse transformation parameters since HDF5 is totally generic.
+  CHECK(!this->layer_param_.has_transform_param()) <<
+      this->type() << " does not transform data.";
   // Read the source to parse the filenames.
   const string& source = this->layer_param_.hdf5_data_param().source();
   LOG(INFO) << "Loading list of HDF5 filenames from: " << source;
index 7cb5eaf..6f584de 100644 (file)
@@ -81,6 +81,9 @@ void MemoryDataLayer<Dtype>::Reset(Dtype* data, Dtype* labels, int n) {
   CHECK(data);
   CHECK(labels);
   CHECK_EQ(n % batch_size_, 0) << "n must be a multiple of batch size";
+  // Refuse transformation parameters since a memory array is totally generic.
+  CHECK(!this->layer_param_.has_transform_param()) <<
+      this->type() << " does not transform data.";
   data_ = data;
   labels_ = labels;
   n_ = n;