GPUMLib  0.2.2
GPU Machine Learning Library
RBMinitKernels.cu
1 /*
2  Noel Lopes is an Assistant Professor at the Polytechnic Institute of Guarda, Portugal
3  Copyright (C) 2009, 2010, 2011, 2012 Noel de Jesus Mendonša Lopes
4 
5  This file is part of GPUMLib.
6 
7  GPUMLib is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #include "RBMconfig.h"
22 
23 namespace GPUMLib {
24 
25 KERNEL InitBiasDeltasRBM(cudafloat * bias, cudafloat initialBias, cudafloat * lastDeltaW, cudafloat * lastDeltaB, cudafloat * lastDeltaWithoutLearningMomentumW, cudafloat * lastDeltaWithoutLearningMomentumB, cudafloat * learningRateW, cudafloat * learningRateB, cudafloat initialLearningRate, int weights, int J) {
26  int idx = blockIdx.x * blockDim.x + threadIdx.x;
27 
28  if (idx < weights) {
29  lastDeltaW[idx] = CUDA_VALUE(0.0);
30 
31  learningRateW[idx] = initialLearningRate;
32  lastDeltaWithoutLearningMomentumW[idx] = CUDA_VALUE(0.0);
33 
34  if (idx < J) {
35  bias[idx] = initialBias;
36  lastDeltaB[idx] = CUDA_VALUE(0.0);
37  lastDeltaWithoutLearningMomentumB[idx] = CUDA_VALUE(0.0);
38  learningRateB[idx] = initialLearningRate;
39  }
40  }
41 }
42 
43 KERNEL InitInputBiasDeltasRBM(cudafloat * v, cudafloat * bias, cudafloat * lastDeltaA, cudafloat * lastDeltaWithoutLearningMomentumA, cudafloat * learningRateA, cudafloat initialLearningRate, int I, int samples) {
44  int input = blockIdx.x * blockDim.x + threadIdx.x;
45 
46  cudafloat sum = CUDA_VALUE(0.0);
47 
48  if (input < I) {
49  for(int s = 0; s < samples; s++) sum += v[s * I + input];
50 
51  cudafloat pi = sum / samples;
52  pi = Log(pi / (CUDA_VALUE(1.0) - pi));
53  bias[input] = pi;
54 
55  lastDeltaA[input] = CUDA_VALUE(0.0);
56 
57  lastDeltaWithoutLearningMomentumA[input] = CUDA_VALUE(0.0);
58  learningRateA[input] = initialLearningRate;
59  }
60 }
61 
62 }
#define KERNEL
Defines the type of a kernel function.
#define CUDA_VALUE(X)
float cudafloat