做
b = tf.slice(a, [...], [...])
Run Code Online (Sandbox Code Playgroud)
分配一个新的内存缓冲区,然后从 a 的缓冲区复制?或者 a 和 b 共享相同的缓冲区吗?
还有,那又怎么样
... = tf.nn.convolution(tf.slice(a, [...], [...]), ...)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,切片没有被命名。这会导致分配和复制吗?
一般来说,有一些资源可以学习这些内存管理细节吗?
谢谢!
以下代码有什么问题?如果将tf.assignop应用于tf.Variable循环的外部,则将其应用于切片时效果很好。但是,在这种情况下,它给出以下错误。
import tensorflow as tf
v = [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
n = len(v)
a = tf.Variable(v, name = 'a')
def cond(i, a):
return i < n
def body(i, a):
tf.assign(a[i], a[i-1] + a[i-2])
return i + 1, a
i, b = tf.while_loop(cond, body, [2, a])
Run Code Online (Sandbox Code Playgroud)
结果是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/hrbigelow/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/control_flow_ops.py", line 3210, in while_loop
result = loop_context.BuildLoop(cond, body, loop_vars, …Run Code Online (Sandbox Code Playgroud)