请在tensorflow模型中使用golang。使用此代码: ```
output, err := sessionModel.Run(
map[tf.Output]*tf.Tensor{
graphModel.Operation("input").Output(0): tensor,
},
[]tf.Output{
graphModel.Operation("output").Output(0),
},
nil)
```
但是显示错误:
2019/01/07 18:07:48 http: panic serving [::1]:55262: nil-Operation. If the Output was created with a Scope object, see Scope.Err() for details.
我已经检查tensor
包含图像文件中的张量。
有什么建议吗?还是谢谢你
答案 0 :(得分:3)
该错误表明Output
属性(某个节点的属性)是nil操作。
因此graphModel.Operation("input").Operation(0)
或graphModel.Operation("output").Output(0)
返回nil
。
要解决此问题,您必须引用图中的现有节点,因为图中没有名为input
的张量或名为output
的张量。
从用于导出模型的python代码中,您可以找到输入和输出张量的完整名称。只需访问输入占位符和输出节点的.name
属性,即可获取要在Go中使用的正确名称。
此外,Go绑定使用起来很复杂,特别是如果您想在输入图像上运行一些预处理操作时。我建议您使用galeone/tfgo 而不是直接使用绑定(请注意,我是此仓库的作者)。
答案 1 :(得分:0)
我想为@nessuno添加一个很好的答案,我需要这样做:my_model.inputs
和my_model.outputs
以获取正确的名称。例如:
> my_model.inputs
[<tf.Tensor 'dense_1_input:0' shape=(?, 7) dtype=float32>
> my_model.outputs
[<tf.Tensor 'my_output/BiasAdd:0' shape=(?, 2) dtype=float32>
因此,我的输入和输出节点是dense_1_input
和my_output/BiasAdd
(不是my_output
!)