diff --git a/onnxruntime/core/providers/cpu/cpu_execution_provider.cc b/onnxruntime/core/providers/cpu/cpu_execution_provider.cc index 3aeb6f651d..8af6b9cb30 100644 --- a/onnxruntime/core/providers/cpu/cpu_execution_provider.cc +++ b/onnxruntime/core/providers/cpu/cpu_execution_provider.cc @@ -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, + BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo::InitializeSomeFields(const OpKern info.GetAttrOrDefault("default_string", &_default_value, std::string("_Unused")); }; +ONNX_CPU_OPERATOR_TYPED_ML_KERNEL( + LabelEncoder, + 2, + float_float, + KernelDefBuilder().TypeConstraint("T1", + std::vector{DataTypeImpl::GetTensorType()}) + .TypeConstraint("T2", + std::vector{DataTypeImpl::GetTensorType()}), + LabelEncoder_2) + +template <> +void LabelEncoder_2::InitializeSomeFields(const OpKernelInfo& info) { + _key_field_name = "keys_floats"; + _value_field_name = "values_floats"; + info.GetAttrOrDefault("default_float", &_default_value, -0.0f); +}; + + ONNX_CPU_OPERATOR_TYPED_ML_KERNEL( LabelEncoder, 2, diff --git a/onnxruntime/test/providers/cpu/ml/label_encoder_test.cc b/onnxruntime/test/providers/cpu/ml/label_encoder_test.cc index 4f04cd1d45..f1269a497c 100644 --- a/onnxruntime/test/providers/cpu/ml/label_encoder_test.cc +++ b/onnxruntime/test/providers/cpu/ml/label_encoder_test.cc @@ -211,5 +211,26 @@ TEST(LabelEncoder, StringToStringOpset2) { test.Run(); } +TEST(LabelEncoder, FloatToFloatOpset2) { + std::vector dims{1, 4}; + + std::vector input{-1.0f, 0.0f, 3.1427f, 7.25f}; + std::vector output{1.0f, 0.0f, 2.718f, NAN}; + + OpTester test("LabelEncoder", 2, onnxruntime::kMLDomain); + + const std::vector keys{-1.0f, 0.0f, 7.25f}; + const std::vector values{1.0f, 0.0f, NAN}; + + test.AddAttribute("keys_floats", keys); + test.AddAttribute("values_floats", values); + test.AddAttribute("default_float", 2.718f); + + test.AddInput("X", dims, input); + test.AddOutput("Y", dims, output); + + test.Run(); +} + } // namespace test } // namespace onnxruntime