cuốn sách gpt4 ai đã làm

python - tf.while_loop cho kết quả sai khi chạy song song

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 21:44:11 25 4
mua khóa gpt4 Nike

Tôi muốn cập nhật hàng tenorflow theo hàngtf.while_loophai chiều bên trongtf.variable. Vì vậy, tôi sử dụng phương thức tf.sign. Vấn đề là việc thực hiện của tôi và song song>1 Kết quả là sai. sử dụng song song_iterations=1 Kết quả là đúng. Mã này là như thế này:

a = tf.Variable(tf.zeros([100, 100]), dtype=tf.int64)

i = tf.constant(0)
điều kiện def (i, var):
trả về tf.less(i, 100)

phần thân def(i, var):
Update_row = Method() # Phương thức này trả về một tenxơ [1, 100] là hàng được cập nhật cho biến
temp = tf.sign(a[i],update_row)
trả về [tf.add(i, 1), temp]

z = tf.while_loop(điều kiện, nội dung, [i, a], back_prop=False, Parallel_iterations=10)

Các lần lặp lại hoàn toàn độc lập và tôi không biết vấn đề là gì.

Điều kỳ lạ là nếu tôi thay đổi mã như thế này:

a = tf.Variable(tf.zeros([100, 100]), dtype=tf.int64)

i = tf.constant(0)
điều kiện def (i, var):
trả về tf.less(i, 100)

phần thân def(i, var):
số không = lambda: tf.zeros([100, 100], dtype=tf.int64)
temp = tf.Variable(initial_value=zeros, dtype=tf.int64)
Update_row = Method() # Phương thức này trả về một tenxơ [1, 100] là hàng được cập nhật cho biến
temp = tf.sign(temp[i], update_row)
trả về [tf.add(i, 1), temp]

z = tf.while_loop(điều kiện, nội dung, [i, a], back_prop=False, Parallel_iterations=10)

Mã này cho song song>1 kết quả đúng. Ai đó có thể vui lòng giải thích điều gì đang xảy ra ở đây và cho tôi một giải pháp hiệu quả để cập nhật biến vì biến ban đầu tôi đang cập nhật rất lớn và giải pháp tôi tìm thấy rất kém hiệu quả.

câu trả lời hay nhất

Bạn không cần sử dụng các biến cho việc này, bạn chỉ cần tạo tensor cập nhật hàng trên thân vòng lặp:

nhập tensorflow astf

phương thức def (i):
# Logic giữ chỗ
trả về tf.cast(tf.range(i, i + 100), tf.float32)

điều kiện def (i, var):
trả về tf.less(i, 100)

phần thân def(i, var):
# Tạo hàng mới
đã cập nhật_row = phương thức (i)
# Vectơ chỉ mục chỉ là 1 trên hàng cần cập nhật
idx = tf.equal(tf.range(tf.shape(a)[0]), i)
idx = tf.cast(idx[:, tf.newaxis], var.dtype)
# Soạn tenxơ mới với hàng cũ và hàng mới
var_updated = (1 - idx) * var + idx * update_row
trả về [tf.add(i, 1), var_updated]

# Bắt đầu bằng số không
a = tf.zeros([100, 100], tf.float32)
i = tf.constant(0)
i_end, a_updated = tf.while_loop(điều kiện, nội dung, [i, a], Parallel_iterations=10)

với tf.Session() là sess:
print(sess.run(a_updated))

Đầu ra:

[[ 0. 1. 2. ... 97. 98. 99.]
[1. 2. 3. ... 98. 99. 100.]
[2. 3. 4. ... 99. 100. 101.]
...
[97. 98. 99. ... 194. 195. 196.]
[98. 99. 100. ... 195. 196. 197.]
[99. 100. 101. ... 196. 197. 198.]]

Về python - tf.while_loop cho kết quả sai khi chạy song song, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/52611575/

25 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress