22open System.IO
33open Microsoft.ML
44open Microsoft.ML .Data
5- open Microsoft.ML .ImageAnalytics
65
76let dataRoot = FileInfo( System.Reflection.Assembly.GetExecutingAssembly() .Location)
87
@@ -74,25 +73,27 @@ let buildAndTrainModel dataLocation imagesFolder inputModelLocation imageClassif
7473 printfn " Training file: %s " dataLocation
7574 printfn " Default parameters: image size =(%d ,%d ), image mean: %d " imageHeight imageWidth mean
7675 let mlContext = MLContext( seed = Nullable 1 )
77- let data = mlContext.Data.ReadFromTextFile < ImageNetData>( dataLocation, hasHeader = false )
76+ let data = mlContext.Data.LoadFromTextFile < ImageNetData>( dataLocation, hasHeader = false )
7877 let pipeline =
7978 EstimatorChain()
8079 .Append( mlContext.Transforms.Conversion.MapValueToKey( " LabelTokey" , " Label" ))
81- .Append( mlContext.Transforms.LoadImages( imagesFolder, struct ( " ImageReal" , " ImagePath" )))
82- .Append( mlContext.Transforms.Resize( " ImageReal" , imageWidth, imageHeight, inputColumnName = " ImageReal" ))
83- .Append( mlContext.Transforms.ExtractPixels( ImagePixelExtractorTransformer.ColumnInfo( " input" , " ImageReal" , interleave = channelsLast, offset = float32 mean)))
84- .Append( mlContext.Transforms.ScoreTensorFlowModel( inputModelLocation, [| " softmax2_pre_activation" |], [| " input" |]))
85- .Append( mlContext.MulticlassClassification.Trainers.LogisticRegression( " LabelTokey" , " softmax2_pre_activation" ))
86- .Append( mlContext.Transforms.Conversion.MapKeyToValue( struct ( " PredictedLabelValue" , " PredictedLabel" )))
87-
80+ .Append( mlContext.Transforms.LoadImages( " ImageReal" , imagesFolder, " ImagePath" ))
81+ .Append( mlContext.Transforms.ResizeImages( " ImageReal" , imageWidth, imageHeight, inputColumnName = " ImageReal" ))
82+ .Append( mlContext.Transforms.ExtractPixels( " input" , " ImageReal" , interleavePixelColors = channelsLast, offsetImage = float32 mean))
83+ .Append( mlContext.Model.LoadTensorFlowModel( inputModelLocation) .
84+ ScoreTensorFlowModel( outputColumnNames = [| " softmax2_pre_activation" |], inputColumnNames = [| " input" |], addBatchDimensionInput = true ))
85+ .Append( mlContext.MulticlassClassification.Trainers.LbfgsMaximumEntropy( " LabelTokey" , " softmax2_pre_activation" ))
86+ .Append( mlContext.Transforms.Conversion.MapKeyToValue( " PredictedLabelValue" , " PredictedLabel" ))
87+ .AppendCacheCheckpoint( mlContext)
88+
8889 printHeader [ " Training classification model" ]
8990 let model = pipeline.Fit( data)
9091 let trainData = model.Transform( data)
91- mlContext.CreateEnumerable<_>( trainData, false , true )
92+ mlContext.Data. CreateEnumerable<_>( trainData, false , true )
9293 |> Seq.iter printImagePrediction
9394
9495 printHeader [ " Classification metrics" ]
95- let metrics = mlContext.MulticlassClassification.Evaluate( trainData, label = " LabelTokey" , predictedLabel = " PredictedLabel" )
96+ let metrics = mlContext.MulticlassClassification.Evaluate( trainData, labelColumnName = " LabelTokey" , predictedLabelColumnName = " PredictedLabel" )
9697 printfn " LogLoss is: %.15f " metrics.LogLoss
9798 metrics.PerClassLogLoss
9899 |> Seq.map string
@@ -105,7 +106,7 @@ let buildAndTrainModel dataLocation imagesFolder inputModelLocation imageClassif
105106 File.Delete( outFile)
106107 do
107108 use f = File.OpenWrite( outFile)
108- mlContext.Model.Save( model, f)
109+ mlContext.Model.Save( model, trainData.Schema , f)
109110 printfn " Model saved: %s " outFile
110111
111112[<EntryPoint>]
0 commit comments