use method overrides for CuDNNPoolingLayer top blob checking
authorJonathan L Long <jonlong@cs.berkeley.edu>
Tue, 30 Sep 2014 04:20:37 +0000 (21:20 -0700)
committerJonathan L Long <jonlong@cs.berkeley.edu>
Tue, 30 Sep 2014 04:25:06 +0000 (21:25 -0700)
include/caffe/vision_layers.hpp
src/caffe/layers/cudnn_pooling_layer.cpp

index a3c8bc0..58ac534 100644 (file)
@@ -338,6 +338,9 @@ class CuDNNPoolingLayer : public PoolingLayer<Dtype> {
   virtual void Reshape(const vector<Blob<Dtype>*>& bottom,
       const vector<Blob<Dtype>*>& top);
   virtual ~CuDNNPoolingLayer();
+  // Currently, cuDNN does not support the extra top blob.
+  virtual inline int MinTopBlobs() const { return -1; }
+  virtual inline int ExactNumTopBlobs() const { return 1; }
 
  protected:
   virtual void Forward_gpu(const vector<Blob<Dtype>*>& bottom,
index 4d7573c..fc0222a 100644 (file)
@@ -13,10 +13,9 @@ template <typename Dtype>
 void CuDNNPoolingLayer<Dtype>::LayerSetUp(const vector<Blob<Dtype>*>& bottom,
     const vector<Blob<Dtype>*>& top) {
   PoolingLayer<Dtype>::LayerSetUp(bottom, top);
-  // Sanity check: CUDNN currently only supports pad=0 and top.size()=1 cases.
+  // Sanity check: CUDNN currently only supports pad == 0.
   CHECK_EQ(this->pad_h_, 0);
   CHECK_EQ(this->pad_w_, 0);
-  CHECK_EQ(top.size(), 1);
   CUDNN_CHECK(cudnnCreate(&handle_));
   cudnn::createTensor4dDesc<Dtype>(&bottom_desc_);
   cudnn::createTensor4dDesc<Dtype>(&top_desc_);