From b031c389938bfa15e15bb20494c76f86289d77b0 Mon Sep 17 00:00:00 2001 From: shangliang Xu Date: Thu, 13 Jan 2022 19:02:39 +0800 Subject: [PATCH] [bug fix] fix unfold bug in compile time (#38925) --- paddle/fluid/operators/unfold_op.cc | 35 +++++++++++++---------------- paddle/fluid/operators/unfold_op.h | 10 +-------- 2 files changed, 16 insertions(+), 29 deletions(-) diff --git a/paddle/fluid/operators/unfold_op.cc b/paddle/fluid/operators/unfold_op.cc index 3f580884aa5..5a8e7e3efbe 100644 --- a/paddle/fluid/operators/unfold_op.cc +++ b/paddle/fluid/operators/unfold_op.cc @@ -143,22 +143,18 @@ class UnfoldOp : public framework::OperatorWithKernel { "but recieved dilations_height: %d dilations_width: %d.", dilations[0], dilations[1])); - bool contain_unknown_dim = framework::contain_unknown_dim(in_dims); - bool check = ctx->IsRuntime() || !contain_unknown_dim; - if (check) { - std::vector out_dims; - out_dims.push_back(in_dims[0]); - - int output_channels = in_dims[1] * kernel_sizes[0] * kernel_sizes[1]; - out_dims.push_back(output_channels); - - int output_height = - CalcOutputSize(in_dims[2], kernel_sizes[0], dilations[0], paddings[0], - paddings[2], strides[0]); - int output_width = - CalcOutputSize(in_dims[3], kernel_sizes[1], dilations[1], paddings[1], - paddings[3], strides[1]); - // check output height and width + std::vector out_dims; + out_dims.push_back(in_dims[0]); + int output_channels = in_dims[1] * kernel_sizes[0] * kernel_sizes[1]; + out_dims.push_back(output_channels); + + int output_height = + CalcOutputSize(in_dims[2], kernel_sizes[0], dilations[0], paddings[0], + paddings[2], strides[0]); + int output_width = CalcOutputSize(in_dims[3], kernel_sizes[1], dilations[1], + paddings[1], paddings[3], strides[1]); + if (ctx->IsRuntime()) { + // only check output height and width in runtime PADDLE_ENFORCE_GT( output_height, 0, platform::errors::InvalidArgument( @@ -179,11 +175,10 @@ class UnfoldOp : public framework::OperatorWithKernel { in_dims[2], in_dims[3], kernel_sizes[0], kernel_sizes[1], strides[0], strides[1], dilations[0], dilations[1], output_height, output_width)); - int output_col_length = output_height * output_width; - out_dims.push_back(output_col_length); - - ctx->SetOutputDim("Y", framework::make_ddim(out_dims)); } + int output_col_length = output_height * output_width; + out_dims.push_back(output_col_length); + ctx->SetOutputDim("Y", framework::make_ddim(out_dims)); } protected: diff --git a/paddle/fluid/operators/unfold_op.h b/paddle/fluid/operators/unfold_op.h index f22559f1f38..006e4822fea 100644 --- a/paddle/fluid/operators/unfold_op.h +++ b/paddle/fluid/operators/unfold_op.h @@ -16,6 +16,7 @@ #include #include + #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/operators/math/im2col.h" #include "paddle/fluid/operators/math/math_function.h" @@ -29,15 +30,6 @@ inline int CalcOutputSize(int input_size, int filter_size, int dilation, int padding1, int padding2, int stride) { const int dkernel = dilation * (filter_size - 1) + 1; int output_size = (input_size + padding1 + padding2 - dkernel) / stride + 1; - PADDLE_ENFORCE_GT( - output_size, 0UL, - platform::errors::InvalidArgument( - "Due to the settings of padding(%d, %d), filter_size(%d), " - "dilation(%d) and " - "stride(%d), the output size is less than 0, please check " - "again. Input_size:%d", - padding1, padding2, filter_size, dilation, stride, input_size)); - return output_size; } -- GitLab