2016-06-18 9 views

答えて

32

精度はa+btf.add(a, b)の間に違いはありません。前者はadd代わりにAddある唯一の違いは、基礎となるグラフでそのノード名が

_OverrideBinaryOperatorHelper(gen_math_ops.add, "add")

math_ops.pyにfollowing lineによってtf.addにマッピングされるa.__add__(b)に変換されます。あなたは、一般的にあなたがまた__add__検査方法により、これを直接見ることができました。この

tf.reset_default_graph() 
dtype = tf.int32 
a = tf.placeholder(dtype) 
b = tf.placeholder(dtype) 
c = a+b 
print(tf.get_default_graph().as_graph_def()) 

のような基本的なグラフ表現を見て、物事を比較することができます。そこには閉鎖だから間接の余分なレベルだが、

real_function = tf.Tensor.__add__.im_func.func_closure[0].cell_contents 
print(real_function.__module__ + "." + real_function.__name__) 
print(tf.add.__module__ + "." + tf.add.__name__) 

を次のように基本的な機能を得ることができますそして、あなたは彼らがあなた

tensorflow.python.ops.gen_math_ops.add 
tensorflow.python.ops.gen_math_ops.add 

同じ基本機能を呼び出すことを意味し、それ以下の出力が表示されます次のPythonの特別な方法が潜在的に適切なTensorFlowバージョン

{'__abs__', 
'__add__', 
'__and__', 
'__div__', 
'__floordiv__', 
'__ge__', 
'__getitem__', 
'__gt__', 
'__invert__', 
'__le__', 
'__lt__', 
'__mod__', 
'__mul__', 
'__neg__', 
'__or__', 
'__pow__', 
'__radd__', 
'__rand__', 
'__rdiv__', 
'__rfloordiv__', 
'__rmod__', 
'__rmul__', 
'__ror__', 
'__rpow__', 
'__rsub__', 
'__rtruediv__', 
'__rxor__', 
'__sub__', 
'__truediv__', 
'__xor__'} 

これらのメトによってオーバーロードされていることをtf.Tensor.OVERLOADABLE_OPERATORSから見ることができますdsはPython reference 3.3.7に記述されています:数値型をエミュレートします。 Pythonのデータモデルは、代入演算子=をオーバーロードする方法を提供しないので、代入は常にネイティブのPython実装を使用します。

+1

なぜこれらのテンソルフローメソッドが定義されているのですか? – Hossein

関連する問題