From 0c7561a11f843a4b707272c917feb3996df4a499 Mon Sep 17 00:00:00 2001 From: wenxizhu Date: Wed, 26 Jun 2019 13:31:09 +0800 Subject: [PATCH 1/4] Bug fix: support 3d dilated convolution. --- tensorflow/core/kernels/mkl_conv_ops.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tensorflow/core/kernels/mkl_conv_ops.h b/tensorflow/core/kernels/mkl_conv_ops.h index c12a4ff0f0c..8222619deca 100644 --- a/tensorflow/core/kernels/mkl_conv_ops.h +++ b/tensorflow/core/kernels/mkl_conv_ops.h @@ -411,14 +411,15 @@ class MklDnnConvUtil { input_cols, filter_cols, dilation_cols, stride_cols, padding_type, &out_cols, &pad_left, &pad_right)); } else { - OP_REQUIRES_OK(context_, GetWindowedOutputSizeVerbose( - input_planes, filter_planes, stride_planes, - padding_, &out_planes, &pad_D1, &pad_D2)); - OP_REQUIRES_OK(context_, GetWindowedOutputSizeVerbose( - input_rows, filter_rows, stride_rows, + OP_REQUIRES_OK(context_, GetWindowedOutputSizeVerboseV2( + input_planes, filter_planes, dilation_planes, + stride_planes, padding_, &out_planes, &pad_D1, + &pad_D2)); + OP_REQUIRES_OK(context_, GetWindowedOutputSizeVerboseV2( + input_rows, filter_rows, dilation_rows, stride_rows, padding_, &out_rows, &pad_top, &pad_bottom)); - OP_REQUIRES_OK(context_, GetWindowedOutputSizeVerbose( - input_cols, filter_cols, stride_cols, + OP_REQUIRES_OK(context_, GetWindowedOutputSizeVerboseV2( + input_cols, filter_cols, dilation_cols, stride_cols, padding_, &out_cols, &pad_left, &pad_right)); } From 950fac03a362d1df71231cd6b515804209062c14 Mon Sep 17 00:00:00 2001 From: wenxizhu Date: Mon, 1 Jul 2019 13:53:23 +0800 Subject: [PATCH 2/4] Add testcases. --- .../python/kernel_tests/conv_ops_3d_test.py | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/tensorflow/python/kernel_tests/conv_ops_3d_test.py b/tensorflow/python/kernel_tests/conv_ops_3d_test.py index e136d091393..bdb8bc514c9 100644 --- a/tensorflow/python/kernel_tests/conv_ops_3d_test.py +++ b/tensorflow/python/kernel_tests/conv_ops_3d_test.py @@ -220,13 +220,12 @@ class Conv3DTest(test.TestCase): expected=expected_output) def testConv3D1x1x1Filter2x1x1Dilation(self): - if test.is_gpu_available(cuda_only=True): - self._VerifyDilatedConvValues( - tensor_in_sizes=[1, 3, 6, 1, 1], - filter_in_sizes=[1, 1, 1, 1, 1], - stride=1, - padding="VALID", - dilations=[2, 1, 1]) + self._VerifyDilatedConvValues( + tensor_in_sizes=[1, 3, 6, 1, 1], + filter_in_sizes=[1, 1, 1, 1, 1], + stride=1, + padding="VALID", + dilations=[2, 1, 1]) # Expected values computed using scipy's correlate function. def testConv3D2x2x2Filter(self): @@ -245,13 +244,12 @@ class Conv3DTest(test.TestCase): expected=expected_output) def testConv3D2x2x2Filter1x2x1Dilation(self): - if test.is_gpu_available(cuda_only=True): - self._VerifyDilatedConvValues( - tensor_in_sizes=[1, 4, 6, 3, 1], - filter_in_sizes=[2, 2, 2, 1, 1], - stride=1, - padding="VALID", - dilations=[1, 2, 1]) + self._VerifyDilatedConvValues( + tensor_in_sizes=[1, 4, 6, 3, 1], + filter_in_sizes=[2, 2, 2, 1, 1], + stride=1, + padding="VALID", + dilations=[1, 2, 1]) def testConv3DStrides(self): expected_output = [ From b47c1aafac45396ad1b3c620ac87029d45801477 Mon Sep 17 00:00:00 2001 From: wenxizhu Date: Wed, 3 Jul 2019 14:46:34 +0800 Subject: [PATCH 3/4] Fix clang-format issues. --- tensorflow/core/kernels/mkl_conv_ops.h | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/tensorflow/core/kernels/mkl_conv_ops.h b/tensorflow/core/kernels/mkl_conv_ops.h index 8222619deca..a314f76b83d 100644 --- a/tensorflow/core/kernels/mkl_conv_ops.h +++ b/tensorflow/core/kernels/mkl_conv_ops.h @@ -196,9 +196,8 @@ class MklDnnConvUtil { filter_shape.DebugString())); for (int i = 0; i < ((strides_.size() == 4) ? 3 : 5); i++) { - OP_REQUIRES(context_, - FastBoundsCheck(filter_shape.dim_size(i), - std::numeric_limits::max()), + OP_REQUIRES(context_, FastBoundsCheck(filter_shape.dim_size(i), + std::numeric_limits::max()), errors::InvalidArgument("filter too large")); } @@ -413,14 +412,16 @@ class MklDnnConvUtil { } else { OP_REQUIRES_OK(context_, GetWindowedOutputSizeVerboseV2( input_planes, filter_planes, dilation_planes, - stride_planes, padding_, &out_planes, &pad_D1, - &pad_D2)); - OP_REQUIRES_OK(context_, GetWindowedOutputSizeVerboseV2( - input_rows, filter_rows, dilation_rows, stride_rows, - padding_, &out_rows, &pad_top, &pad_bottom)); - OP_REQUIRES_OK(context_, GetWindowedOutputSizeVerboseV2( - input_cols, filter_cols, dilation_cols, stride_cols, - padding_, &out_cols, &pad_left, &pad_right)); + stride_planes, padding_, &out_planes, + &pad_D1, &pad_D2)); + OP_REQUIRES_OK(context_, + GetWindowedOutputSizeVerboseV2( + input_rows, filter_rows, dilation_rows, stride_rows, + padding_, &out_rows, &pad_top, &pad_bottom)); + OP_REQUIRES_OK(context_, + GetWindowedOutputSizeVerboseV2( + input_cols, filter_cols, dilation_cols, stride_cols, + padding_, &out_cols, &pad_left, &pad_right)); } if (is_conv2d) { From b1fca4d98c2fe2bb5a697100707fe6f82386fac7 Mon Sep 17 00:00:00 2001 From: wenxizhu Date: Mon, 8 Jul 2019 15:47:58 +0800 Subject: [PATCH 4/4] Add 'test_util.IsMklEnabled()' to guard tests to only mkl. --- .../python/kernel_tests/conv_ops_3d_test.py | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/tensorflow/python/kernel_tests/conv_ops_3d_test.py b/tensorflow/python/kernel_tests/conv_ops_3d_test.py index bdb8bc514c9..deb465a0474 100644 --- a/tensorflow/python/kernel_tests/conv_ops_3d_test.py +++ b/tensorflow/python/kernel_tests/conv_ops_3d_test.py @@ -32,6 +32,7 @@ from tensorflow.python.ops import gradients_impl from tensorflow.python.ops import nn_ops import tensorflow.python.ops.nn_grad # pylint: disable=unused-import from tensorflow.python.platform import test +from tensorflow.python.framework import test_util def GetTestConfigs(): @@ -220,12 +221,13 @@ class Conv3DTest(test.TestCase): expected=expected_output) def testConv3D1x1x1Filter2x1x1Dilation(self): - self._VerifyDilatedConvValues( - tensor_in_sizes=[1, 3, 6, 1, 1], - filter_in_sizes=[1, 1, 1, 1, 1], - stride=1, - padding="VALID", - dilations=[2, 1, 1]) + if test.is_gpu_available(cuda_only=True) or test_util.IsMklEnabled(): + self._VerifyDilatedConvValues( + tensor_in_sizes=[1, 3, 6, 1, 1], + filter_in_sizes=[1, 1, 1, 1, 1], + stride=1, + padding="VALID", + dilations=[2, 1, 1]) # Expected values computed using scipy's correlate function. def testConv3D2x2x2Filter(self): @@ -244,12 +246,13 @@ class Conv3DTest(test.TestCase): expected=expected_output) def testConv3D2x2x2Filter1x2x1Dilation(self): - self._VerifyDilatedConvValues( - tensor_in_sizes=[1, 4, 6, 3, 1], - filter_in_sizes=[2, 2, 2, 1, 1], - stride=1, - padding="VALID", - dilations=[1, 2, 1]) + if test.is_gpu_available(cuda_only=True) or test_util.IsMklEnabled(): + self._VerifyDilatedConvValues( + tensor_in_sizes=[1, 4, 6, 3, 1], + filter_in_sizes=[2, 2, 2, 1, 1], + stride=1, + padding="VALID", + dilations=[1, 2, 1]) def testConv3DStrides(self): expected_output = [