我正在了解机器学习的工作原理并最终构建了一个小型 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 项目将能够正确加载模型,也许吧?或者如果不是,那么真正的潜在问题可能是什么?代码看起来很简单,所以我有点困惑这是如何失败的。
如果解决方案公然超出我的想象,我很抱歉,并感谢任何愿意提供帮助的人。