在Tensorflow中将变量作为副本递增

在Tensorflow中将变量作为副本递增,tensorflow,Tensorflow,我现在有下面的代码,我想用它来提供一个递增整数流 import tensorflow as tf ... record_count = tf.user_ops.my_custom_op(...) # something I write in C++ of Python ... my_variable = tf.Variable(0, dtype=dtypes.int64) my_var_incremented = my_variable.assign_add(math_ops.to_int64(

我现在有下面的代码,我想用它来提供一个递增整数流

import tensorflow as tf
...
record_count = tf.user_ops.my_custom_op(...) # something I write in C++ of Python
...
my_variable = tf.Variable(0, dtype=dtypes.int64)
my_var_incremented = my_variable.assign_add(math_ops.to_int64(record_count))
queued_increment = tf.train.input.batch((my_variable,), 1)
但问题是排队的_增量只是对我的_变量的引用,当我只想在递增后将我的_变量的副本排队时


这是正确的方法,还是我遗漏了什么?

当前的TensorFlow变量在与其他有状态结构(如队列)交互时具有不幸的语义。问题源于引用类型请注意,my_variable.dtype是tf.int64_ref,这意味着它是一个可变张量引用,包括队列在内的大多数操作都会通过创建一个常量张量来隐式取消引用,该常量张量为可变缓冲区别名。我们正在修复TensorFlow的变量内存模型中的这个错误,但是公共API中还没有改变

同时,最好的选择是在将变量插入队列时强制复制。这个最简单的解决方案依赖于未记录的行为,但始终会将其值复制到队列中,即使您将单个元素排入队列。当通过使用它时,您只需要重新设置变量的形状,例如使用并传递enqueue_many=True。例如:

my_variable = tf.Variable(0, dtype=dtypes.int64)
# ...
queued_increment = tf.train.batch((tf.expand_dims(my_variable, 1),), 1,
                                  enqueue_many=True)