我正在使用来自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)
计算的。由于X
和w
都包含许多元素(准确地说是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个值?
非常感谢你的帮助!
答案 0 :(得分:0)
第二种方法指向正确的方向。但是,它的实施略有不正确。
更具体地说,代码仅为一个 myLib
打印y_model
,因为Feed字典只传递一个x
。
因此,必须实现for循环以确保将每个x
提供给模型。
这是工作代码:
x