TensorFlow中的线性回归:如何获得y = m * x的所有估计y值?

时间:2016-05-31 11:59:48

标签: python regression tensorflow

我正在使用来自https://github.com/nlintz/TensorFlow-Tutorials/blob/master/1_linear_regression.py

的TensorFlow中的线性回归代码

此代码计算一个回归函数,我将调用y_estimate。由于这是线性回归,因此以下公式成立: y_estimate = m*x。 系数m等于神经网络层的权重。提取这些权重,我们得到一个完美的回归公式。

但是,我想采取另一种方法:首先,我想为y_estimate采样许多不同的值。例如,我想传递x的神经网络101值。然后,我想从神经网络y_estimate获得101个值。其次,我想绘制这些值。

不幸的是,我无法获得y_estimate的值。在神经网络中,这些值是通过y_model = model(X, w)计算的。由于Xw都包含许多元素(准确地说是101),y_model也应包含101个元素。我尝试了不同的方法来打印y_model的所有值,但每个都失败了。

在下文中,我将展示我的方法。我只复制相关代码,其余部分与上面发布的GIT中的代码完全相同。

1)首先,我试着天真地打印y_model

with tf.Session() as sess:
    tf.initialize_all_variables().run()

    for i in range(100):
        for (x, y) in zip(trX, trY):
            sess.run(train_op, feed_dict={X: x, Y: y})

    print('y_model: ', y_model)
    print(sess.run(w))

输出:('y_model: ', <tf.Tensor 'Mul_8:0' shape=<unknown> dtype=float32>)

2)其次,我首先尝试获取张量y_model,然后打印结果:

with tf.Session() as sess:
    tf.initialize_all_variables().run()

    for i in range(100):
        for (x, y) in zip(trX, trY):
            sess.run(train_op, feed_dict={X: x, Y: y})

    estimates = sess.run(y_model, feed_dict={X: x, Y: y})
    print('estimates: ', estimates)
    print(sess.run(w))

输出:('estimates: ', 2.0016618)

3)第三,我尝试首先使用op tf.Print(),后者应该在评估时打印张量的值。请注意,调用tf.get_default_session().run(t)相当于按照详细here调用t.eval()

w = tf.Variable(0.0, name="weights") # create a shared variable (like theano.shared) for the weight matrix
y_model = model(X, w)

cost = tf.square(Y - y_model) # use square error for cost function

train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost) # construct an optimizer to minimize cost and fit line to my data
temp1 = tf.Print(y_model,[y_model])


with tf.Session() as sess:
    # you need to initialize variables (in this case just variable W)
    tf.initialize_all_variables().run()

    for i in range(100):
        for (x, y) in zip(trX, trY):
            sess.run(train_op, feed_dict={X: x, Y: y})

    estimates = sess.run(temp1, feed_dict={X: x, Y: y})
    print('estimates: ', estimates)
    print(sess.run(w))

输出:('estimates: ', 2.0458241)

4)第四种方法是使用例如tf.reduce_max()来获得最大值:

with tf.Session() as sess:
    tf.initialize_all_variables().run()

    for i in range(100):
        for (x, y) in zip(trX, trY):
            sess.run(train_op, feed_dict={X: x, Y: y})

    temp1 = tf.reduce_max(y_model)
    estimate_max = sess.run(temp1, feed_dict={X: x, Y: y})
    print('estimate_max: ', estimate_max)
    print(sess.run(w))

输出:('estimate_max: ', 1.887839)

现在我的具体问题:为什么我只获得一个值而不是y_model的101个值(关于我的方法2和3)? y_model不应为输入的 x返回一个值吗?

我计算了什么,如何获得我想要的101个值?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

第二种方法指向正确的方向。但是,它的实施略有不正确。

更具体地说,代码仅为一个 myLib打印y_model,因为Feed字典只传递一个x。 因此,必须实现for循环以确保将每个x提供给模型。 这是工作代码:

x