Golang Model sessionn上的Tensorflow运行错误:nil-Operation。如果输出是使用Scope对象创建的,请参见Scope.Err()了解详细信息

时间:2019-01-07 11:19:15

标签: tensorflow go

请在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包含图像文件中的张量。 有什么建议吗?还是谢谢你

2 个答案:

答案 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.inputsmy_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_inputmy_output/BiasAdd(不是my_output!)