我正在学习机器学习是如何工作的,并最终构建了一个小的C#应用程序,因为我正在观察一个模型在哪里决定哪种蜜蜂是特定的蜜蜂。它在C#应用程序中运行良好,但我也在开发一个应用程序项目,其中考虑到了拍照功能,所以我想“我在第一个项目中保存的模型没有理由不能在第二个项目中工作,对吗?”显然,它不能工作是有原因的,因为下面是在应用程序项目中查看的必要代码:
MLContext m_mlObj;
DataViewSchema m_modelSchema;
ITransformer m_loadedTrainedModel;
var folderPath = DependencyService.Get<IFileSystem>().GetExternalStorage();
var fileDir = Path.Combine(folderPath, "trainedModel.zip");
bool testValue = File.Exists(fileDir);
if(testValue)
{
Console.WriteLine("File in fact exists.");
try
{
m_loadedTrainedModel = m_mlObj.Model.Load(fileDir, out m_modelSchema);
}
catch (Exception e)
{
Console.WriteLine("\n\n\nInner exception: " + e.InnerException);
}
}
else
{
Console.WriteLine("File does not exist");
}当然,在"m_loadedTrainedModel = m_mlObj.Model.Load(fileDir,out m_modelSchema)“行上有一个断点,它总是触发异常。
例外规定如下:
无法加载字段'Microsoft.ML.Transforms.DnnRetrainTransformer:_tfInputShapes‘(9)的类型,原因是:无法从程序集'TensorFlow.NET、Version=0.20.1.0、Culture=neutral、PublicKeyToken=cc7b13ffcd2ddd51’中解析带有令牌01000060的类型(TensorFlow.NET、Version=0.20.1.0、Culture=neutral、PublicKeyToken=cc7b13ffcd2ddd51) assembly:TensorFlow.NET、Version=0.20.1.0、Culture=neutral、PublicKeyToken=cc7b13ffcd2ddd5 1 type:Tensorflow.TensorShape成员:(Null)
我认为这意味着它正在检查包TensorFlow.NET中的TensorFlow.NET,而没有找到它。如果是这样的话,我相信我没有安装正确的包,所以我的Xamarin项目将能够正确加载模型,也许?或者如果没有,那么真正的潜在问题可能是什么?代码看起来很直接,所以我有点困惑这是如何失败的。
如果解决方案公然超出我的头,我向愿意帮助的人表示歉意和感谢。
发布于 2021-08-31 21:26:00
在使用ARM上的ML.NET时,TensorFlow是本文编写时的限制之一。
https://devblogs.microsoft.com/dotnet/ml-net-june-updates-model-builder/#ml-net-on-arm
同时,您可能需要考虑的是将模型部署为Web,并从您的移动应用程序向该API发出请求。
https://learn.microsoft.com/dotnet/machine-learning/how-to-guides/serve-model-web-api-ml-net
https://stackoverflow.com/questions/68991402
复制相似问题