use Blob directly instead of shared_ptr for ConvolutionLayer::bias_multiplier_
authorJonathan L Long <jonlong@cs.berkeley.edu>
Tue, 1 Jul 2014 06:11:11 +0000 (23:11 -0700)
committerJonathan L Long <jonlong@cs.berkeley.edu>
Sun, 20 Jul 2014 01:31:32 +0000 (18:31 -0700)
This will make layer reshaping easier and more uniform, and is
consistent with col_buffer_.

include/caffe/vision_layers.hpp
src/caffe/layers/conv_layer.cpp
src/caffe/layers/conv_layer.cu

index c8b4609..a261ac3 100644 (file)
@@ -55,7 +55,7 @@ class ConvolutionLayer : public Layer<Dtype> {
   int num_output_;
   int group_;
   Blob<Dtype> col_buffer_;
-  shared_ptr<Blob<Dtype> > bias_multiplier_;
+  Blob<Dtype> bias_multiplier_;
   bool bias_term_;
   int M_;
   int K_;
index e8f08c7..11f29e7 100644 (file)
@@ -76,10 +76,10 @@ void ConvolutionLayer<Dtype>::SetUp(const vector<Blob<Dtype>*>& bottom,
       bias_filler->Fill(this->blobs_[1].get());
     }
   }
-  // Set up the bias filler
+  // Set up the all ones "bias multiplier" for adding bias using blas
   if (bias_term_) {
-    bias_multiplier_.reset(new Blob<Dtype>(1, 1, 1, N_));
-    caffe_set(N_, Dtype(1), bias_multiplier_->mutable_cpu_data());
+    bias_multiplier_.Reshape(1, 1, 1, N_);
+    caffe_set(N_, Dtype(1), bias_multiplier_.mutable_cpu_data());
   }
   this->param_propagate_down_.resize(this->blobs_.size(), true);
 }
@@ -110,7 +110,7 @@ Dtype ConvolutionLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom,
       if (bias_term_) {
         caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, num_output_,
             N_, 1, (Dtype)1., this->blobs_[1]->cpu_data(),
-            bias_multiplier_->cpu_data(),
+            bias_multiplier_.cpu_data(),
             (Dtype)1., top_data + (*top)[i]->offset(n));
       }
     }
@@ -144,7 +144,7 @@ void ConvolutionLayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top,
       for (int n = 0; n < num_; ++n) {
         caffe_cpu_gemv<Dtype>(CblasNoTrans, num_output_, N_,
             1., top_diff + top[0]->offset(n),
-            bias_multiplier_->cpu_data(), 1.,
+            bias_multiplier_.cpu_data(), 1.,
             bias_diff);
       }
     }
index 0b6e912..d328fbd 100644 (file)
@@ -35,7 +35,7 @@ Dtype ConvolutionLayer<Dtype>::Forward_gpu(const vector<Blob<Dtype>*>& bottom,
       if (bias_term_) {
         caffe_gpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, num_output_,
             N_, 1, (Dtype)1., this->blobs_[1]->gpu_data(),
-            bias_multiplier_->gpu_data(),
+            bias_multiplier_.gpu_data(),
             (Dtype)1., top_data + (*top)[i]->offset(n));
       }
     }
@@ -69,7 +69,7 @@ void ConvolutionLayer<Dtype>::Backward_gpu(const vector<Blob<Dtype>*>& top,
       for (int n = 0; n < num_; ++n) {
         caffe_gpu_gemv<Dtype>(CblasNoTrans, num_output_, N_,
             1., top_diff + top[0]->offset(n),
-            bias_multiplier_->gpu_data(), 1.,
+            bias_multiplier_.gpu_data(), 1.,
             bias_diff);
       }
     }