【发布时间】:2017-08-10 18:32:03
【问题描述】:
我对深度学习很感兴趣,最近发现了 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]))
目前,我只对训练之前的代码感兴趣,以免不知所措。
现在,我了解(或至少我认为我了解)这段代码的部分内容。它按照教程产生了预期的结果,但是这段代码中的大多数行都让我感到困惑。这可能是因为我不熟悉所涉及的数学,但我不知道这里实际涉及到多少数学,所以很难判断这是否是问题所在。
无论如何,我理解前 6 行。 然后是这一行:
squared_deltas = tf.square(linear_model - y)
据我了解,它只是返回 (linear_model - y) 的平方 但是, y 还没有值。
然后,loss 被赋值为 tf.reduce_sum(squared_deltas)。我知道损失需要尽可能低。
我如何解释最后两行?
我有点理解 tf.Session() 和 tf.global_variables_initializer() 所以我现在不太关心这两个函数。
额外问题:在任一方向(增加或减少)更改 tf.train.GradientDescentOptimizer() 参数中的值都会给我错误的结果。为什么 0.01 有效,而 0.1,0.001 无效?
感谢我能得到的任何帮助! 谢谢
【问题讨论】:
-
As I understand it, it simply returns the square of (linear_model - y) However, y has no value yet.你为什么认为,y是 placeholder 类型。 docs -
好点。占位符的确切用途是什么?对不起,如果这是一个愚蠢的问题。我尝试在“使用”之前和之后打印 y 的值,但在所有情况下都返回错误。
-
您是否考虑过阅读文档?我在评论中添加了链接。
-
@sascha 我只是按照“入门”教程进行操作。当我对自己正在做的事情有了更好的理解(很多点,难以连接)时,我通常会阅读文档,因为早期往往有点难以理解。我不是在寻找对每个函数中发生的事情的深入解释,而是更多可以让我对每一行的目的和整个代码有一个可理解的概述的东西。但是,我会看看你提供的链接。谢谢。
标签: python machine-learning tensorflow artificial-intelligence