【问题标题】:Tensorflow Operation DocumentationTensorFlow 操作文档
【发布时间】:2017-03-01 00:26:58
【问题描述】:

在 TensorFlow source,我明白了,

REGISTER_OP("BroadcastGradientArgs")
    .Input("s0: T")
    .Input("s1: T")
    .Output("r0: T")
    .Output("r1: T")
    .Attr("T: {int32, int64} = DT_INT32")
    .SetShapeFn([](InferenceContext* c) {
      ... uninteresting details ...
    })
    .Doc(R"doc(                                                                                                              
Return the reduction indices for computing gradients of s0 op s1 with broadcast.                                             

This is typically used by gradient computations for a broadcasting operation.                                                
)doc");

在 Python 中,我可以执行以下操作,

>>> from tensorflow.python.ops import gen_array_ops
>>> gen_array_ops._InitOpDefLibrary()._ops['BroadcastGradientArgs'].op_def
name: "BroadcastGradientArgs"
input_arg {
  name: "s0"
  type_attr: "T"
}
... more stuff ...
attr {
  name: "T"
  type: "type"
  ... uninteresting details ...
}

请注意,我在 Python 中获取了 TF 操作的 Protobuf 定义(为简洁起见,我删除了一些)。我想获得我在 C++ 代码中看到的定义的文档部分。如何获得?

【问题讨论】:

  • 该信息 (.Doc) 存在于 TF 源代码中,但它没有通过 python 包装器导出,因此在 Python 中不可用。看here,这是您在python 中使用的op_def 生成的地方。需要在此处实现一些代码,以便您可以在 python 中访问这些文档。
  • 谢谢。 github.com/tensorflow/tensorflow/blob/… 似乎是从 OpDef 中删除描述的位置。这是真的?如果我删除github.com/tensorflow/tensorflow/blob/… 行,OpDef 的文档是否仍然存在于 Protobuf 中?
  • 取消注释该行会导致 protobuf 出现一系列问题。也许有更好的方法。 github.com/google/protobuf/issues/2798
  • 我不认为修复那么容易..
  • @arash 这一点都不容易。看我的回答。我希望你们谷歌的人能解决这些问题!好痛

标签: c++ tensorflow protocol-buffers


【解决方案1】:

那是痛苦的。你需要给 TF 和 Protobuf 打补丁

https://github.com/tensorflow/tensorflow/issues/8207 https://github.com/google/protobuf/issues/2798

然后你需要另外注释掉这一行, https://github.com/tensorflow/tensorflow/blob/a3e636c0f561e2ac6d9f8a0044fbe09acb003803/tensorflow/python/framework/python_op_gen.cc#L708

重建和运行给了,

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package && \
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg && \
sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.0.0*.whl

并执行我的测试,

$ python -c "from tensorflow.python.ops import gen_array_ops; print gen_array_ops._InitOpDefLibrary()._ops['BroadcastGradientArgs'].op_def"
name: "BroadcastGradientArgs"
input_arg {
  name: "s0"
  type_attr: "T"
}
input_arg {
  name: "s1"
  type_attr: "T"
}
output_arg {
  name: "r0"
  type_attr: "T"
}
output_arg {
  name: "r1"
  type_attr: "T"
}
attr {
  name: "T"
  type: "type"
  default_value {
    type: DT_INT32
  }
  allowed_values {
    list {
      type: DT_INT32
      type: DT_INT64
    }
  }
}
summary: "Return the reduction indices for computing gradients of s0 op s1 with broadcast."
description: "This is typically used by gradient computations for a broadcasting operation."

这需要太多的正则表达式......

【讨论】:

    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 2019-07-17
    • 2017-10-29
    • 1970-01-01
    相关资源
    最近更新 更多