aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/receptive_field
diff options
context:
space:
mode:
authorGravatar Russell Power <power@google.com>2018-01-29 14:26:43 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-01-29 14:30:31 -0800
commit8fdef24247814d322991127091cc6d0c1eb60380 (patch)
tree003b9436785dbeede7948577c4afe7fc8bf714a9 /tensorflow/contrib/receptive_field
parent412a905ebc68984eee862a29ecdb2a08dae359c0 (diff)
Switch over to max_pool_v2 in Python
This fix is a follow up to 11875 so that MaxPool in Python use v2 version. As 11875 has been merged some time ago, this fix conforms to the deprecation policy. This fix is realted to 11875 and 4746. Signed-off-by: Yong Tang <yong.tang.github@outlook.com> PiperOrigin-RevId: 183727668
Diffstat (limited to 'tensorflow/contrib/receptive_field')
-rw-r--r--tensorflow/contrib/receptive_field/python/util/parse_layer_parameters.py63
1 files changed, 46 insertions, 17 deletions
diff --git a/tensorflow/contrib/receptive_field/python/util/parse_layer_parameters.py b/tensorflow/contrib/receptive_field/python/util/parse_layer_parameters.py
index 44998b3b65..bc383a8034 100644
--- a/tensorflow/contrib/receptive_field/python/util/parse_layer_parameters.py
+++ b/tensorflow/contrib/receptive_field/python/util/parse_layer_parameters.py
@@ -35,20 +35,34 @@ _VALID_PADDING = ["VALID", b"VALID"]
_SAME_PADDING = ["SAME", b"SAME"]
-def _stride_size(node):
+def _stride_size(node, name_to_node):
"""Computes stride size given a TF node.
Args:
node: Tensorflow node (NodeDef proto).
+ name_to_node: For MaxPoolV2, mapping from variable name Tensorflow node.
Returns:
stride_x: Stride size for horizontal direction (integer).
stride_y: Stride size for vertical direction (integer).
+
+ Raises:
+ ValueError: If stride input cannot be found in `name_to_node`.
"""
- strides_attr = node.attr["strides"]
- logging.vlog(4, "strides_attr = %s", strides_attr)
- stride_y = strides_attr.list.i[1]
- stride_x = strides_attr.list.i[2]
+ if node.op == "MaxPoolV2":
+ strides_input_name = node.input[2]
+ if not strides_input_name.endswith("/strides"):
+ raise ValueError("Strides name does not end with '/strides'")
+ strides_node = name_to_node[strides_input_name]
+ value = strides_node.attr["value"]
+ t = make_ndarray(value.tensor)
+ stride_y = t[1]
+ stride_x = t[2]
+ else:
+ strides_attr = node.attr["strides"]
+ logging.vlog(4, "strides_attr = %s", strides_attr)
+ stride_y = strides_attr.list.i[1]
+ stride_x = strides_attr.list.i[2]
return stride_x, stride_y
@@ -144,11 +158,12 @@ def _padding_size_conv_pool(node, kernel_size, stride, input_resolution=None):
return total_padding, padding
-def _pool_kernel_size(node):
+def _pool_kernel_size(node, name_to_node):
"""Computes kernel size given a TF pooling node.
Args:
node: Tensorflow node (NodeDef proto).
+ name_to_node: For MaxPoolV2, mapping from node name to NodeDef.
Returns:
kernel_size_x: Kernel size for horizontal direction (integer).
@@ -157,13 +172,27 @@ def _pool_kernel_size(node):
Raises:
ValueError: If pooling is invalid.
"""
- ksize = node.attr["ksize"]
- kernel_size_y = ksize.list.i[1]
- kernel_size_x = ksize.list.i[2]
- if ksize.list.i[0] != 1:
- raise ValueError("pool ksize for first dim is not 1")
- if ksize.list.i[3] != 1:
- raise ValueError("pool ksize for last dim is not 1")
+ if node.op == "MaxPoolV2":
+ ksize_input_name = node.input[1]
+ if not ksize_input_name.endswith("/ksize"):
+ raise ValueError("Kernel size name does not end with '/ksize'")
+ ksize_node = name_to_node[ksize_input_name]
+ value = ksize_node.attr["value"]
+ t = make_ndarray(value.tensor)
+ kernel_size_y = t[1]
+ kernel_size_x = t[2]
+ if t[0] != 1:
+ raise ValueError("pool ksize for first dim is not 1")
+ if t[3] != 1:
+ raise ValueError("pool ksize for last dim is not 1")
+ else:
+ ksize = node.attr["ksize"]
+ kernel_size_y = ksize.list.i[1]
+ kernel_size_x = ksize.list.i[2]
+ if ksize.list.i[0] != 1:
+ raise ValueError("pool ksize for first dim is not 1")
+ if ksize.list.i[3] != 1:
+ raise ValueError("pool ksize for last dim is not 1")
return kernel_size_x, kernel_size_y
@@ -243,7 +272,7 @@ def get_layer_params(node, name_to_node, input_resolution=None, force=False):
logging.vlog(3, "node.op = %s", node.op)
logging.vlog(4, "node = %s", node)
if node.op == "Conv2D" or node.op == "DepthwiseConv2dNative":
- stride_x, stride_y = _stride_size(node)
+ stride_x, stride_y = _stride_size(node, name_to_node)
kernel_size_x, kernel_size_y = _conv_kernel_size(node, name_to_node)
# Compute the padding for this node separately for each direction.
total_padding_x, padding_x = _padding_size_conv_pool(
@@ -260,9 +289,9 @@ def get_layer_params(node, name_to_node, input_resolution=None, force=False):
stride_y = 1
total_padding_x, padding_x, total_padding_y, padding_y = (
_padding_size_pad_layer(node, name_to_node))
- elif node.op == "MaxPool" or node.op == "AvgPool":
- stride_x, stride_y = _stride_size(node)
- kernel_size_x, kernel_size_y = _pool_kernel_size(node)
+ elif node.op == "MaxPool" or node.op == "MaxPoolV2" or node.op == "AvgPool":
+ stride_x, stride_y = _stride_size(node, name_to_node)
+ kernel_size_x, kernel_size_y = _pool_kernel_size(node, name_to_node)
# Compute the padding for this node separately for each direction.
total_padding_x, padding_x = _padding_size_conv_pool(
node, kernel_size_x, stride_x, input_resolution[1]