Я неправильно использую TextLoader при запуске демонстрации ML.Net Iris в F#?
Я новичок в F#/.NET, и я пытаюсь запустить пример F#, представленный в принятом ответе Как перевести вводную демонстрацию ML.Net в F#? с библиотекой ML.NET, используя F# в Visual Studio, используя Microsoft.ML (0.2.0).
При его создании я получаю ошибку error FS0039: The type 'TextLoader' is not defined.
Чтобы избежать этого, я добавил строку
open Microsoft.ML.Data
к источнику. Затем, однако, линия
pipeline.Add(new TextLoader<IrisData>(dataPath,separator = ","))
триггеры:error FS0033: The non-generic type 'Microsoft.ML.Data.TextLoader' does not expect any type arguments, but here is given 1 type argument(s)
Изменение на:
pipeline.Add(new TextLoader(dataPath,separator = ","))
выходы:error FS0495: The object constructor 'TextLoader' has no argument or settable return property 'separator'. The required signature is TextLoader(filePath: string) : TextLoader.
Изменение на:
pipeline.Add(new TextLoader(dataPath))
делает сборку успешной, но код не работает при запуске с ArgumentOutOfRangeException: Column #1 not found in the dataset (it only has 1 columns)
, Я полагаю, потому что разделитель запятых выбран неправильно (кстати, вы можете найти и проверить набор данных радужной оболочки по адресу https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data),
Также
pipeline.Add(new TextLoader(dataPath).CreateFrom<IrisData>(separator: ','))
не сработает
Я понимаю, что произошли изменения в TextLoader
недавно (см., например, https://github.com/dotnet/machinelearning/issues/332), кто-нибудь может указать мне, что я делаю неправильно?
1 ответ
У F# просто немного другой синтаксис, к которому можно привыкнуть. Это не использует new
ключевое слово, чтобы создать новый класс и использовать именованные параметры, он использует =
вместо :
что вы бы в C#.
Итак, для этой строки в C#:
pipeline.Add(new TextLoader(dataPath).CreateFrom<IrisData>(separator: ','))
Было бы это в F#:
pipeline.Add(TextLoader(dataPath).CreateFrom<IrisData>(separator=','))