MyCaffe  1.12.2.41
Deep learning software for Windows C# programmers.
SigmoidLayer.cs
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using MyCaffe.basecode;
6using MyCaffe.common;
7using MyCaffe.param;
8
9namespace MyCaffe.layers
10{
27 public class SigmoidLayer<T> : NeuronLayer<T>
28 {
29 long m_hCudnn = 0;
30 long m_hBottomDesc = 0;
31 long m_hTopDesc = 0;
32
43 : base(cuda, log, p)
44 {
46 }
47
49 protected override void dispose()
50 {
51 if (m_hBottomDesc != 0)
52 {
53 m_cuda.FreeTensorDesc(m_hBottomDesc);
54 m_hBottomDesc = 0;
55 }
56
57 if (m_hTopDesc != 0)
58 {
59 m_cuda.FreeTensorDesc(m_hTopDesc);
60 m_hTopDesc = 0;
61 }
62
63 if (m_hCudnn != 0)
64 {
65 m_cuda.FreeCuDNN(m_hCudnn);
66 m_hCudnn = 0;
67 }
68
69 base.dispose();
70 }
71
77 public override void LayerSetUp(BlobCollection<T> colBottom, BlobCollection<T> colTop)
78 {
80 return;
81
82 // Setup the convert to half flags used by the Layer just before calling forward and backward.
84
85 // Initialize CuDNN
86 m_hCudnn = m_cuda.CreateCuDNN();
87 m_hBottomDesc = m_cuda.CreateTensorDesc();
88 m_hTopDesc = m_cuda.CreateTensorDesc();
89 }
90
96 public override void Reshape(BlobCollection<T> colBottom, BlobCollection<T> colTop)
97 {
98 base.Reshape(colBottom, colTop);
99 if (!reshapeNeeded(colBottom, colTop, false))
100 return;
101
103 return;
104
105 int nN = colBottom[0].num;
106 int nK = colBottom[0].channels;
107 int nH = colBottom[0].height;
108 int nW = colBottom[0].width;
109
110 m_cuda.SetTensorDesc(m_hBottomDesc, nN, nK, nH, nW, m_bUseHalfSize);
111 m_cuda.SetTensorDesc(m_hTopDesc, nN, nK, nH, nW, m_bUseHalfSize);
112 }
113
124 protected override void forward(BlobCollection<T> colBottom, BlobCollection<T> colTop)
125 {
127 forward_cuda(colBottom, colTop);
128 else
129 forward_cudnn(colBottom, colTop);
130 }
131
149 protected override void backward(BlobCollection<T> colTop, List<bool> rgbPropagateDown, BlobCollection<T> colBottom)
150 {
152 backward_cuda(colTop, rgbPropagateDown, colBottom);
153 else
154 backward_cudnn(colTop, rgbPropagateDown, colBottom);
155 }
156
167 protected void forward_cuda(BlobCollection<T> colBottom, BlobCollection<T> colTop)
168 {
169 long hBottomData = colBottom[0].gpu_data;
170 long hTopData = colTop[0].mutable_gpu_data;
171 int nCount = colBottom[0].count();
172
173 m_cuda.sigmoid_fwd(nCount, hBottomData, hTopData);
174 }
175
193 protected void backward_cuda(BlobCollection<T> colTop, List<bool> rgbPropagateDown, BlobCollection<T> colBottom)
194 {
195 long hTopData = colTop[0].gpu_data;
196 long hTopDiff = colTop[0].gpu_diff;
197 long hBottomDiff = colBottom[0].mutable_gpu_diff;
198 int nCount = colBottom[0].count();
199
200 m_cuda.sigmoid_bwd(nCount, hTopDiff, hTopData, hBottomDiff);
201 }
202
213 protected void forward_cudnn(BlobCollection<T> colBottom, BlobCollection<T> colTop)
214 {
215 long hBottomData = colBottom[0].gpu_data;
216 long hTopData = colTop[0].mutable_gpu_data;
217
218 m_cuda.SigmoidForward(m_hCudnn, m_tOne, m_hBottomDesc, hBottomData, m_tZero, m_hTopDesc, hTopData);
219 }
220
238 protected void backward_cudnn(BlobCollection<T> colTop, List<bool> rgbPropagateDown, BlobCollection<T> colBottom)
239 {
240 if (!rgbPropagateDown[0])
241 return;
242
243 long hTopData = colTop[0].gpu_data;
244 long hTopDiff = colTop[0].gpu_diff;
245 long hBottomData = colBottom[0].gpu_data;
246 long hBottomDiff = colBottom[0].mutable_gpu_diff;
247
248 m_cuda.SigmoidBackward(m_hCudnn, m_tOne, m_hTopDesc, hTopData, m_hTopDesc, hTopDiff, m_hBottomDesc, hBottomData, m_tZero, m_hBottomDesc, hBottomDiff);
249 }
250 }
251}
The Log class provides general output in text form.
Definition: Log.cs:13
The BlobCollection contains a list of Blobs.
The CudaDnn object is the main interface to the Low-Level Cuda C++ DLL.
Definition: CudaDnn.cs:969
LayerParameter m_param
Specifies the LayerParameter describing the Layer.
Definition: Layer.cs:47
T m_tZero
Specifies a generic type equal to 0.0.
Definition: Layer.cs:76
T m_tOne
Specifies a generic type equal to 1.0.
Definition: Layer.cs:72
bool m_bUseHalfSize
Specifies that the half size of the top (if any) should be converted to the base size.
Definition: Layer.cs:84
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,...
Definition: Layer.cs:622
CudaDnn< T > m_cuda
Specifies the CudaDnn connection to Cuda.
Definition: Layer.cs:39
LayerParameter.LayerType m_type
Specifies the Layer type.
Definition: Layer.cs:35
The NeuronLayer is an interface for layers that take one blob as input (x) and produce only equally-s...
Definition: NeuronLayer.cs:22
The SigmoidLayer is a neuron layer that calculates the sigmoid function, a classc choice for neural n...
Definition: SigmoidLayer.cs:28
void forward_cuda(BlobCollection< T > colBottom, BlobCollection< T > colTop)
Computes the forward calculation using the Engine.CAFFE.
SigmoidLayer(CudaDnn< T > cuda, Log log, LayerParameter p)
The SigmoidLayer constructor.
Definition: SigmoidLayer.cs:42
override void dispose()
Releases all GPU and host resources used by the Layer.
Definition: SigmoidLayer.cs:49
override void LayerSetUp(BlobCollection< T > colBottom, BlobCollection< T > colTop)
Setup the layer to run in either Engine.CAFFE or Engine.CUDNN mode.
Definition: SigmoidLayer.cs:77
override void Reshape(BlobCollection< T > colBottom, BlobCollection< T > colTop)
Reshape the bottom (input) and top (output) blobs.
Definition: SigmoidLayer.cs:96
override void forward(BlobCollection< T > colBottom, BlobCollection< T > colTop)
Computes the forward calculation using either the Engine.CAFFE or Engine.CUDNN mode.
void backward_cuda(BlobCollection< T > colTop, List< bool > rgbPropagateDown, BlobCollection< T > colBottom)
Computes the error gradient w.r.t the ganh inputs using the Engine.CAFFE.
void backward_cudnn(BlobCollection< T > colTop, List< bool > rgbPropagateDown, BlobCollection< T > colBottom)
Computes the error gradient w.r.t the ganh inputs using the Engine.CUDNN mode.
void forward_cudnn(BlobCollection< T > colBottom, BlobCollection< T > colTop)
Computes the forward calculation using the Engine.CUDNN mode.
override void backward(BlobCollection< T > colTop, List< bool > rgbPropagateDown, BlobCollection< T > colBottom)
Computes the error gradient w.r.t the ganh inputs using either the Engine.CAFFE or Engine....
Specifies the base parameter for all layers.
SigmoidParameter sigmoid_param
Returns the parameter set when initialized with LayerType.SIGMOID
bool use_halfsize
Specifies whether or not to use half sized memory or not.
LayerType
Specifies the layer type.
bool useCudnn()
Queries whether or not to use NVIDIA's cuDnn.
The MyCaffe.basecode contains all generic types used throughout MyCaffe.
Definition: Annotation.cs:12
The MyCaffe.common namespace contains common MyCaffe classes.
Definition: BatchInput.cs:8
The MyCaffe.layers namespace contains all layers that have a solidified code base,...
Definition: LayerFactory.cs:15
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-...
Definition: Annotation.cs:12