Я неправильно использую 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=','))
Другие вопросы по тегам