GPUMLib  0.2.2
GPU Machine Learning Library
NMFadditiveEuclidian.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 "NMFadditiveEuclidian.h"
22 #include "../common/Utilities.h"
23 
24 namespace GPUMLib {
25 
28 
29 // V (n x m) | W (n x r) | H (r x m)
31  DetermineQualityImprovement(true);
32 
33  // Update H
37  //DeviceMatrix<cudafloat>::Multiply(aux, H, deltaH, CUDA_VALUE(-1.0), CUDA_VALUE(1.0));
38  DeviceMatrix<cudafloat>::Multiply(aux, H, deltaH2);
40  //UpdateMatrixNMFadditive<<<NumberBlocks(H.Elements(), SIZE_BLOCKS_NMF), SIZE_BLOCKS_NMF>>>(H.Pointer(), deltaH.Pointer(), CUDA_VALUE(0.001), H.Elements());
41  UpdateMatrix_AE<<<NumberBlocks(H.Elements(), SIZE_BLOCKS_NMF), SIZE_BLOCKS_NMF>>>(H.Pointer(), deltaH.Pointer(), deltaH2.Pointer(), H.Elements());
42 
43  if (!updateW) return;
44 
45  // Update W
50  //DeviceMatrix<cudafloat>::Multiply(W, aux, deltaW, CUDA_VALUE(-1.0), CUDA_VALUE(1.0));
51  DeviceMatrix<cudafloat>::Multiply(W, aux, deltaW2);
52  //UpdateMatrixNMFadditive<<<NumberBlocks(W.Elements(), SIZE_BLOCKS_NMF), SIZE_BLOCKS_NMF>>>(W.Pointer(), deltaW.Pointer(), CUDA_VALUE(0.001), W.Elements());
53  UpdateMatrix_AE<<<NumberBlocks(W.Elements(), SIZE_BLOCKS_NMF), SIZE_BLOCKS_NMF>>>(W.Pointer(), deltaW.Pointer(), deltaW2.Pointer(), W.Elements());
54 }
55 
57 
58 }
void ReplaceByTranspose()
Definition: BaseMatrix.h:107
void MultiplyBySelfTranspose(DeviceMatrix< Type > &C, cudafloat alpha=CUDA_VALUE(1.0), cudafloat beta=CUDA_VALUE(0.0))
Definition: DeviceMatrix.h:170
int Elements() const
Definition: BaseMatrix.h:94
int NumberBlocks(int threads, int blockSize)
Definition: Utilities.h:49
Type * Pointer() const
Definition: BaseMatrix.h:88
static void Multiply(DeviceMatrix< Type > &A, DeviceMatrix< Type > &B, DeviceMatrix< Type > &C, cudafloat alpha=CUDA_VALUE(1.0), cudafloat beta=CUDA_VALUE(0.0))
Definition: DeviceMatrix.h:192
void DoIteration(bool updateW=true)