2016-06-18 23 views

Trả lời

32

Không có sự khác biệt về độ chính xác giữa a+btf.add(a, b). Các cựu dịch để a.__add__(b) mà được ánh xạ tới tf.add bằng following line trong math_ops.py

_OverrideBinaryOperatorHelper(gen_math_ops.add, "add")

Sự khác biệt duy nhất là tên nút trong đồ thị cơ bản là add thay vì Add. Bạn thường có thể so sánh những thứ bằng cách nhìn vào biểu đồ cơ bản như thế này

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()) 

Bạn cũng có thể thấy điều này trực tiếp bằng cách kiểm tra các phương pháp __add__. Có một cấp thêm về mình bởi vì đó là một kết thúc, nhưng bạn có thể nhận được các chức năng cơ bản như sau

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__) 

Và bạn sẽ thấy đầu ra dưới đây có nghĩa là họ gọi chức năng cơ bản giống nhau

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

Bạn có thể nhìn thấy từ tf.Tensor.OVERLOADABLE_OPERATORS rằng sau Python phương pháp đặc biệt có khả năng bị quá tải bởi các phiên bản TensorFlow thích hợp

{'__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__'} 

Những metho ds được mô tả trong Python reference 3.3.7: mô phỏng các loại số. Lưu ý rằng mô hình dữ liệu Python không cung cấp cách để quá tải toán tử gán = do đó việc gán luôn sử dụng việc triển khai Python gốc.

+1

Vậy tại sao các phương pháp tensorflow này được xác định? – Hossein

Các vấn đề liên quan