在Tensorflow中,Variable和Tensor有什么区别?

12

Tensorflow文档指出,Variable可以在任何可以使用Tensor的地方使用,并且它们似乎是相当可交换的。例如,如果v是一个Variable,那么x = 1.0 + v就变成了一个Tensor

两者之间有什么区别?我应该在什么情况下使用其中的一个而不是另一个呢?

1个回答

16

变量(Variable)和张量(Tensor)可以在大多数情况下互换使用,但它们之间的关键区别在于,变量能够跨多次调用 run() 时维持其状态,并且变量的值可以通过反向传播进行更新(根据文档,还可以保存、恢复等)。

由于这些差异,您应该将变量视为代表模型的可训练参数(例如神经网络的权重和偏置),而将张量视为代表输入到模型中的数据以及数据通过模型时产生的中间表示。


当一个变量与优化器一起在模型中使用时,这个变量的权重是否总是通过反向传播来更新?我创建的变量对象应该与我的可训练参数集完全相同,还是有些参数不应该是变量,反之亦然? - knightian
1
是的,据我所知,每个具有trainable=True设置(默认值)的变量都将在反向传播期间更新,当然前提是梯度可以传播回到该特定变量(它在数据流中较早地出现到损失操作)。根据您定义为参数的内容,我想可能会有一些您不希望在训练过程中更新的内容,例如序列长度、最大时期、学习率。这些可以是Python变量,如果需要,TensorFlow会自动转换它们,或者它们可以是常量张量。 - Avishkar Bhoopchand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接