我建立了一个TensorFlow模型(一个1D CNN),现在我想在.NET中实现它。
为此,我需要知道输入和输出节点。
当我在Netron上上传模型时,根据我的保存方法,我会得到一个不同的图,唯一看起来正确的图来自h5上传。以下是model.summary()
:
如果我将模型保存为h5model.save("Mn_pb_model.h5")
,并将其加载到Netron中以对其进行图形化,则一切看起来都是正确的:
但是,ML.NET不接受h5格式,因此需要将其保存为pb
在查看在ML.NET中采用TensorFlow的示例时,这个sample显示了一个TensorFlow模型,该模型以类似于SavedModel格式的格式保存,该格式由TensorFlow推荐(也由ML.NET推荐)here“下载一个未冻结的[SavedModel format]…”)。但是,当将pb文件保存并加载到Netron中时,我得到以下信息:
再放大一点(在最右边)
正如您所看到的,它看起来一点也不像它应该做的那样。
此外,输入节点和输出节点不正确,因此它对ML.NET不起作用(我认为有问题)。
我正在使用TensorFlow中的recommended way来确定输入/输出节点:
当我试图获取一个frozen图并将其加载到Netron中时,起初它看起来是正确的,但我认为它不是:
有四个原因我认为这是不正确的
SavedModel
格式保存,它在Netron中会显示出所有的混乱。采用您想要的任何模型并以推荐的SavedModel
格式保存,您将自己看到(我已经在许多不同的模型上试用过)李>另外,在用它的图查看《盗梦空间》的model.summary()
时,它与它的图类似,就像我的model.summary()
与h5图一样
似乎应该有一种更简单的方法(也是正确的方法)来保存TensorFlow模型,以便在ML.NET中使用它
请证明您建议的解决方案是有效的:在您提供的答案中,请检查它是否有效(将pb
模型[这还应该有一个Variables
文件夹,以便为ML.NET工作]加载到Netron中,并显示它与h5
模型相同,例如,屏幕截图)。所以我们都在尝试同样的事情,这里是一个MNIST ML速成班的例子。运行程序并生成名为my_model
的模型只需不到30秒。从这里,您可以根据您的方法保存它,并将其上载到Netron上查看图形。以下是h5
模型上载:
这个答案由三部分组成:
1。参加其他课程:
ML.net需要一个ONNX模型,而不是pb文件
有几种方法可以将您的模型从TensorFlow转换为可以在ML.net中加载的ONNX模型:
这篇文章也可以帮助你:Load model with ML.NET saved with keras
在这里,您可以找到有关h5和pb文件格式的更多信息,以及它们包含的内容等:https://www.tensorflow.org/guide/keras/save_and_serialize#weights_only_saving_in_savedmodel_format
2。但是您在询问“TensorFlow->;ML.NET而不通过其他程序”:
2.问题概述:
首先,根据您所说的,您使用从中提供的代码创建的
pl
文件格式似乎与您在注释(https://docs.microsoft.com/en-us/dotnet/machine-learning/tutorials/text-classification-tf)中提到的示例中使用的格式不同是否可以尝试使用将通过
tf.saved_model.save
生成的pb
文件?它起作用了吗关于这篇microsoft博客文章的思考:
从this page我们可以看到:
以及:
因此,这个
pb
文件是从Azure认知服务自定义Vision生成的一种文件类型。 佩哈普斯,你也可以这样试试吗2.B现在,我们将尝试提供解决方案:
事实上,在TensorFlow 1.x中,您可以使用
freeze_graph
轻松地保存冻结图但是TensorFlow 2.x不支持
freeze_graph
和converter_variables_to_constants
你也可以在这里阅读一些有用的信息:Tensorflow 2.0 : frozen graph support
一些用户想知道如何在TF2.x中实现:如何在TensorFlow2.0(https://github.com/tensorflow/tensorflow/issues/27614)中冻结图形
但是,有一些解决方案可以创建
pb
文件,您可以根据需要在ML.net
中加载:https://leimao.github.io/blog/Save-Load-Inference-From-TF2-Frozen-Graph/
How to save Keras model as frozen graph?(尽管在您的问题中已链接)
操作级图和概念图之间的差异(以及为什么Netron显示不同的图):
正如@mlneural03在对您的问题的评论中所说,Netron根据您提供的文件格式显示不同的图形:
op级别图和概念图之间的区别是什么
那是完全不同的事情
“ops”是“操作”的缩写。 操作是执行计算的节点
所以,这就是为什么在Netron中加载pb fil时,会得到一个包含很多节点的非常大的图:可以看到图中的所有计算节点。 但是当你在Netron中加载h5文件时,你“只是”看到了你模型的结构,模型的设计
在TensorFlow中,您可以使用TensorBoard查看图形:
这里有一个Jupyter笔记本,非常清楚地解释了op级别图和概念图之间的区别:https://colab.research.google.com/github/tensorflow/tensorboard/blob/master/docs/graphs.ipynb
您也可以在TensorFlow Github上阅读与您的问题相关的“问题”:https://github.com/tensorflow/tensorflow/issues/39699
简言之:
事实上没有问题,只是一点误解(没关系,我们不可能什么都知道)
加载
h5
文件和pb
时,您希望看到相同的图形Netron中的文件,但它必须不成功,因为这些文件不包含相同的图形。这些图形是显示同一模型的两种方式使用我们描述的方法创建的pb文件将是使用ML.NET加载的正确pb文件,正如我们在Microsoft教程中所述。因此,如果您按照这些教程中的描述加载正确的
pb
文件,您将加载真实/真实模型相关问题 更多 >
编程相关推荐