|
|
@ -1186,16 +1186,18 @@ class Conv2DBackpropInput(PrimitiveWithInfer):
|
|
|
|
kernel_w = self.kernel_size[1]
|
|
|
|
kernel_w = self.kernel_size[1]
|
|
|
|
stride_h = self.stride[0]
|
|
|
|
stride_h = self.stride[0]
|
|
|
|
stride_w = self.stride[1]
|
|
|
|
stride_w = self.stride[1]
|
|
|
|
|
|
|
|
dilation_h = self.dilation[2]
|
|
|
|
|
|
|
|
dilation_w = self.dilation[3]
|
|
|
|
# default pad mode is valid
|
|
|
|
# default pad mode is valid
|
|
|
|
pad_list = (0, 0, 0, 0)
|
|
|
|
pad_list = (0, 0, 0, 0)
|
|
|
|
if self.pad_list:
|
|
|
|
if self.pad_list:
|
|
|
|
pad_list = tuple(self.pad_list)
|
|
|
|
pad_list = tuple(self.pad_list)
|
|
|
|
elif self.pad_mode == "SAME":
|
|
|
|
elif self.pad_mode == "SAME":
|
|
|
|
pad_needed_h = max(0, (dout_shape[2] - 1) * stride_h + kernel_h - x_size_v[2])
|
|
|
|
pad_needed_h = max(0, (dout_shape[2] - 1) * stride_h + dilation_h * (kernel_h - 1) + 1 - x_size_v[2])
|
|
|
|
pad_top = math.floor(pad_needed_h / 2)
|
|
|
|
pad_top = math.floor(pad_needed_h / 2)
|
|
|
|
pad_bottom = pad_needed_h - pad_top
|
|
|
|
pad_bottom = pad_needed_h - pad_top
|
|
|
|
|
|
|
|
|
|
|
|
pad_needed_w = max(0, (dout_shape[3] - 1) * stride_w + kernel_w - x_size_v[3])
|
|
|
|
pad_needed_w = max(0, (dout_shape[3] - 1) * stride_w + dilation_w * (kernel_w - 1) + 1 - x_size_v[3])
|
|
|
|
pad_left = math.floor(pad_needed_w / 2)
|
|
|
|
pad_left = math.floor(pad_needed_w / 2)
|
|
|
|
pad_right = pad_needed_w - pad_left
|
|
|
|
pad_right = pad_needed_w - pad_left
|
|
|
|
pad_list = (pad_top, pad_bottom, pad_left, pad_right)
|
|
|
|
pad_list = (pad_top, pad_bottom, pad_left, pad_right)
|
|
|
|