c# - ML 模型在重新训练后不会重新加载(仅在之前进行过预测的情况下)
问题描述
我希望在新版本可用后自动重新加载经过训练的机器学习模型,因此我设置watchForChanges
为true
:
services.AddPredictionEnginePool<SentimentData, SentimentPrediction>()
.FromFile(
modelName: Constants.ModelName,
filePath: Constants.ModelFileName,
watchForChanges: true);
似乎只有在重新训练模型之前没有进行预测时它才有效。
这是我在事件中看到的一个例外:
我应该做其他事情以获得理想的结果吗?
您可以看到演示此问题的示例项目:https ://github.com/alexandermujirishvili/DotnetMLWatchForChanges/tree/master
解决方案
这是不可能的
但是您可以创建一个工厂类来查看这个 并使用对象池设计模式
public class PredictionEngineObjPool<T>
{
private readonly ConcurrentBag<T> _objects;
private readonly Func<T> _objectGenerator;
public PredictionEngineObjPool(Func<T> objectGenerator)
{
_objectGenerator = objectGenerator ?? throw new ArgumentNullException(nameof(objectGenerator));
_objects = new ConcurrentBag<T>();
}
public T Get()
{
var result = _objects.TryTake(out T item) ? item : _objectGenerator();
return result;
}
public void Return(T item)
{
_objects.Add(item);
}
}
然后创建一个经理
public class PredictionManager
{
public Tdest Predict<Tsrc, Tdest>(string modelName,Tsrc example) where Tsrc : class where Tdest : class, new()
{
var mlContext = new MLContext();
//create your engine
}
}
在你的程序中使用
var pool = new PredictionEngineObjPool<PredictionManager>(() => new PredictionManager());
var _predictionManager = pool.Get();
var prediction= _predictionManager.Predict<ModelInput, ModelOutput>("name", input);
推荐阅读
- amazon-redshift - 如何授予在 Redshift 上锁定表的权限?
- mysql - 1064 在离开循环中
- python - 如何根据 Django admin 中的不同规则为同一个 FK 设置多个下拉列表?
- python - 超过日期时找不到 Django 页面
- node.js - discord.js v13 成员存在未定义
- npm - 如何指定 npm 包的来源?
- sql - 检索每个 ID 具有唯一时间戳的数据,从中检索数据
- android - Android Studio 按钮在运行时向下滑动并且 ImageView 不显示
- typescript - next.js,merge-graphql-schemas,从 vanilla typescript 服务器迁移
- amazon-web-services - 如何从 Amazon SageMaker 中的 GPU 实例区域列表中进行选择?