Repository: incubator-systemml
Updated Branches:
  refs/heads/master 2a4e4f8b3 -> 39351749f


[HOTFIX] Bugfix for bias_add and bias_multiply operations


Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/39351749
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/39351749
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/39351749

Branch: refs/heads/master
Commit: 39351749f76e2703b9be43d3b08b348a7e115384
Parents: 2a4e4f8
Author: Niketan Pansare <[email protected]>
Authored: Wed Apr 26 19:24:09 2017 -0800
Committer: Niketan Pansare <[email protected]>
Committed: Wed Apr 26 20:24:09 2017 -0700

----------------------------------------------------------------------
 .../sysml/runtime/matrix/data/LibMatrixDNN.java | 39 +++++++++++++++-----
 1 file changed, 30 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/39351749/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
index 8a1a43f..cd88b95 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
@@ -709,26 +709,33 @@ public class LibMatrixDNN {
                int K = bias.getNumRows();
                int PQ = input.getNumColumns() / K;
                
-               ConvolutionParameters params = new ConvolutionParameters(N, PQ, 
-1, -1, K, -1, -1, -1, -1, -1, -1, numThreads);
-               params.input1 = input;
-               params.input2 = bias;
-               params.output = outputBlock;
-               
                if(bias.getNumColumns() != 1 || input.getNumColumns() % K != 0) 
{
                        throw new DMLRuntimeException("Incorrect inputs for 
bias_add: input[" + N + " X " + input.getNumColumns()  + "] and bias[" + K + " 
X " + bias.getNumColumns() + "]");
                }
                
+               double [] outputArray = outputBlock.getDenseBlock();
                if(input.isEmptyBlock()) {
-                       double [] outputArray = outputBlock.getDenseBlock();
                        for(int n = 0;  n < N; n++) 
                                ConvolutionUtils.fillBias(bias, outputArray, n, 
n+1, N, K, PQ);
                }
                else {
-                       runConvTask(TaskType.BiasAdd, params);
+                       // Handles both dense and sparse inputs and copies it 
to dense output
+                       outputBlock.copy(input); 
+                       int index = 0;
+                       if(bias.isInSparseFormat())
+                               bias.sparseToDense(); // Since bias is 
extremely small array
+                       double [] biasArr = bias.getDenseBlock();
+                       for(int n = 0; n < N; n++) {
+                               for(int k = 0; k < K; k++) {
+                                       for(int pq = 0; pq < PQ; pq++, index++) 
{
+                                               outputArray[index] += 
biasArr[k];
+                                       }
+                               }
+                       }
                }
                
                //post-processing: maintain nnz
-               params.output.recomputeNonZeros();
+               outputBlock.recomputeNonZeros();
        }
        
        
@@ -759,7 +766,21 @@ public class LibMatrixDNN {
                }
                
                if(!input.isEmptyBlock() && !bias.isEmptyBlock()) {
-                       runConvTask(TaskType.BiasMultiply, params);
+                       // Handles both dense and sparse inputs and copies it 
to dense output
+                       outputBlock.copy(input); 
+                       double [] outputArray = outputBlock.getDenseBlock();
+                       int index = 0;
+                       if(bias.isInSparseFormat())
+                               bias.sparseToDense(); // Since bias is 
extremely small array
+                       double [] biasArr = bias.getDenseBlock();
+                       for(int n = 0; n < N; n++) {
+                               for(int k = 0; k < K; k++) {
+                                       for(int pq = 0; pq < PQ; pq++, index++) 
{
+                                               outputArray[index] *= 
biasArr[k];
+                                       }
+                               }
+                       }
+                       
                        //post-processing: maintain nnz
                        params.output.recomputeNonZeros();
                }

Reply via email to