什么';s Tensorflow中变量和资源变量之间的差异
在tensorflow中,变量是一种资源,从ResourceBase继承并由ResourceMgr管理。但是为什么还有另一个东西叫做ResourceVariable呢?它们都可以用于梯度下降之类的优化器(见下图)。有什么区别?我知道前者有很好的文档记录,并且是最常用的。后一个的目的是什么?什么';s Tensorflow中变量和资源变量之间的差异,tensorflow,Tensorflow,在tensorflow中,变量是一种资源,从ResourceBase继承并由ResourceMgr管理。但是为什么还有另一个东西叫做ResourceVariable呢?它们都可以用于梯度下降之类的优化器(见下图)。有什么区别?我知道前者有很好的文档记录,并且是最常用的。后一个的目的是什么?ResourceVariable是Variable的替代品,其目的是清理Variable语义的一些更混乱的方面 ResourceVariable是TF2.0中的默认值,您很可能不关心两者之间的差异,除非您正在深
ResourceVariable
是Variable
的替代品,其目的是清理Variable
语义的一些更混乱的方面
ResourceVariable
是TF2.0中的默认值,您很可能不关心两者之间的差异,除非您正在深入研究Tensorflow实现的细节。当启用了急切执行时,tf.Variable
也会创建资源变量
所以现在只需使用tfVariable
,它几乎肯定是您想要的;如果您遇到代码中变量值不一致导致的类似争用条件或bug的问题,您可以尝试启用资源变量(通过将use\u resource=True
传递给您的变量创建代码或调用tf.x中的tf.enable\u resource\u variables()
与tf.Variable不同,tf.ResourceVariable具有定义良好的语义。
每次在TensorFlow图中使用ResourceVariable都会添加一个
对图形执行读取值操作。由a返回的张量
读取值操作保证可以看到对
在任何操作中发生的变量的值
读取值取决于(直接、间接或通过控件
并保证不会看到对
读取值操作不依赖的变量。
例如,如果有多个任务分配给
单个会话中的ResourceVariable.run调用存在定义良好的
如果
赋值和读取通过图形中的边连接。考虑
下面的示例中,两次写入可能导致tf.Variable和
tf.ResourceVariable的行为不同:
要强制执行这些一致性属性,tf.ResourceVariable可能会
在引擎盖下制作比同等tf.变量更多的副本,所以
变量仍然没有被弃用
你指的是哪些评论?可能是这个:我在tensorflow.org上找不到tf1.10的tf.ResourceVariable
文档。在以后的版本中是否删除了此选项?如果是,那么tf.Variable
的实现是否解决了上述问题?
a = tf.ResourceVariable(1.0)
a.initializer.run()
assign = a.assign(2.0)
with tf.control_dependencies([assign]):
b = a.read_value()
with tf.control_dependencies([b]):
other_assign = a.assign(3.0)
with tf.control_dependencies([other_assign]):
# Will print 2.0 because the value was read before other_assign ran. If
# `a` was a tf.Variable instead, 2.0 or 3.0 could be printed.
tf.Print(b, [b]).eval()