【发布时间】:2019-07-09 21:02:39
【问题描述】:
这种使用TensorArray 的模式是跟踪张量历史的有效方式吗?内部循环中的所有内容都是在 GPU 上完成的,而没有向 CPU 传输任何内容吗?我该如何验证?
import tensorflow as tf
with tf.device('/device:GPU:0'):
@tf.function
def f(x, y):
return y, x + y
x_array = tf.TensorArray(tf.float32, 0, dynamic_size=True,
clear_after_read=False)
y_array = tf.TensorArray(tf.float32, 0, dynamic_size=True,
clear_after_read=False)
x = tf.Variable([1.0])
y = tf.Variable([1.0])
x_array.write(0, x)
y_array.write(0, y)
for i in tf.range(10):
x = x_array.read(i)
y = y_array.read(i)
new_x, new_y = f(x, y)
x_array.write(i + 1, new_x)
y_array.write(i + 1, new_y)
print(x_array.stack())
print(y_array.stack())
这是我真正想要做的,但它甚至没有运行:
import tensorflow as tf
with tf.device('/device:GPU:0'):
@tf.function
def f(x, y):
return y, x + y
@tf.function
def g(n):
for i in tf.range(n):
x = x_array.read(i)
y = y_array.read(i)
new_x, new_y = f(x, y)
x_array.write(i + 1, new_x)
y_array.write(i + 1, new_y)
x_array = tf.TensorArray(tf.float32, 0, dynamic_size=True,
clear_after_read=False)
y_array = tf.TensorArray(tf.float32, 0, dynamic_size=True,
clear_after_read=False)
x = tf.Variable([1.0])
y = tf.Variable([1.0])
x_array.write(0, x)
y_array.write(0, y)
g(tf.constant(10))
print(x_array.stack())
print(y_array.stack())
【问题讨论】:
标签: python-3.x tensorflow tensorflow2.0