diff --git a/src/onnx/parse_dynamicquantizelinear.cpp b/src/onnx/parse_dynamicquantizelinear.cpp index af5d1e8eb4a..fc03f90f725 100644 --- a/src/onnx/parse_dynamicquantizelinear.cpp +++ b/src/onnx/parse_dynamicquantizelinear.cpp @@ -99,7 +99,7 @@ struct parse_dynamicquantizelinear : op_parser auto x_type = x_shape.type(); // 1. Computing y_scale - auto l0 = info.add_literal(migraphx::literal{migraphx::shape{x_type}, {0}}); + auto l0 = info.add_literal({0.f}); // DynamicQuantizeLinear only has uint8 quantization auto q_max = info.add_literal( migraphx::literal{migraphx::shape{x_type}, {std::numeric_limits::max()}}); @@ -111,23 +111,23 @@ struct parse_dynamicquantizelinear : op_parser x_reshape = info.add_instruction( migraphx::make_op("reshape", {{"dims", {x_shape.elements()}}}), x); } + x_reshape = info.add_instruction(migraphx::make_op("concat", {{"axis", 0}}), x_reshape, l0); // maximum(0, max(x)) auto topk_max = info.add_instruction( migraphx::make_op("topk", {{"axis", 0}, {"k", 1}, {"largest", true}}), x_reshape); auto max_x = info.add_instruction(migraphx::make_op("get_tuple_elem", {{"index", 0}}), topk_max); - max_x = info.add_instruction(migraphx::make_op("max"), l0, max_x); // minimum(0, min(x)) auto topk_min = info.add_instruction( migraphx::make_op("topk", {{"axis", 0}, {"k", 1}, {"largest", false}}), x_reshape); auto min_x = info.add_instruction(migraphx::make_op("get_tuple_elem", {{"index", 0}}), topk_min); - min_x = info.add_instruction(migraphx::make_op("min"), l0, min_x); // y_scale = (maximum(0, max(x)) - minimum(0, min(x))) / (qmax - qmin) - auto sub0 = info.add_instruction(migraphx::make_op("sub"), max_x, min_x); - auto div = info.add_instruction(migraphx::make_op("sub"), q_max, q_min); + auto sub0 = info.add_instruction(migraphx::make_op("sub"), max_x, min_x); + // qmax - qmin is always 255 + auto div = q_max; auto y_scale = info.add_instruction(migraphx::make_op("div"), sub0, div); // 2. Computing y_zero_point diff --git a/test/onnx/onnx_test.cpp b/test/onnx/onnx_test.cpp index 9a806cdd12f..61aad03e961 100644 --- a/test/onnx/onnx_test.cpp +++ b/test/onnx/onnx_test.cpp @@ -1873,25 +1873,24 @@ TEST_CASE(dynamicquantizelinear_2d_test) auto x_type = migraphx::shape::float_type; auto x = mm->add_parameter("x", {x_type, x_dims}); - auto l0 = mm->add_literal(migraphx::literal{migraphx::shape{x_type}, {0}}); + auto l0 = mm->add_literal({0.f}); auto q_max = mm->add_literal( migraphx::literal{migraphx::shape{x_type}, {std::numeric_limits::max()}}); auto q_min = mm->add_literal( migraphx::literal{migraphx::shape{x_type}, {std::numeric_limits::min()}}); auto x_reshape = mm->add_instruction(migraphx::make_op("reshape", {{"dims", {12}}}), x); + x_reshape = mm->add_instruction(migraphx::make_op("concat", {{"axis", 0}}), x_reshape, l0); auto topk_max = mm->add_instruction( migraphx::make_op("topk", {{"axis", 0}, {"k", 1}, {"largest", true}}), x_reshape); auto max_x = mm->add_instruction(migraphx::make_op("get_tuple_elem", {{"index", 0}}), topk_max); - max_x = mm->add_instruction(migraphx::make_op("max"), l0, max_x); auto topk_min = mm->add_instruction( migraphx::make_op("topk", {{"axis", 0}, {"k", 1}, {"largest", false}}), x_reshape); auto min_x = mm->add_instruction(migraphx::make_op("get_tuple_elem", {{"index", 0}}), topk_min); - min_x = mm->add_instruction(migraphx::make_op("min"), l0, min_x); auto sub0 = mm->add_instruction(migraphx::make_op("sub"), max_x, min_x); - auto div = mm->add_instruction(migraphx::make_op("sub"), q_max, q_min); + auto div = q_max; auto y_scale = mm->add_instruction(migraphx::make_op("div"), sub0, div); auto sub1 = mm->add_instruction(migraphx::make_op("sub"), q_min, min_x);