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(); }
