计算Tensorflow线性回归模型R平方时的误差

计算Tensorflow线性回归模型R平方时的误差,tensorflow,Tensorflow,我用Tensorflow编写了一个简单的单变量线性回归模型 我试图计算这个模型的决定系数(R平方) 我将R_squared声明为tf.Variable(我还尝试将其声明为占位符,并将其声明为普通python变量) R_squared=tf.variable(0,name='R_squared') 预测=tf.add(tf.multiply(X,W),b) 训练成本=tf.reduce\u和(tf.pow(prediction-Y,2))/(2*n个样本) 无法解释的成本=tf.减少总和(tf.平

我用Tensorflow编写了一个简单的单变量线性回归模型

我试图计算这个模型的决定系数(R平方)

我将
R_squared
声明为
tf.Variable
(我还尝试将其声明为占位符,并将其声明为普通python变量)

R_squared=tf.variable(0,name='R_squared')
预测=tf.add(tf.multiply(X,W),b)
训练成本=tf.reduce\u和(tf.pow(prediction-Y,2))/(2*n个样本)
无法解释的成本=tf.减少总和(tf.平方(tf.减去(Y,预测)))
R_平方=tf.减(1.0,tf.除(未解释的成本,培训成本))
在运行优化器之后的代码中,我尝试打印
R_平方

print('R平方=',tf_session.run(R_平方))
但我总是犯同样的错误:

回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.4/dist packages/tensorflow/python/client/session.py”,第1327行,在
返回fn(*args)
文件“/usr/local/lib/python3.4/dist packages/tensorflow/python/client/session.py”,第1306行,在
状态,运行(元数据)
文件“/usr/lib/python3.4/contextlib.py”,第66行,在__
下一个(self.gen)
文件“/usr/local/lib/python3.4/dist packages/tensorflow/python/framework/errors\u impl.py”,第466行,处于raise\u exception\u on\u not\u ok\u状态
pywrap_tensorflow.TF_GetCode(状态))
tensorflow.python.framework.errors\u impl.InvalidArgumentError:必须为带有dtype float的占位符张量“占位符”输入一个值
[[Node:Placeholder=Placeholder[dtype=DT_FLOAT,shape=,_device=“/job:localhost/replica:0/task:0/cpu:0”]()]
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/linear_regression.py”,第126行,在
打印('R平方=',tf_session.run(R_平方))
文件“/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py”,第895行,正在运行
运行_元数据_ptr)
文件“/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py”,第1124行,正在运行
feed_dict_tensor、options、run_元数据)
文件“/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py”,第1321行,运行
选项,运行(元数据)
文件“/usr/local/lib/python3.4/dist packages/tensorflow/python/client/session.py”,第1340行,在
提升类型(e)(节点定义、操作、消息)
tensorflow.python.framework.errors\u impl.InvalidArgumentError:必须为带有dtype float的占位符张量“占位符”输入一个值
[[Node:Placeholder=Placeholder[dtype=DT_FLOAT,shape=,_device=“/job:localhost/replica:0/task:0/cpu:0”]()]
由op“占位符”引起,定义于:
文件“/linear_regression.py”,第78行,在
X=tf.占位符('float')
占位符中的文件“/usr/local/lib/python3.4/dist packages/tensorflow/python/ops/array_ops.py”,第1548行
返回gen\u数组操作。\u占位符(dtype=dtype,shape=shape,name=name)
文件“/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/gen_-array_-ops.py”,第2094行,在_占位符中
名称=名称)
文件“/usr/local/lib/python3.4/dist packages/tensorflow/python/framework/op_def_library.py”,第767行,在apply_op
op_def=op_def)
文件“/usr/local/lib/python3.4/dist packages/tensorflow/python/framework/ops.py”,第2630行,在create_op中
初始值=自身值。\默认值\初始值,初始值=初始值)
文件“/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/ops.py”,第1204行,在__
self._traceback=self._graph._extract_stack()35; pylint:disable=protected access
InvalidArgumentError(回溯见上文):必须为带有dtype float的占位符张量“占位符”输入一个值
[[Node:Placeholder=Placeholder[dtype=DT_FLOAT,shape=,_device=“/job:localhost/replica:0/task:0/cpu:0”]()]
我也试着打印出
R_squared.eval()
,但仍然出现同样的错误

另外,在tensor对象上调用
eval
方法与将其传递给会话
run
方法有什么区别

谢谢你的帮助

您已将X定义为代码中的某个占位符。占位符通常为空,除非为其指定默认值或使用提要命令为其提供值

例如,尝试使用:

tf_session.run(R_squared, feed_dict={X: 1})
显然,您可以用1替换您想要的任何其他值——您也可以使用任何Python变量


关于eval和run之间的差异,请参阅。

我强烈建议不要使用配方来计算此值!我发现的例子不能产生一致的结果,特别是对于一个目标变量。这让我非常头疼

正确的做法是使用。Tensorflow附加组件是,文档是。您所要做的就是将
y\u shape
设置为输出的形状,通常是单个输出变量的
(1,)