#ml.net
Вопрос:
Я написал приложение на C#, которое должно запускаться как библиотека другим приложением. Родительское приложение (для которого у меня есть API, но нет источника), как я полагаю, использует маршалинг для передачи данных между запущенным приложением и обратно в мою библиотеку под его доменом приложений.
Дело в том, что он должен быть запущен таким образом, чтобы я мог получить данные, которые мне нужны, а затем передать в ML.Net для выполнения регрессий и передачи обратно в приложение. В общем, у меня нет с этим проблем.
Мое решение состояло в том, чтобы использовать Ильмерге, но это нарушило ML.Net, слишком много зависимостей и невозможность объединить их все. В качестве альтернативы я использовал Коди.Costura и указали конкретные времени выполнения (в данном случае x64) и смогли правильно объединить множество библиотек, необходимых для ML.Net и заставьте библиотеку DLL запускаться под родительским приложением.
ML.Net удивительно, но это работает, и я могу делать то, что мне нужно. Проблема сейчас в том, что мне нужно сохранить обученную модель.
Если я установлю ML.Net CacheDirectoryName для настроек эксперимента ML.Net.Auto создаст папку при запуске и заполнит ее всеми сохраненными моделями, но их размер равен 0 байтам, и это создает исключение. Если я НЕ укажу это (установлю значение null, принудительное хранение в памяти), все будет работать нормально, но я все равно не смогу сохранить модель позже.
Если я попытаюсь использовать mlContext.Model.Сохранить(модель, схема, имя файла) выдает следующую ошибку:
Система.Исключение аргумента: Путь не имеет юридической формы. в System.IO.Path.NewNormalizePath…
Сводится к Microsoft.ML.RepositoryWriter.Создать заново(…
Я видел другие потоки, указывающие, что ему передается пустая строка, однако, как уже отмечалось, он создаст файл размером 0 байт на диске, как указано. Я полагаю, что здесь происходит что-то еще, связанное с тем, что это приложение запускается как DLL.
Любое понимание ценится, я перепробовал почти все и не могу сдвинуть его с места.
Спасибо