0

我正在了解机器学习的工作原理并最终构建了一个小型 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);”上有一个断点 当然,它总是会触发异常。

异常状态:

---> System.TypeLoadException:无法加载字段'Microsoft.ML.Transforms.DnnRetrainTransformer:_tfInputShapes'(9)的类型,原因是:无法从typeref解析类型为01000060的类型(程序集中的预期类'Tensorflow.TensorShape' 'TensorFlow.NET, Version=0.20.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51') 程序集:TensorFlow.NET, Version=0.20.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd5 1 类型:Tensorflow.TensorShape 成员:(null)

我认为这意味着它正在检查 TensorFlow.NET 包中的 Tensorflow.TensorShape 并且没有找到它。如果是这种情况,我相信我没有安装正确的包,所以我的 Xamarin 项目将能够正确加载模型,也许吧?或者如果不是,那么真正的潜在问题可能是什么?代码看起来很简单,所以我有点困惑这是如何失败的。

如果解决方案公然超出我的想象,我很抱歉,并感谢任何愿意提供帮助的人。

4

1 回答 1

0

在 ARM 上使用 ML.NET 时,TensorFlow 是撰写本文时的限制之一。

https://devblogs.microsoft.com/dotnet/ml-net-june-updates-model-builder/#ml-net-on-arm

与此同时,您可能需要考虑将模型部署为 Web API 并从您的移动应用程序向该 API 发出请求。

https://docs.microsoft.com/dotnet/machine-learning/how-to-guides/serve-model-web-api-ml-net

于 2021-08-31T21:26:00.830 回答