pypto.conv_backward_input#
产品支持情况#
Ascend 950PR/Ascend 950DT:不支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
功能说明#
实现卷积反向输入梯度(conv backward input)计算,根据输出梯度grad_output和卷积核weight,计算输入特征图的梯度。
函数原型#
conv_backward_input(grad_output, input_size, weight, out_dtype, strides, paddings, dilations, *, groups=1) -> Tensor
参数说明#
参数名 |
输入/输出 |
说明 |
|---|---|---|
grad_output |
输入 |
输出梯度Tensor。 |
input_size |
输入 |
输入特征图的shape,也是输出梯度的shape,维度和grad_output一致。 |
weight |
输入 |
卷积核Tensor。 |
out_dtype |
输入 |
输出Tensor数据类型。 |
strides |
输入 |
卷积步长,参数示例:[1, 1]。 |
paddings |
输入 |
卷积填充,参数示例:[1, 1, 2, 2]。 |
dilations |
输入 |
空洞卷积膨胀率,参数示例:[1, 1]。 |
groups |
输入 |
分组卷积组数,默认1。 |
返回值说明#
返回卷积反向输入梯度计算后的输出Tensor:
2D卷积反向输出shape:(Batch, Cin, Hin, Win)
输出shape各维度范围:[1, 1000000]。
注意:仅依赖grad_output/weight以及属性并不能推导出唯一的输出shape,由于shape计算过程中需要对stride做除法并向下取整导致,所以输出shape是一个范围。以下公式为每个轴的有效范围计算公式,在以下公式产生的[min, max]间的都是有效值,使用者需要将想要输出的shape传入input_size参数:
HinMin = (Hout - 1) * stride_h - pad_top - pad_bottom + (Kh - 1) * dilation_h + 1
WinMin = (Wout - 1) * stride_w - pad_left - pad_right + (Kw - 1) * dilation_w + 1
HinMax = HinMin + stride_h - 1
WinMax = WinMin + stride_w - 1
约束说明#
调用conv_backward_input接口前,必须通过pypto.set_convbp_input_tile_shapes接口设置L1/L0层级的卷积反向TileShape切分大小;调用pypto.set_vec_tile_shapes接口设置输入shape每个维度TileShape切分大小。
不支持bias。
不支持动态shape。
调用示例#
# 2D卷积反向基础示例
grad_output = pypto.tensor((1, 16, 5, 32), pypto.DT_FP16, "grad_output")
weight = pypto.tensor((16, 16, 3, 3), pypto.DT_FP16, "weight")
# 计算输入梯度shape
hin = 5
win = 32
input_size = (1, 16, hin, win)
tile_l1_info = pypto_impl.ConvBpTileL1Info(
tileML1=16, tileKL1=144, tileNL1=16
)
tile_l0_info = pypto_impl.ConvBpTileL0Info(
tileML0=16, tileKL0=16, tileNL0=16
)
pypto.set_convbp_input_tile_shapes(tile_l1_info, tile_l0_info)
pypto.set_vec_tile_shapes(16, 16, 16, 16)
out = pypto.conv_backward_input(
grad_output,
input_size,
weight,
pypto.DT_FP16,
strides=[1, 1],
paddings=[1, 1, 1, 1],
dilations=[1, 1]
)