当前位置: 首页 > 知识库问答 >
问题:

python中的线性回归(tensorflow)

贺雪松
2023-03-14

我正在运行我在buitin网站上看到的一个关于张量流线性回归的代码,它总是给我一个错误,我不知道代码有什么问题。首先我以为这是我的ide,然后当我切换到jupyter实验室时,它显示了我在这一点上的错误

from __future__ import absolute_import, division, print_function
import tensorflow as tf
import numpy as np
rng = np.random

X= np.array([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,
            7.042,10.791,5.313,7.997,5.654, 9.27,3.1])

Y=np.array([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.22, 
            1, 2.827,3.465,1.65,2.904,2.42,2.94,1.3])

n_samples = X.shape[0]

# Setting up the hyperparameters
learning_rate = 0.01
epochs = 1000
display_step = 50

# Weigth and bias initialized randomly
W = tf.Variable(rng.randn(), name="weight")
b = tf.Variable(rng.randn(), name="bias")

# Linear regression (Wx + b)
def linear_regression(x):
    return W*x + b

# Mean swuare error.
def mean_square(y_pred, y_true):
    return tf.reduce_sum(tf.pow(y_pred-y_true,  2) / (2*n_samples))

# Stochastic Gradient Descent Optimizer
optimizer = tf.optimizers.SGD(learning_rate)

# Optimization process
def run_optimization():
# Wrap computation inside a GradientTape for automatic differentiation
    with tf.GradientTape() as g:
        pred = linear_regression(X)
        loss = mean_square(pred, Y)

    # compute gradient
    gradients = g.gradient(loss, [W,b])

    # update W and b following gradients
    optimizer.apply_gradients(zip(gradients, [W,b]))

# Run training for the given number of steps
for step in range(1, epochs + 1):

# Run the optimization to update W and b values
    run_optimization()
    if step % display_step == 0:
        pred = linear_regression(X)
        loss = mean_square(pred, Y)
        print("step: %i, loss: %f, W:%f, b:%f"% (step, loss, W.numpy(), b.numpy()))

import matplotlib.pyplot as plt 

# Graphic display

plt.plot(X, Y, 'ro', label="Original data")
plt.plot(X, np.array(W * X +b), label="Fitted line")
plt.legend()
plt.show()

首先我以为这是我的ide,然后当我切换到jupyter实验室时,它显示了我在这一点上的错误

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-26-794baf7bf908> in <module>
      5     # Run the optimization to update W and b values.
      6 
----> 7     run_optimization()
      8 
      9     if step % display_step == 0:

<ipython-input-25-53e6e421f909> in run_optimization()
     13         pred = linear_regression(X)
     14 
---> 15         loss = mean_square(pred, Y)
     16 
     17     # Compute gradients.

<ipython-input-24-184c15846bf2> in mean_square(y_pred, y_true)
      9 def mean_square(y_pred, y_true):
     10 
---> 11     return tf.reduce_sum(tf.pow(y_pred-y_true, 2)) / (2 * n_samples)

~\miniconda3\lib\site-packages\tensorflow\python\ops\math_ops.py in binary_op_wrapper(x, y)
   1232         #   r_binary_op_wrapper use different force_same_dtype values.
   1233         x, y = maybe_promote_tensors(x, y, force_same_dtype=False)
-> 1234         return func(x, y, name=name)
   1235       except (TypeError, ValueError) as e:
   1236         # Even if dispatching the op failed, the RHS may be a tensor aware

~\miniconda3\lib\site-packages\tensorflow\python\util\dispatch.py in wrapper(*args, **kwargs)
    204     """Call target, and fall back on dispatchers if there is a TypeError."""
    205     try:
--> 206       return target(*args, **kwargs)
    207     except (TypeError, ValueError):
    208       # Note: convert_to_eager_tensor currently raises a ValueError, not a

~\miniconda3\lib\site-packages\tensorflow\python\ops\math_ops.py in subtract(x, y, name)
    546 @dispatch.add_dispatch_support
    547 def subtract(x, y, name=None):
