9
9
using System . Runtime . InteropServices ;
10
10
using System . Text . RegularExpressions ;
11
11
using Google . Protobuf ;
12
+ using Google . Protobuf . WellKnownTypes ;
12
13
using Microsoft . ML . Data ;
13
14
using Microsoft . ML . EntryPoints ;
14
15
using Microsoft . ML . Model . OnnxConverter ;
@@ -1150,7 +1151,7 @@ public void IndicateMissingValuesOnnxConversionTest()
1150
1151
[ InlineData ( DataKind . Int64 ) ]
1151
1152
[ InlineData ( DataKind . Double ) ]
1152
1153
[ InlineData ( DataKind . String ) ]
1153
- public void ValueToKeyandKeyToValueMappingOnnxConversionTest ( DataKind valueType )
1154
+ public void ValueToKeyMappingOnnxConversionTest ( DataKind valueType )
1154
1155
{
1155
1156
var mlContext = new MLContext ( seed : 1 ) ;
1156
1157
string filePath = GetDataPath ( "type-conversion.txt" ) ;
@@ -1160,9 +1161,8 @@ public void ValueToKeyandKeyToValueMappingOnnxConversionTest(DataKind valueType)
1160
1161
new TextLoader . Column ( "Value" , valueType , 0 , 0 )
1161
1162
} ;
1162
1163
var dataView = mlContext . Data . LoadFromTextFile ( filePath , columns ) ;
1164
+ var pipeline = mlContext . Transforms . Conversion . MapValueToKey ( "Key" , "Value" ) ;
1163
1165
1164
- var pipeline = mlContext . Transforms . Conversion . MapValueToKey ( "Key" , "Value" ) .
1165
- Append ( mlContext . Transforms . Conversion . MapKeyToValue ( "ValueOutput" , "Key" ) ) ;
1166
1166
var model = pipeline . Fit ( dataView ) ;
1167
1167
var mlnetResult = model . Transform ( dataView ) ;
1168
1168
@@ -1176,13 +1176,55 @@ public void ValueToKeyandKeyToValueMappingOnnxConversionTest(DataKind valueType)
1176
1176
var onnxEstimator = mlContext . Transforms . ApplyOnnxModel ( onnxModelPath ) ;
1177
1177
var onnxTransformer = onnxEstimator . Fit ( dataView ) ;
1178
1178
var onnxResult = onnxTransformer . Transform ( dataView ) ;
1179
-
1180
- CompareResults ( "ValueOutput" , "ValueOutput" , mlnetResult , onnxResult ) ;
1181
1179
CompareSelectedColumns < uint > ( "Key" , "Key" , mlnetResult , onnxResult ) ;
1182
1180
}
1183
1181
Done ( ) ;
1184
1182
}
1185
1183
1184
+ [ Theory ]
1185
+ [ InlineData ( DataKind . Single ) ]
1186
+ [ InlineData ( DataKind . Int64 ) ]
1187
+ [ InlineData ( DataKind . Double ) ]
1188
+ [ InlineData ( DataKind . String ) ]
1189
+ public void KeyToValueMappingOnnxConversionTest ( DataKind valueType )
1190
+ {
1191
+ var mlContext = new MLContext ( seed : 1 ) ;
1192
+ string filePath = GetDataPath ( "type-conversion.txt" ) ;
1193
+
1194
+ TextLoader . Column [ ] columns = new [ ]
1195
+ {
1196
+ new TextLoader . Column ( "Value" , valueType , 0 , 0 )
1197
+ } ;
1198
+ var dataView = mlContext . Data . LoadFromTextFile ( filePath , columns ) ;
1199
+ IEstimator < ITransformer > [ ] pipelines =
1200
+ {
1201
+ mlContext . Transforms . Conversion . MapValueToKey ( "Key" , "Value" ) .
1202
+ Append ( mlContext . Transforms . Conversion . MapKeyToValue ( "Value" , "Key" ) ) ,
1203
+
1204
+ mlContext . Transforms . Conversion . MapValueToKey ( "Value" ) .
1205
+ Append ( mlContext . Transforms . Conversion . MapKeyToValue ( "Value" ) )
1206
+ } ;
1207
+ for ( int i = 0 ; i < pipelines . Length ; i ++ )
1208
+ {
1209
+ var model = pipelines [ i ] . Fit ( dataView ) ;
1210
+ var mlnetResult = model . Transform ( dataView ) ;
1211
+
1212
+ var onnxModel = mlContext . Model . ConvertToOnnxProtobuf ( model , dataView ) ;
1213
+ var onnxFileName = "KeyToValue.onnx" ;
1214
+ var onnxModelPath = GetOutputPath ( onnxFileName ) ;
1215
+ SaveOnnxModel ( onnxModel , onnxModelPath , null ) ;
1216
+
1217
+ if ( IsOnnxRuntimeSupported ( ) )
1218
+ {
1219
+ var onnxEstimator = mlContext . Transforms . ApplyOnnxModel ( onnxModelPath ) ;
1220
+ var onnxTransformer = onnxEstimator . Fit ( dataView ) ;
1221
+ var onnxResult = onnxTransformer . Transform ( dataView ) ;
1222
+ CompareResults ( "Value" , "Value" , mlnetResult , onnxResult ) ;
1223
+ }
1224
+ }
1225
+ Done ( ) ;
1226
+ }
1227
+
1186
1228
private class TextData
1187
1229
{
1188
1230
public string Text { get ; set ; }
@@ -1355,40 +1397,6 @@ public void OptionalColumnOnnxTest(DataKind dataKind)
1355
1397
Done ( ) ;
1356
1398
}
1357
1399
1358
- [ Fact ]
1359
- public void KeyToValueOnnxConversionTest ( )
1360
- {
1361
- var mlContext = new MLContext ( seed : 1 ) ;
1362
-
1363
- string dataPath = GetDataPath ( "breast-cancer.txt" ) ;
1364
- var dataView = mlContext . Data . LoadFromTextFile < BreastCancerMulticlassExample > ( dataPath ,
1365
- separatorChar : '\t ' ,
1366
- hasHeader : true ) ;
1367
-
1368
- var pipeline = mlContext . Transforms . Conversion . MapValueToKey ( "LabelKey" , "Label" ) .
1369
- Append ( mlContext . Transforms . Conversion . MapKeyToValue ( "LabelValue" , "LabelKey" ) ) ;
1370
-
1371
- var model = pipeline . Fit ( dataView ) ;
1372
- var transformedData = model . Transform ( dataView ) ;
1373
- var onnxModel = mlContext . Model . ConvertToOnnxProtobuf ( model , dataView ) ;
1374
-
1375
- var onnxFileName = "KeyToValue.onnx" ;
1376
- var onnxModelPath = GetOutputPath ( onnxFileName ) ;
1377
-
1378
- SaveOnnxModel ( onnxModel , onnxModelPath , null ) ;
1379
-
1380
- if ( IsOnnxRuntimeSupported ( ) )
1381
- {
1382
- // Evaluate the saved ONNX model using the data used to train the ML.NET pipeline.
1383
- var onnxEstimator = mlContext . Transforms . ApplyOnnxModel ( onnxModelPath ) ;
1384
- var onnxTransformer = onnxEstimator . Fit ( dataView ) ;
1385
- var onnxResult = onnxTransformer . Transform ( dataView ) ;
1386
- CompareSelectedColumns < ReadOnlyMemory < Char > > ( "LabelValue" , "LabelValue" , transformedData , onnxResult ) ;
1387
- }
1388
-
1389
- Done ( ) ;
1390
- }
1391
-
1392
1400
[ Fact ]
1393
1401
public void MulticlassTrainersOnnxConversionTest ( )
1394
1402
{
0 commit comments