Pad value for MaxPool must be negative infinity instead of zero (#20)
Co-authored-by: Alexandre Eichenberger <alexe@us.ibm.com>
This commit is contained in:
parent
811b63e031
commit
162ac1bc32
|
@ -33,6 +33,11 @@ class StringAttrOfValue<string val>:
|
||||||
class FloatAttrOfValue<int val>:
|
class FloatAttrOfValue<int val>:
|
||||||
NativeCodeCall<"FloatAttr::get($0.getType().cast<TensorType>().getElementType(), " # val # ")">;
|
NativeCodeCall<"FloatAttr::get($0.getType().cast<TensorType>().getElementType(), " # val # ")">;
|
||||||
|
|
||||||
|
// Create a FloatAttr for the negative infinity.
|
||||||
|
def FloatAttrOfNegativeInfinity:
|
||||||
|
NativeCodeCall<"FloatAttr::get($0.getType().cast<TensorType>().getElementType(), "
|
||||||
|
"-std::numeric_limits<double>::infinity())">;
|
||||||
|
|
||||||
// Create an ArrayAttr of IntergerAttr(s) of zero values.
|
// Create an ArrayAttr of IntergerAttr(s) of zero values.
|
||||||
// This function is used for padding attribute in MaxPoolSingleOut.
|
// This function is used for padding attribute in MaxPoolSingleOut.
|
||||||
def createArrayAttrOfZerosFrom:
|
def createArrayAttrOfZerosFrom:
|
||||||
|
@ -80,7 +85,7 @@ def MaxPoolSingleOutOpPaddingPattern: Pat<
|
||||||
(ONNXMaxPoolSingleOutOp
|
(ONNXMaxPoolSingleOutOp
|
||||||
(ONNXPadConstantValuePadOp $x,
|
(ONNXPadConstantValuePadOp $x,
|
||||||
(insertZerosForNonPaddedDims<2> $pads),
|
(insertZerosForNonPaddedDims<2> $pads),
|
||||||
(FloatAttrOfValue<0> $res),
|
(FloatAttrOfNegativeInfinity $res),
|
||||||
(StringAttrOfValue<"constant">)),
|
(StringAttrOfValue<"constant">)),
|
||||||
$auto_pad, $ceil_mode, $dilation, $kernel_shape,
|
$auto_pad, $ceil_mode, $dilation, $kernel_shape,
|
||||||
(createArrayAttrOfZerosFrom $pads),
|
(createArrayAttrOfZerosFrom $pads),
|
||||||
|
|
|
@ -82,7 +82,7 @@ func @test_maxpoolsingleout_split(%arg0: tensor<5x5x32x32xf32>) -> tensor<5x8x32
|
||||||
%0 = "onnx.MaxPoolSingleOut"(%arg0) {auto_pad = "NOTSET", ceil_mode = 0, kernel_shape = [5,3], pads = [1, 2, 3, 4] } : (tensor<5x5x32x32xf32>) -> tensor<5x8x32x39xf32>
|
%0 = "onnx.MaxPoolSingleOut"(%arg0) {auto_pad = "NOTSET", ceil_mode = 0, kernel_shape = [5,3], pads = [1, 2, 3, 4] } : (tensor<5x5x32x32xf32>) -> tensor<5x8x32x39xf32>
|
||||||
"std.return"(%0) : (tensor<5x8x32x39xf32>) -> ()
|
"std.return"(%0) : (tensor<5x8x32x39xf32>) -> ()
|
||||||
|
|
||||||
// CHECK-NEXT: %0 = "onnx.PadConstantValuePad"(%arg0) {constant_value = 0.000000e+00 : f32, mode = "constant", pads = [0, 0, 1, 2, 0, 0, 3, 4]} : (tensor<5x5x32x32xf32>) -> tensor<5x8x32x39xf32>
|
// CHECK-NEXT: %0 = "onnx.PadConstantValuePad"(%arg0) {constant_value = 0xFF800000 : f32, mode = "constant", pads = [0, 0, 1, 2, 0, 0, 3, 4]} : (tensor<5x5x32x32xf32>) -> tensor<5x8x32x39xf32>
|
||||||
// CHECK-NEXT: %1 = "onnx.MaxPoolSingleOut"(%0) {auto_pad = "NOTSET", ceil_mode = 0 : i64, kernel_shape = [5, 3], pads = [0, 0, 0, 0], storage_order = 0 : i64} : (tensor<5x8x32x39xf32>) -> tensor<5x8x32x39xf32>
|
// CHECK-NEXT: %1 = "onnx.MaxPoolSingleOut"(%0) {auto_pad = "NOTSET", ceil_mode = 0 : i64, kernel_shape = [5, 3], pads = [0, 0, 0, 0], storage_order = 0 : i64} : (tensor<5x8x32x39xf32>) -> tensor<5x8x32x39xf32>
|
||||||
// CHECK-NEXT: return %1 : tensor<5x8x32x39xf32>
|
// CHECK-NEXT: return %1 : tensor<5x8x32x39xf32>
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ func @test_maxpoolsingleout_split_unknown_dims(%arg0: tensor<*xf32>) -> tensor<*
|
||||||
%0 = "onnx.MaxPoolSingleOut"(%arg0) {auto_pad = "NOTSET", ceil_mode = 0, kernel_shape = [5,3], pads = [1, 2, 3, 4] } : (tensor<*xf32>) -> tensor<*xf32>
|
%0 = "onnx.MaxPoolSingleOut"(%arg0) {auto_pad = "NOTSET", ceil_mode = 0, kernel_shape = [5,3], pads = [1, 2, 3, 4] } : (tensor<*xf32>) -> tensor<*xf32>
|
||||||
"std.return"(%0) : (tensor<*xf32>) -> ()
|
"std.return"(%0) : (tensor<*xf32>) -> ()
|
||||||
|
|
||||||
// CHECK-NEXT: %0 = "onnx.PadConstantValuePad"(%arg0) {constant_value = 0.000000e+00 : f32, mode = "constant", pads = [0, 0, 1, 2, 0, 0, 3, 4]} : (tensor<*xf32>) -> tensor<*xf32>
|
// CHECK-NEXT: %0 = "onnx.PadConstantValuePad"(%arg0) {constant_value = 0xFF800000 : f32, mode = "constant", pads = [0, 0, 1, 2, 0, 0, 3, 4]} : (tensor<*xf32>) -> tensor<*xf32>
|
||||||
// CHECK-NEXT: %1 = "onnx.MaxPoolSingleOut"(%0) {auto_pad = "NOTSET", ceil_mode = 0 : i64, kernel_shape = [5, 3], pads = [0, 0, 0, 0], storage_order = 0 : i64} : (tensor<*xf32>) -> tensor<*xf32>
|
// CHECK-NEXT: %1 = "onnx.MaxPoolSingleOut"(%0) {auto_pad = "NOTSET", ceil_mode = 0 : i64, kernel_shape = [5, 3], pads = [0, 0, 0, 0], storage_order = 0 : i64} : (tensor<*xf32>) -> tensor<*xf32>
|
||||||
// CHECK-NEXT: return %1 : tensor<*xf32>
|
// CHECK-NEXT: return %1 : tensor<*xf32>
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue