Repository: systemml
Updated Branches:
  refs/heads/master f7bc20266 -> 2ae07e9ce


[SYSTEMML-540] Fixed a bug in CP relu_maxpool* operations


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

Branch: refs/heads/master
Commit: 2ae07e9ce0eba63606a07aabb7af204c61860b97
Parents: f7bc202
Author: Niketan Pansare <[email protected]>
Authored: Thu Nov 16 15:53:11 2017 -0800
Committer: Niketan Pansare <[email protected]>
Committed: Thu Nov 16 15:53:11 2017 -0800

----------------------------------------------------------------------
 scripts/nn/test/compare_backends/run_tests.sh                | 6 +++---
 .../runtime/instructions/cp/ConvolutionCPInstruction.java    | 4 ++++
 .../sysml/runtime/matrix/data/ConvolutionParameters.java     | 4 +++-
 .../sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java | 8 +++++---
 4 files changed, 15 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/2ae07e9c/scripts/nn/test/compare_backends/run_tests.sh
----------------------------------------------------------------------
diff --git a/scripts/nn/test/compare_backends/run_tests.sh 
b/scripts/nn/test/compare_backends/run_tests.sh
index b8f9981..13f57e8 100644
--- a/scripts/nn/test/compare_backends/run_tests.sh
+++ b/scripts/nn/test/compare_backends/run_tests.sh
@@ -21,8 +21,8 @@
 #-------------------------------------------------------------
 
 # Additional tests to compare the accuracy of different convolution related 
operators with CuDNN
-#./test_conv2d_bwd_filter.sh
-#./test_conv2d_bwd_data.sh
-#./test_conv2d.sh
+./test_conv2d_bwd_filter.sh
+./test_conv2d_bwd_data.sh
+./test_conv2d.sh
 ./test_maxpool.sh
 ./test_maxpool_bwd.sh

http://git-wip-us.apache.org/repos/asf/systemml/blob/2ae07e9c/src/main/java/org/apache/sysml/runtime/instructions/cp/ConvolutionCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ConvolutionCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ConvolutionCPInstruction.java
index 60ca720..6be6459 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ConvolutionCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ConvolutionCPInstruction.java
@@ -416,6 +416,8 @@ public class ConvolutionCPInstruction extends 
UnaryCPInstruction {
                        }
                        else {
                                outputBlock = new MatrixBlock(N, C*P*Q, 
false).allocateBlock();
+                               
if(instOpcode.equalsIgnoreCase("relu_maxpooling"))
+                                       params.minValForMaxPoolOperations = 0;
                                LibMatrixDNN.maxpooling(matBlock, outputBlock, 
params);
                        }
                }
@@ -426,6 +428,8 @@ public class ConvolutionCPInstruction extends 
UnaryCPInstruction {
                        }
                        else {
                                outputBlock = new MatrixBlock(N, C*H*W, 
false).allocateBlock();
+                               
if(instOpcode.equalsIgnoreCase("relu_maxpooling_backward"))
+                                       params.minValForMaxPoolOperations = 0;
                                LibMatrixDNN.maxpoolingBackward(matBlock, dout, 
outputBlock, params, 
                                        
!instOpcode.equalsIgnoreCase("maxpooling_backward"));
                        }

http://git-wip-us.apache.org/repos/asf/systemml/blob/2ae07e9c/src/main/java/org/apache/sysml/runtime/matrix/data/ConvolutionParameters.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/ConvolutionParameters.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/ConvolutionParameters.java
index d64a261..e32b7bc 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/data/ConvolutionParameters.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/data/ConvolutionParameters.java
@@ -43,7 +43,9 @@ public class ConvolutionParameters implements Serializable
        public MatrixBlock input1; public MatrixBlock input2; public 
MatrixBlock output;
        
        public MatrixBlock bias;
-       public int [] start_indexes_h, end_indexes_h, start_indexes_w, 
end_indexes_w; 
+       public int [] start_indexes_h, end_indexes_h, start_indexes_w, 
end_indexes_w;
+       
+       public double minValForMaxPoolOperations = -Double.MAX_VALUE; 
        
        public ConvolutionParameters(long N, long C, long H, long W,
                        long K, long R, long S, long stride_h, long stride_w, 

http://git-wip-us.apache.org/repos/asf/systemml/blob/2ae07e9c/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java
index 52cdbcd..3567690 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java
@@ -49,9 +49,11 @@ public class LibMatrixDNNPoolingHelper {
                        double[] in = _params.input1.getDenseBlock();
                        double[] out = _params.output.getDenseBlock();
                        
+                       double minValForMaxPoolOperations = 
_params.minValForMaxPoolOperations;
+                       
                        //thread-local initialization of output block 
                        if( !(_params.isStride1Pad0() && _params.isAllOnes(P, 
Q, W)) )
-                               Arrays.fill(out, _rl*CPQ, _ru*CPQ, 
-Double.MAX_VALUE);
+                               Arrays.fill(out, _rl*CPQ, _ru*CPQ, 
minValForMaxPoolOperations);
                        
                        if( _params.isStride1Pad0() && _params.isAllOnes(P, Q, 
W) ) { 
                                //quick-path w/o materialized index arrays and 
@@ -59,7 +61,7 @@ public class LibMatrixDNNPoolingHelper {
                                int lenh = Math.min(R,H);
                                for(int i = _rl, oix=_rl*C; i < _ru; i++, 
oix+=C)
                                        for (int c = 0, off=i*CHW; c < C; c++, 
off+=H)
-                                               out[oix+c] = 
max(-Double.MAX_VALUE, in, off, lenh);
+                                               out[oix+c] = 
max(minValForMaxPoolOperations, in, off, lenh);
                        }
                        else if( _params.isStride1Pad0() ) {
                                //quick-path w/o materialized index arrays 
@@ -109,7 +111,7 @@ public class LibMatrixDNNPoolingHelper {
                @Override
                public Long call() throws Exception {
                        //thread-local initialization of output block 
-                       Arrays.fill(outputArray, _rl *CPQ, _ru*CPQ, 
-Double.MAX_VALUE);
+                       Arrays.fill(outputArray, _rl *CPQ, _ru*CPQ, 
_params.minValForMaxPoolOperations);
                        
                        for(int n = _rl; n < _ru; n++)  {
                                if( !_params.input1.sparseBlock.isEmpty(n) ) {

Reply via email to