--> 548   return gen_math_ops.sub(x, y, name)
    549 
    550 

~\miniconda3\lib\site-packages\tensorflow\python\ops\gen_math_ops.py in sub(x, y, name)
  10549       return _result
  10550     except _core._NotOkStatusException as e:
> 10551       _ops.raise_from_not_ok_status(e, name)
  10552     except _core._FallbackException:
  10553       pass

~\miniconda3\lib\site-packages\tensorflow\python\framework\ops.py in raise_from_not_ok_status(e, name)
   6895   message = e.message + (" name: " + name if name is not None else "")
   6896   # pylint: disable=protected-access
-> 6897   six.raise_from(core._status_to_exception(e.code, message), None)
   6898   # pylint: enable=protected-access
   6899 

~\miniconda3\lib\site-packages\six.py in raise_from(value, from_value)

InvalidArgumentError: Incompatible shapes: [17] vs. [18] [Op:Sub]

共有1个答案

萧懿轩
2023-03-14

正如解释器抱怨的那样——你在mean_square的输入之间有形状不匹配——你的X/样本向量是17个元素,你的Y/目标向量是18个元素,你可以验证。

 类似资料:
  • 线性回归是最简单的回归方法,它的目标是使用超平面拟合数据集,即学习一个线性模型以尽可能准确的预测实值输出标记。 单变量模型 模型 $$f(x)=w^Tx+b$$ 在线性回归问题中,一般使用最小二乘参数估计($$L_2$$损失),定义目标函数为 $$J={\arg min}{(w,b)}\sum{i=1}^{m}(y_i-wx_i-b)^2$$ 均方误差(MSE) $$MSE = \frac{1}{

  • 线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销售额等连续值的问题。与回归问题不同,分类问题中模型的最终输出是一个离散值。我们所说的图像分类、垃圾邮件识别、疾病检测等输出为离散值的问题都属于分类问题的范畴。softmax回归则适用于分类问题。 由于线性回归和softmax回归都是单层神经网络,它们涉及的概念和技术同样适用于大多数的深度学习模型。我们首先

  • 本例仅使用糖尿病数据集的第一个特征,来展示线性回归在二维空间上的表现。下图中的直线, 即是线性回归所确定的一个界限,其目标是使得数据集中的实际值与线性回归所得的预测值之间的残差平方和最小。 同时也计算了回归系数、残差平方和以及解释方差得分,来判断该线性回归模型的质量。 原文解释和代码不符合: 实际上计算了回归系数, 均方误差(MSE),判定系数(r2_score) 判定系数和解释方差得分并不绝对相

  • 本文向大家介绍基于python中theano库的线性回归,包括了基于python中theano库的线性回归的使用技巧和注意事项,需要的朋友参考一下 theano库是做deep learning重要的一部分,其最吸引人的地方之一是你给出符号化的公式之后,能自动生成导数。本文使用梯度下降的方法,进行数据拟合,现在把代码贴在下方 代码块 其基本思想是随机梯度下降。 以上就是本文的全部内容,希望对大家的学

  • 在本章中,将重点介绍使用TensorFlow进行线性回归实现的基本示例。逻辑回归或线性回归是用于对离散类别进行分类的监督机器学习方法。在本章中的目标是构建一个模型,用户可以通过该模型预测预测变量与一个或多个自变量之间的关系。 这两个变量之间的关系是线性的。如果是因变量的变化而变化,那么可将认为是自变量,那么两个变量的线性回归关系将如下式所示: 接下来将设计一种线性回归算法。需要了解以下两个重要概念

  • 本文向大家介绍sklearn+python:线性回归案例,包括了sklearn+python:线性回归案例的使用技巧和注意事项,需要的朋友参考一下 使用一阶线性方程预测波士顿房价 载入的数据是随sklearn一起发布的,来自boston 1993年之前收集的506个房屋的数据和价格。load_boston()用于载入数据。 输出内容为: 可以看到测试集上准确率并不高,应该是欠拟合。 使用多项式做线