diff --git a/paddle/phi/infermeta/unary.cc b/paddle/phi/infermeta/unary.cc index f8798982581aa21747b99779c1c575b1bdcfbec2..c0b6c2b0e225cb331f3bb85be2e5d610e1297ece 100644 --- a/paddle/phi/infermeta/unary.cc +++ b/paddle/phi/infermeta/unary.cc @@ -3872,6 +3872,7 @@ void UnfoldInferMeta(const MetaTensor& x, paddings[1], paddings[3], strides[1]); + int output_col_length = output_height * output_width; if (config.is_runtime) { // only check output height and width in runtime PADDLE_ENFORCE_GT( @@ -3910,8 +3911,10 @@ void UnfoldInferMeta(const MetaTensor& x, dilations[1], output_height, output_width)); + } else { + output_col_length = + output_height == -1 || output_width == -1 ? -1 : output_col_length; } - int output_col_length = output_height * output_width; out_dims.push_back(output_col_length); out->set_dims(phi::make_ddim(out_dims)); } diff --git a/paddle/phi/kernels/funcs/unfold_functor.h b/paddle/phi/kernels/funcs/unfold_functor.h index 2bd5437a7f10a264426b8e87f1423d2b1bc454de..5a32bf4a3432edcd064eb837658918b297308632 100644 --- a/paddle/phi/kernels/funcs/unfold_functor.h +++ b/paddle/phi/kernels/funcs/unfold_functor.h @@ -26,7 +26,7 @@ inline int CalcOutputSize(int input_size, int stride) { const int dkernel = dilation * (filter_size - 1) + 1; int output_size = (input_size + padding1 + padding2 - dkernel) / stride + 1; - return output_size; + return input_size == -1 ? -1 : output_size; } } // namespace funcs