void PoolBC01CuDNN<T>::bprop(const T *imgs, const T* poolout, const T *poolout_d, T *imgs_d) { CUDNN_CHECK(cudnnPoolingBackward( CUDNN::handle(), pool_desc, &CUDNN::one, poolout_desc, poolout, poolout_desc, poolout_d, imgs_desc, imgs, &CUDNN::zero, imgs_desc, imgs_d )); }
virtual void Backprop(bool prop_grad, const std::vector<Node<gpu>*> &nodes_in, const std::vector<Node<gpu>*> &nodes_out, ConnectState<gpu> *p_cstate) { mshadow::Tensor<gpu,4> &tmp = p_cstate->states[0]; float alpha = 1.0f; float beta = 0.0f; if (prop_grad) { CUDA_CHECK(cudnnPoolingBackward(handle_, pooling_desc_, &alpha, out_desc_, tmp.dptr_, out_desc_, nodes_out[0]->data.dptr_, in_desc_, nodes_in[0]->data.dptr_, &beta, in_desc_, nodes_in[0]->data.dptr_)); } }