You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by ni...@apache.org on 2017/05/04 05:02:33 UTC

incubator-systemml git commit: [HOTFIX] Bugfix for metadata of conv2d_* and maxpool_* operations

Repository: incubator-systemml
Updated Branches:
  refs/heads/master 29c307c9a -> 76f3ca5d3


[HOTFIX] Bugfix for metadata of conv2d_* and maxpool_* 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/76f3ca5d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/76f3ca5d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/76f3ca5d

Branch: refs/heads/master
Commit: 76f3ca5d39e492fc3075c4bd8240ec5339647001
Parents: 29c307c
Author: Niketan Pansare <np...@us.ibm.com>
Authored: Wed May 3 21:02:14 2017 -0800
Committer: Niketan Pansare <np...@us.ibm.com>
Committed: Wed May 3 22:02:14 2017 -0700

----------------------------------------------------------------------
 .../org/apache/sysml/hops/ConvolutionOp.java    | 49 ++++++++++++++------
 .../org/apache/sysml/parser/DMLTranslator.java  | 10 +++-
 2 files changed, 43 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/76f3ca5d/src/main/java/org/apache/sysml/hops/ConvolutionOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/ConvolutionOp.java b/src/main/java/org/apache/sysml/hops/ConvolutionOp.java
index a18aada..cb67d65 100644
--- a/src/main/java/org/apache/sysml/hops/ConvolutionOp.java
+++ b/src/main/java/org/apache/sysml/hops/ConvolutionOp.java
@@ -242,30 +242,43 @@ public class ConvolutionOp extends Hop  implements MultiThreadedHop
 		switch(op) 
 		{
 			case MAX_POOLING: {
-				ret[0] = getInput().get(0)._dim1;
+				// input
+				long N = getInput().get(0)._dim1;
+				ret[0] = N;
 				ret[1] = getExtractedVal(params.C, params.P, params.Q);
 				ret[2] = -1;
 				break;
 			}
 			case DIRECT_CONV2D: {
-				ret[0] = getInput().get(0)._dim1;
-				ret[1] = getExtractedVal(getInput().get(1)._dim1, params.P, params.Q);
+				// input, filter
+				long N = getInput().get(0)._dim1;
+				ret[0] = N;
+				ret[1] = getExtractedVal(params.K, params.P, params.Q);
 				ret[2] = -1;
 				break;
 			}
 			case DIRECT_CONV2D_BACKWARD_FILTER: {
-				ret[0] = getInput().get(1)._dim1;
-				ret[1] = getInput().get(1)._dim2;
+				// input, dout	
+				ret[0] = params.K;
+				ret[1] = getExtractedVal(params.C, params.R, params.S);
 				ret[2] = -1;
 				break;
 			}
-			case MAX_POOLING_BACKWARD:
-			case DIRECT_CONV2D_BACKWARD_DATA: {
+			case MAX_POOLING_BACKWARD: {
+				// input, dout
 				ret[0] = getInput().get(0)._dim1;
 				ret[1] = getInput().get(0)._dim2;
 				ret[2] = -1;
 				break;
 			}
+			case DIRECT_CONV2D_BACKWARD_DATA: {
+				// filter, dout
+				long N = getInput().get(1)._dim1;
+				ret[0] = N;
+				ret[1] = getExtractedVal(params.C, params.H, params.W);
+				ret[2] = -1;
+				break;
+			}
 			default:
 				throw new RuntimeException("Unsupported op:" + op.name());
 		}
@@ -390,13 +403,16 @@ public class ConvolutionOp extends Hop  implements MultiThreadedHop
 		{
 			case MAX_POOLING:
 			{	
-				_dim1 = getInput().get(0)._dim1;
+				// input
+				long N = getInput().get(0)._dim1;
+				_dim1 = N;
 				_dim2 = getExtractedVal(params.C, params.P, params.Q);
 				_nnz = -1; // cannot infer stats
 				break;
 			}
 			case MAX_POOLING_BACKWARD:
 			{
+				// input, dout
 				_dim1 = getInput().get(0)._dim1;
 				_dim2 = getInput().get(0)._dim2;
 				_nnz = -1;
@@ -404,22 +420,27 @@ public class ConvolutionOp extends Hop  implements MultiThreadedHop
 			}
 			case DIRECT_CONV2D:
 			{
-				_dim1 = getInput().get(0)._dim1;
-				_dim2 = getExtractedVal(getInput().get(1)._dim1, params.P, params.Q);
+				// input, filter
+				long N = getInput().get(0)._dim1;
+				_dim1 = N;
+				_dim2 = getExtractedVal(params.K, params.P, params.Q);
 				_nnz = -1; // cannot infer stats
 				break;
 			}
 			case DIRECT_CONV2D_BACKWARD_DATA:
 			{
-				_dim1 = getInput().get(0)._dim1;
-				_dim2 = getInput().get(0)._dim2;
+				// filter, dout
+				long N = getInput().get(1)._dim1;
+				_dim1 = N;
+				_dim2 = getExtractedVal(params.C, params.H, params.W);
 				_nnz = -1; // cannot infer stats
 				break;
 			}
 			case DIRECT_CONV2D_BACKWARD_FILTER:
 			{
-				_dim1 = getInput().get(1)._dim1;
-				_dim2 = getInput().get(1)._dim2;
+				// input, dout	
+				_dim1 = params.K;
+				_dim2 = getExtractedVal(params.C, params.R, params.S);
 				_nnz = -1; // cannot infer stats
 				break;
 			}

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/76f3ca5d/src/main/java/org/apache/sysml/parser/DMLTranslator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/DMLTranslator.java b/src/main/java/org/apache/sysml/parser/DMLTranslator.java
index 3373e98..9f63038 100644
--- a/src/main/java/org/apache/sysml/parser/DMLTranslator.java
+++ b/src/main/java/org/apache/sysml/parser/DMLTranslator.java
@@ -25,6 +25,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 
+import org.antlr.v4.parse.ANTLRParser.option_return;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sysml.conf.ConfigurationManager;
@@ -2152,7 +2153,7 @@ public class DMLTranslator
 		if (target == null) {
 			target = createTarget(source);
 		}
-
+		
 		// Construct the hop based on the type of Builtin function
 		switch (source.getOpCode()) {
 
@@ -2785,7 +2786,12 @@ public class DMLTranslator
 			throw new ParseException("Unsupported builtin function type: "+source.getOpCode());
 		}
 		
-		setIdentifierParams(currBuiltinOp, source.getOutput());
+		if( !(source.getOpCode() == BuiltinFunctionOp.CONV2D || source.getOpCode() == BuiltinFunctionOp.CONV2D_BACKWARD_DATA ||
+				source.getOpCode() == BuiltinFunctionOp.CONV2D_BACKWARD_FILTER || source.getOpCode() == BuiltinFunctionOp.MAX_POOL ||
+				source.getOpCode() == BuiltinFunctionOp.MAX_POOL_BACKWARD) ) {
+			// Since the dimension of output doesnot match that of input variable for these operations
+			setIdentifierParams(currBuiltinOp, source.getOutput());
+		}
 		currBuiltinOp.setAllPositions(source.getBeginLine(), source.getBeginColumn(), source.getEndLine(), source.getEndColumn());
 		return currBuiltinOp;
 	}