4

我有一些 Keras 经验并且正在学习 TensorFlowSharp ( https://github.com/migueldeicaza/TensorFlowSharp )。使用 ExampleInceptionInference 项目,我想使用我在 Keras python 代码中训练的模型。

(我在这里使用@jdehesa 回复创建了一个 .pb 文件:如何将 Keras .h5 导出到 tensorflow .pb?

当我在 TensorFlowSharp 中加载 .pb 模型文件时,此行失败:

runner.AddInput (graph ["input"] [0], tensor).Fetch (graph ["output"] [0]);

似乎 graph["input"]和 graph["output"]都是空的。我是否需要命名模型中的图层?

我使用的 Keras 模型是 VGG16 的修改和再训练版本。

是否可以在 TensorFlowSharp 中输出命名层的列表?或者是否可以以其他方式引用它们?(按数字?)

4

3 回答 3

3

TFGraph 的 GetEnumerator() 方法允许您枚举所有操作。

List<TFOperation> op_list = new List<TFOperation>( graph.GetEnumerator() );

您可以检查 TFOperation Name 和 OpType 以查看图表中的内容。

于 2018-08-20T17:15:35.823 回答
2

我在使用 TensorFlowSharp 时遇到了同样的问题。查找输入和输出名称的最简单方法是将模型加载到 Netron ( https://github.com/lutzroeder/netron ),它可以直观地显示模型。您可以单击第一个节点以查看输入“id:”和最后一个节点“名称”属性。

于 2019-05-08T20:18:30.287 回答
0

最后,我找到了两种解决方法。一种是查看 HxD 中的 pb 文件并在其中找到层的名称。输入层很容易在文件顶部找到:

pd文件的HxD视图

输出层更难找到。但解决此问题的选项 2 是命名图层:

outputlayer.name = "output"

但是,在加载层时,名称略有不同,并且包括了激活的类型。在这种情况下,它的“输出/Softmax”,您也可以在 pb 文件的二进制文件中找到它。

于 2019-03-20T16:13:54.413 回答