Float to float label encoder (#15400)

This commit is contained in:
Aditya Goel 2023-04-07 00:05:36 +01:00 committed by GitHub
parent 276c0a00e4
commit e5617617fc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 1 deletions

View file

@ -2338,7 +2338,7 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 2,
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 2, string_int64, LabelEncoder);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 2, int64_int64, LabelEncoder);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 2, string_string, LabelEncoder);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 2, float_float, LabelEncoder);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 3, float, TreeEnsembleClassifier);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 3, double, TreeEnsembleClassifier);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 3, int64_t, TreeEnsembleClassifier);
@ -2434,6 +2434,8 @@ Status RegisterOnnxMLOperatorKernels(KernelRegistry& kernel_registry) {
LabelEncoder)>,
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 2, string_string,
LabelEncoder)>,
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 2, float_float,
LabelEncoder)>,
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 3, float,
TreeEnsembleClassifier)>,
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 3, double,

View file

@ -151,6 +151,24 @@ void LabelEncoder_2<std::string, std::string>::InitializeSomeFields(const OpKern
info.GetAttrOrDefault<std::string>("default_string", &_default_value, std::string("_Unused"));
};
ONNX_CPU_OPERATOR_TYPED_ML_KERNEL(
LabelEncoder,
2,
float_float,
KernelDefBuilder().TypeConstraint("T1",
std::vector<MLDataType>{DataTypeImpl::GetTensorType<float>()})
.TypeConstraint("T2",
std::vector<MLDataType>{DataTypeImpl::GetTensorType<float>()}),
LabelEncoder_2<float, float>)
template <>
void LabelEncoder_2<float, float>::InitializeSomeFields(const OpKernelInfo& info) {
_key_field_name = "keys_floats";
_value_field_name = "values_floats";
info.GetAttrOrDefault<float>("default_float", &_default_value, -0.0f);
};
ONNX_CPU_OPERATOR_TYPED_ML_KERNEL(
LabelEncoder,
2,

View file

@ -211,5 +211,26 @@ TEST(LabelEncoder, StringToStringOpset2) {
test.Run();
}
TEST(LabelEncoder, FloatToFloatOpset2) {
std::vector<std::int64_t> dims{1, 4};
std::vector<float> input{-1.0f, 0.0f, 3.1427f, 7.25f};
std::vector<float> output{1.0f, 0.0f, 2.718f, NAN};
OpTester test("LabelEncoder", 2, onnxruntime::kMLDomain);
const std::vector<float> keys{-1.0f, 0.0f, 7.25f};
const std::vector<float> values{1.0f, 0.0f, NAN};
test.AddAttribute("keys_floats", keys);
test.AddAttribute("values_floats", values);
test.AddAttribute("default_float", 2.718f);
test.AddInput<float>("X", dims, input);
test.AddOutput<float>("Y", dims, output);
test.Run();
}
} // namespace test
} // namespace onnxruntime