tôi có thể tìm thấy hai khác biệt chính giữa một và khác:
Đầu tiên là tf.Variable
sẽ luôn tạo một biến mới, cho dù tf.get_variable
nhận được từ đồ thị một biến đang tồn tại với những thông số, và nếu nó không tồn tại, nó tạo ra một cái mới.
tf.Variable
yêu cầu chỉ định giá trị ban đầu.
Điều quan trọng là phải làm rõ rằng hàm tf.get_variable
tiền tố tên với phạm vi biến hiện tại để thực hiện kiểm tra tái sử dụng. Ví dụ:
with tf.variable_scope("one"):
a = tf.get_variable("v", [1]) #a.name == "one/v:0"
with tf.variable_scope("one"):
b = tf.get_variable("v", [1]) #ValueError: Variable one/v already exists
with tf.variable_scope("one", reuse = True):
c = tf.get_variable("v", [1]) #c.name == "one/v:0"
with tf.variable_scope("two"):
d = tf.get_variable("v", [1]) #d.name == "two/v:0"
e = tf.Variable(1, name = "v", expected_shape = [1]) #e.name == "two/v_1:0"
assert(a is c) #Assertion is true, they refer to the same object.
assert(a is d) #AssertionError: they are different objects
assert(d is e) #AssertionError: they are different objects
Lỗi xác nhận cuối cùng thú vị: Hai biến có cùng tên trong cùng phạm vi được cho là cùng một biến.Nhưng nếu bạn thử nghiệm những cái tên của các biến d
và e
bạn sẽ nhận ra rằng Tensorflow thay đổi tên của biến e
:
d.name #d.name == "two/v:0"
e.name #e.name == "two/v_1:0"
Nguồn
2017-05-19 17:58:24
get_variable là phương pháp mới, biến là cách cũ (mà có thể được hỗ trợ mãi mãi) như Lukasz nói (PS : ông đã viết nhiều về phạm vi tên biến trong TF) –