private protected override void SaveAsOnnxCore(OnnxContext ctx) { Host.CheckValue(ctx, nameof(ctx)); Host.Assert(Bindable is IBindableCanSaveOnnx); Host.Assert(Bindings.InfoCount >= 2); if (!ctx.ContainsColumn(DefaultColumnNames.Features)) { return; } base.SaveAsOnnxCore(ctx); int delta = Bindings.DerivedColumnCount; Host.Assert(delta == 1); string[] outColumnNames = new string[Bindings.InfoCount]; //PredictedLabel, Score, Probability. for (int iinfo = 0; iinfo < Bindings.InfoCount; ++iinfo) { outColumnNames[iinfo] = Bindings.GetColumnName(Bindings.MapIinfoToCol(iinfo)); } string scoreColumn = Bindings.RowMapper.OutputSchema[Bindings.ScoreColumnIndex].Name; OnnxNode node; string opType = "Binarizer"; var binarizerOutput = ctx.AddIntermediateVariable(NumberDataViewType.Single, "BinarizerOutput", false); node = ctx.CreateNode(opType, ctx.GetVariableName(scoreColumn), binarizerOutput, ctx.GetNodeName(opType)); node.AddAttribute("threshold", _threshold); string comparisonOutput = binarizerOutput; if (Bindings.PredColType is KeyDataViewType) { var one = ctx.AddInitializer(1.0f, "one"); var addOutput = ctx.AddIntermediateVariable(NumberDataViewType.Single, "Add", false); opType = "Add"; ctx.CreateNode(opType, new[] { binarizerOutput, one }, new[] { addOutput }, ctx.GetNodeName(opType), ""); comparisonOutput = addOutput; } opType = "Cast"; node = ctx.CreateNode(opType, comparisonOutput, ctx.GetVariableName(outColumnNames[0]), ctx.GetNodeName(opType), ""); var predictedLabelCol = OutputSchema.GetColumnOrNull(outColumnNames[0]); Host.Assert(predictedLabelCol.HasValue); node.AddAttribute("to", predictedLabelCol.Value.Type.RawType); }
private protected override void SaveAsOnnxCore(OnnxContext ctx) { Host.CheckValue(ctx, nameof(ctx)); Host.Assert(Bindable is IBindableCanSaveOnnx); Host.Assert(Bindings.InfoCount >= 2); if (!ctx.ContainsColumn(DefaultColumnNames.Features)) { return; } base.SaveAsOnnxCore(ctx); int delta = Bindings.DerivedColumnCount; Host.Assert(delta == 1); string[] outColumnNames = new string[Bindings.InfoCount]; //PredictedLabel, Score, Probability. for (int iinfo = 0; iinfo < Bindings.InfoCount; ++iinfo) { outColumnNames[iinfo] = Bindings.GetColumnName(Bindings.MapIinfoToCol(iinfo)); } string opType = "Binarizer"; OnnxNode node; var binarizerOutput = ctx.AddIntermediateVariable(null, "BinarizerOutput", true); string scoreColumn; if (Bindings.RowMapper.OutputSchema[Bindings.ScoreColumnIndex].Name == "Score") { scoreColumn = outColumnNames[1]; } else { Host.Assert(Bindings.InfoCount >= 3); scoreColumn = outColumnNames[2]; } node = ctx.CreateNode(opType, ctx.GetVariableName(scoreColumn), binarizerOutput, ctx.GetNodeName(opType)); node.AddAttribute("threshold", _threshold); opType = "Cast"; node = ctx.CreateNode(opType, binarizerOutput, ctx.GetVariableName(outColumnNames[0]), ctx.GetNodeName(opType), ""); var predictedLabelCol = OutputSchema.GetColumnOrNull(outColumnNames[0]); Host.Assert(predictedLabelCol.HasValue); node.AddAttribute("to", predictedLabelCol.Value.Type.RawType); }