【问题标题】:TensorFlow: function reduce_sum inputTensorFlow:函数 reduce_sum 输入
【发布时间】:2016-12-27 23:24:02
【问题描述】:

我正在通过以下示例学习 TensorFlow:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/2_BasicModels/linear_regression.ipynb

我在下面的代码中有一个问题:

X = tf.placeholder("float")
Y = tf.placeholder("float")

# Set model weights
W = tf.Variable(rng.randn(), name="weight")
b = tf.Variable(rng.randn(), name="bias")
In [6]:
# Construct a linear model
pred = tf.add(tf.mul(X, W), b)
In [7]:
# Mean squared error
cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)

tf.reduce_sum 的输入是 tf.pow(pred-Y, 2)) 这似乎是一个标量(或者我错了吗?)然后我想知道为什么我们要在标量上做 reduce_sum?我在这里错过了什么?谢谢!

【问题讨论】:

    标签: python-3.x tensorflow


    【解决方案1】:

    张量pred 具有静态未知形状,但是由于tf.add()tf.mul()broadcasting semantics 将具有相同的动态 shape 作为提供给占位符 X 的值(它也有一个静态未知的形状)。

    在本教程中,当模型被训练时,X 被输入标量值,因此pred 将是一个标量(tf.reduce_sum() 将不起作用):

    # Fit all training data
    for epoch in range(training_epochs):
        for (x, y) in zip(train_X, train_Y):
            sess.run(optimizer, feed_dict={X: x, Y: y})
    

    在生成日志消息时,X 被输入一个向量(包含所有训练示例),因此pred 也将是一个相同长度的向量,tf.reduce_sum() 会将成本汇总为一个标量:

        #Display logs per epoch step
        if (epoch+1) % display_step == 0:
            c = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
    

    这个例子有点奇怪,因为我们通常使用 mini-batch 的例子来训练 TensorFlow 模型,但它展示了允许 tf.placeholder() 具有静态未定义形状的有用性。

    【讨论】:

    • 我又读了一遍代码。如果占位符 X 是一维数组。为什么 pred = tf.add(tf.mul(X, W), b) 不能是基于 Numpy 广播规则的一维数组?我的意思是对 mul 和 add 操作都应用广播规则?谢谢!
    • 如果X 是一维数组,那么pred 是一维数组(如上面的记录情况)。但是,在X 是标量的训练案例中,由于Wb 也是标量,所以pred 将是标量(因为应用于两个标量的广播规则是标量0。
    【解决方案2】:

    我对 Tensorflow 也很陌生,但看起来你是对的。目前训练一次只运行一个样本,因此 reduce_sum 调用实际上是无用的。

    尝试放弃对 reduce_sum 的调用并将其替换为:

    cost = tf.pow(pred-Y, 2)/(2*n_samples)
    

    它应该仍然以相同的方式运行,但如果您尝试批量训练而不是单个样本,则会中断。

    【讨论】:

      猜你喜欢
      • 2018-05-16
      • 2018-01-09
      • 1970-01-01
      • 2016-12-06
      • 2023-03-26
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多