ops.txt
です。文字列出力を生成するopsのすべてのメッセージをOpDef
にリストする例を示します。
import tensorflow as tf
from tensorflow.core.framework import op_def_pb2
from google.protobuf import text_format
def get_op_types(op):
for attr in op.attr:
if attr.type != 'type':
continue
return list(attr.allowed_values.list.type)
return []
# directory where you did "git clone"
tensorflow_git_base = "/Users/yaroslav/tensorflow.git"
ops_file = tensorflow_git_base+"/tensorflow/tensorflow/core/ops/ops.pbtxt"
ops = op_def_pb2.OpList()
text_format.Merge(open(ops_file).read(), ops)
for op in ops.op:
# get templated string types
if tf.string in get_op_types(op):
print(op.name, op.summary)
#for arg in op.input_arg:
for arg in op.output_arg:
if arg.type == tf.string:
print(op.name, op.summary)
break
あなたは現在のPythonラッパーはそれを行う方法エンジニアを逆転できる追加される新しいOPSに敏感になりたい場合は** ** を追加しました。たとえば、gen_array_ops.py
ファイルを考えてみましょう。それはそうそれらのメッセージのprotobufsがgen_array_ops
の生成中に基本的なCコードから生成されている次のスニペット
def _InitOpDefLibrary():
op_list = _op_def_pb2.OpList()
_text_format.Merge(_InitOpDefLibrary.op_list_ascii, op_list)
_op_def_registry.register_op_list(op_list)
op_def_lib = _op_def_library.OpDefLibrary()
op_def_lib.add_op_list(op_list)
return op_def_lib
_InitOpDefLibrary.op_list_ascii = """op {
name: "BatchMatrixBandPart"
input_arg {
name: "input"
type_attr: "T"
}
input_arg {
name: "num_lower"
type: DT_INT64
}
input_arg {
name: "num_upper"
type: DT_INT64
}
output_arg {
name: "band"
type_attr: "T"
}
attr {
name: "T"
type: "type"
}
deprecation {
version: 14
explanation: "Use MatrixBandPart"
}
}
を持っています。それらがどのように生成されたかを追跡するために、https://stackoverflow.com/a/41149557/419116
を参照してください。私はカスタム操作を追加してProtobufを入手できるので、 –
追加情報を追加しました。 gen _ * _ ops.py生成中に実行されたのと同じ世代のスクリプトを呼び出すことによって "ops.txt"を再生成するか、基本的なCの機能を見つけていくつかのswigラッパーを追加することができます –
ありがとう!ほぼそこに。私はasciiについて気にしないが、私はJSONが必要だ。そこで、私は 'google.protobuf import json_format'から' json_format.MessageToJson(gen_array_ops._InitOpDefLibrary()._ ops ['Const']。op_def) 'が私にしたいものをほとんど見つけたことを発見しました。これはただのmetaInfoDefですが、graphDefブロックも必要です –