使用tf.Variable()和tf.get_variable()时的不同结果

时间:2017-10-16 15:58:26

标签: python machine-learning tensorflow

我试图通过使用线性回归(LR)来熟悉来自this site的TensorFlow框架。可以找到LR的源代码here,名称为03_linear_regression_sol.py

通常,LR的已定义模型为Y_predicted = X * w + b,其中

  • wb是参数(tf.Variable
  • Y_predictedX是培训数据(placeholder

对于wb,在示例代码中,它们定义如下

w = tf.Variable(0.0, name='weights')
b = tf.Variable(0.0, name='bias')

我改变了这两行代码,如下所示

w = tf.get_variable('weights', [], dtype=tf.float32)
b = tf.get_variable('bias', [], dtype=tf.float32)

对于这个实验,我为这两个版本提供了两个不同的total_loss/n_samples。更具体地说,在原始版本中,我随时获得了确定性结果1539.0050282141283。但是,在修改后的版本中,我在不同的运行时间得到了不确定的结果,例如,total_loss/n_samples可能是1531.30397938688591526.3752814714044,等等。

tf.Variable()tf.get_variable()之间的区别是什么?

1 个答案:

答案 0 :(得分:4)

tf.Variable在创建时接受初始值(常量),这解释了使用它时的确定性结果。

tf.get_variable略有不同:它有一个initializer参数,默认为None,其解释如下:

  

如果initializerNone(默认值),将使用在变量范围内传递的默认初始值设定项。如果那个也是None,则会使用glorot_uniform_initializer

由于您未传递初始值设定项,因此该变量具有统一的随机初始值。