我在尝试通过这个网站上的线性回归(LR)示例来熟悉TensorFlow框架。LR的源代码可以在这里找到,文件名为03_linear_regression_sol.py
。
一般来说,LR的定义模型为Y_predicted = X * w + b
,其中
w
和b
是参数(tf.Variable
)Y_predicted
和X
是训练数据(placeholder
)
对于w
和b
,在示例代码中,它们的定义如下
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.3039793868859
、1526.3752814714044
等。
tf.Variable()
和tf.get_variable()
之间的区别是什么?
回答:
tf.Variable
在创建时接受一个初始值(常量),这解释了当你使用它时得到的确定性结果。
tf.get_variable
略有不同:它有一个initializer
参数,默认值为None
,其解释如下:
如果
initializer
为None
(默认值),则会使用变量作用域中传递的默认初始化器。如果那个也是None
,则会使用glorot_uniform_initializer
。
由于你没有传递初始化器,变量获得了均匀随机的初始值。