2using System.Collections.Generic;
29 long m_hBottomDesc = 0;
52 if (m_hBottomDesc != 0)
54 m_cuda.FreeTensorDesc(m_hBottomDesc);
60 m_cuda.FreeTensorDesc(m_hTopDesc);
66 m_cuda.FreeCuDNN(m_hCudnn);
87 m_hCudnn =
m_cuda.CreateCuDNN();
88 m_hBottomDesc =
m_cuda.CreateTensorDesc();
89 m_hTopDesc =
m_cuda.CreateTensorDesc();
99 base.Reshape(colBottom, colTop);
106 int nN = colBottom[0].num;
107 int nK = colBottom[0].channels;
108 int nH = colBottom[0].height;
109 int nW = colBottom[0].width;
170 long hBottomData = colBottom[0].gpu_data;
171 long hTopData = colTop[0].mutable_gpu_data;
172 int nCount = colBottom[0].count();
175 m_cuda.relu_fwd(nCount, hBottomData, hTopData, fNegativeSlope);
197 long hTopData = colTop[0].gpu_data;
198 long hTopDiff = colTop[0].gpu_diff;
199 long hBottomDiff = colBottom[0].mutable_gpu_diff;
200 int nCount = colBottom[0].count();
203 m_cuda.relu_bwd(nCount, hTopDiff, hTopData, hBottomDiff, fNegativeSlope);
218 long hBottomData = colBottom[0].gpu_data;
219 long hTopData = colTop[0].mutable_gpu_data;
221 m_cuda.ReLUForward(m_hCudnn,
m_tOne, m_hBottomDesc, hBottomData,
m_tZero, m_hTopDesc, hTopData);
243 if (!rgbPropagateDown[0])
246 long hTopData = colTop[0].gpu_data;
247 long hTopDiff = colTop[0].gpu_diff;
248 long hBottomData = colBottom[0].gpu_data;
249 long hBottomDiff = colBottom[0].mutable_gpu_diff;
251 m_cuda.ReLUBackward(m_hCudnn,
m_tOne, m_hTopDesc, hTopData, m_hTopDesc, hTopDiff, m_hBottomDesc, hBottomData,
m_tZero, m_hBottomDesc, hBottomDiff);
The Log class provides general output in text form.
The BlobCollection contains a list of Blobs.
The CudaDnn object is the main interface to the Low-Level Cuda C++ DLL.
LayerParameter m_param
Specifies the LayerParameter describing the Layer.
T m_tZero
Specifies a generic type equal to 0.0.
T m_tOne
Specifies a generic type equal to 1.0.
bool m_bUseHalfSize
Specifies that the half size of the top (if any) should be converted to the base size.
virtual bool reshapeNeeded(BlobCollection< T > colBottom, BlobCollection< T > colTop, bool bReset=true)
Tests the shapes of both the bottom and top blobs and if they are the same as the previous sizing,...
CudaDnn< T > m_cuda
Specifies the CudaDnn connection to Cuda.
LayerParameter.LayerType m_type
Specifies the Layer type.
The NeuronLayer is an interface for layers that take one blob as input (x) and produce only equally-s...
The ReLULayer computes the "Rectifier Linear Unit" ReLULayer non-linearity, a classic for neural netw...
ReLULayer(CudaDnn< T > cuda, Log log, LayerParameter p)
The ReLULayer constructor.
override void backward(BlobCollection< T > colTop, List< bool > rgbPropagateDown, BlobCollection< T > colBottom)
Computes the error gradient w.r.t the inputs using either the Engine.CAFFE or Engine....
override void dispose()
Releases all GPU and host resources used by the Layer.
void forward_cuda(BlobCollection< T > colBottom, BlobCollection< T > colTop)
Computes the forward calculation using the Engine.CAFFE mode.
void backward_cudnn(BlobCollection< T > colTop, List< bool > rgbPropagateDown, BlobCollection< T > colBottom)
Computes the error gradient w.r.t the inputs using the Engine.CUDNN mode.
override void Reshape(BlobCollection< T > colBottom, BlobCollection< T > colTop)
Reshape the bottom (input) and top (output) blobs.
void forward_cudnn(BlobCollection< T > colBottom, BlobCollection< T > colTop)
Computes the forward calculation using the Engine.CUDNN mode.
void backward_cuda(BlobCollection< T > colTop, List< bool > rgbPropagateDown, BlobCollection< T > colBottom)
Computes the error gradient w.r.t the inputs using the Engine.CAFFE mode.
override void LayerSetUp(BlobCollection< T > colBottom, BlobCollection< T > colTop)
Setup the layer to run in either Engine.CAFFE or Engine.CUDNN mode.
override void forward(BlobCollection< T > colBottom, BlobCollection< T > colTop)
Computes the forward calculation using either the Engine.CAFFE or Engine.CUDNN mode.
Specifies the base parameter for all layers.
ReLUParameter relu_param
Returns the parameter set when initialized with LayerType.RELU
bool use_halfsize
Specifies whether or not to use half sized memory or not.
LayerType
Specifies the layer type.
double negative_slope
Specifies the negative slope. Allow non-zero slope for negative inputs to speed up optimization.
bool useCudnn()
Queries whether or not to use NVIDIA's cuDnn.
The MyCaffe.basecode contains all generic types used throughout MyCaffe.
The MyCaffe.common namespace contains common MyCaffe classes.
The MyCaffe.layers namespace contains all layers that have a solidified code base,...
The MyCaffe.param namespace contains parameters used to create models.
The MyCaffe namespace contains the main body of MyCaffe code that closesly tracks the C++ Caffe open-...