aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Yao Zhang <yaozhang@google.com>2018-01-02 11:32:34 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-01-02 11:39:54 -0800
commite0b647e10ae1e96e350b2ae75d14fd35fd3a0557 (patch)
tree5d0b6dcc3190c267aa73bb5f234133785105ab9b
parent9388969277d80731d62cd2cfce051504e2dc9c4a (diff)
Support PadV2, MirrorPad, and MirrorPadGrad ops.
PiperOrigin-RevId: 180571040
-rw-r--r--tensorflow/core/grappler/op_types.cc11
-rw-r--r--tensorflow/core/grappler/op_types.h2
-rw-r--r--tensorflow/core/grappler/optimizers/layout_optimizer.cc3
3 files changed, 14 insertions, 2 deletions
diff --git a/tensorflow/core/grappler/op_types.cc b/tensorflow/core/grappler/op_types.cc
index cb912b5391..dac96730e6 100644
--- a/tensorflow/core/grappler/op_types.cc
+++ b/tensorflow/core/grappler/op_types.cc
@@ -175,6 +175,12 @@ bool IsMerge(const NodeDef& node) {
bool IsMinimum(const NodeDef& node) { return node.op() == "Minimum"; }
+bool IsMirrorPad(const NodeDef& node) { return node.op() == "MirrorPad"; }
+
+bool IsMirrorPadGrad(const NodeDef& node) {
+ return node.op() == "MirrorPadGrad";
+}
+
bool IsMod(const NodeDef& node) { return node.op() == "Mod"; }
bool IsMul(const NodeDef& node) { return node.op() == "Mul"; }
@@ -188,7 +194,10 @@ bool IsNextIteration(const NodeDef& node) {
return op == "NextIteration" || op == "RefNextIteration";
}
-bool IsPad(const NodeDef& node) { return node.op() == "Pad"; }
+bool IsPad(const NodeDef& node) {
+ const auto& op = node.op();
+ return op == "Pad" || op == "PadV2";
+}
bool IsPlaceholder(const NodeDef& node) {
const auto& op = node.op();
diff --git a/tensorflow/core/grappler/op_types.h b/tensorflow/core/grappler/op_types.h
index 59217e3d05..9b72ba4be5 100644
--- a/tensorflow/core/grappler/op_types.h
+++ b/tensorflow/core/grappler/op_types.h
@@ -71,6 +71,8 @@ bool IsLogicalOr(const NodeDef& node);
bool IsMaximum(const NodeDef& node);
bool IsMerge(const NodeDef& node);
bool IsMinimum(const NodeDef& node);
+bool IsMirrorPad(const NodeDef& node);
+bool IsMirrorPadGrad(const NodeDef& node);
bool IsMod(const NodeDef& node);
bool IsMul(const NodeDef& node);
bool IsMatMul(const NodeDef& node);
diff --git a/tensorflow/core/grappler/optimizers/layout_optimizer.cc b/tensorflow/core/grappler/optimizers/layout_optimizer.cc
index 2786b8cf62..845aabcb23 100644
--- a/tensorflow/core/grappler/optimizers/layout_optimizer.cc
+++ b/tensorflow/core/grappler/optimizers/layout_optimizer.cc
@@ -1752,7 +1752,8 @@ class DataLayoutOptimizer : GraphProcessor {
node_processor.reset(new IdentityNProcessor(opt_cxt));
} else if (IsMerge(*node)) {
node_processor.reset(new MergeProcessor(opt_cxt));
- } else if (IsPad(*node)) {
+ } else if (IsPad(*node) || IsMirrorPad(*node) ||
+ IsMirrorPadGrad(*node)) {
node_processor.reset(new PadProcessor(opt_cxt));
} else if (IsReverseV2(*node)) {
node_processor.reset(new ReverseProcessor(opt_cxt));