我对Deep Learning感兴趣,最近发现了TenserFlow。我安装了它并按照https://www.tensorflow.org/get_started/get_started上的教程。
这是我按照该教程提出的代码:
import tensorflow as tf
W = tf.Variable(0.3, tf.float32)
b = tf.Variable(-0.3, tf.float32)
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
linear_model = W * x + b
squared_deltas = tf.square(linear_model - y)
loss = tf.reduce_sum(squared_deltas)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
sess.run(init)
for i in range(1000):
sess.run(train, {x:[1,2,3,4], y:[0,-1,-2,-3]})
print(sess.run([W, b]))
目前,我只是在进行培训之前对代码感兴趣,以免不堪重负。
现在,我理解(或者至少我认为我这样做)部分代码。它按照教程的说明生成了预期的结果,但是这段代码中的大多数行都让我感到困惑。这可能是因为我不熟悉所涉及的数学,但我不知道这里涉及多少数学,所以很难判断这是不是问题所在。 / p>
无论如何,我理解前6行。 然后就是这一行:
squared_deltas = tf.square(linear_model - y)
据我了解,它只返回(linear_model - y)的平方 但是,y还没有价值。
然后,为损失分配tf.reduce_sum(squared_deltas)的值。我知道损失需要尽可能低。
我如何解释最后两行呢?
我理解tf.Session()和tf.global_variables_initializer(),所以我现在不太关心这两个函数。
额外问题:在任一方向(增加或减少)中更改tf.train.GradientDescentOptimizer()参数中的值会给出错误的结果。当0.1,0.001不是
时,0.01如何工作我感谢任何帮助! 感谢
答案 0 :(得分:2)
据我了解,它只返回(linear_model - y)的平方但是,y还没有值。 然后,为损失分配tf.reduce_sum(squared_deltas)的值。我知道损失需要尽可能低。 我怎么能解释最后两行?
您显然需要查看TensorFlow文档。你错过了TF背后的核心思想 - 它定义了计算图,此时不涉及计算,你是对的 - 至少没有“y”,至少没有值 - 它只是一个符号变量(占位符)因此我们说我们的损失将是预测值和真值(y)之间差异的平均值,但我们还没有提供它。实际值在会话中开始“生活”,在此之前,这只是计算图表,TF的指令,因此它知道“预期的内容”。
额外问题:在任一方向(增加或减少)中更改tf.train.GradientDescentOptimizer()参数中的值会给出错误的结果。当0.1,0.001没有时,0.01如何工作?
如果学习率足够小并且您有足够的迭代次数,则线性回归(您正在使用)会收敛。 0.1可能只是太大,0.01很好,因此是0.001,你只需要超过1000次迭代0.001,但它会工作(任何较小的值,但再次 - 慢得多)。