Linear Regression with TensorFlow

TensorFlow 操作(也简称为 ops)可以采用任意数量的输入并产生任意数量的输出。 例如,加法运算和乘法运算都需要两个输入并产生一个输出。 常量和变量不输入(它们被称为源操作)。 输入和输出是称为张量的多维数组(因此称为“tensor flow”)。 就像 NumPy 数组一样,张量具有类型和形状。 实际上,在 Python API 中,张量简单地由 NumPyndarray表示。 它们通常包含浮点数,但您也可以使用它们来传送字符串(任意字节数组)。

迄今为止的示例,张量只包含单个标量值,但是当然可以对任何形状的数组执行计算。例如,以下代码操作二维数组来对加利福尼亚房屋数据集进行线性回归(在第 2 章中介绍)。它从获取数据集开始;之后它会向所有训练实例添加一个额外的偏置输入特征(x0 = 1)(它使用 NumPy 进行,因此立即运行);之后它创建两个 TensorFlow 常量节点Xy来保存该数据和目标,并且它使用 TensorFlow 提供的一些矩阵运算来定义theta。这些矩阵函数transpose()matmul()matrix_inverse()是不言自明的,但是像往常一样,它们不会立即执行任何计算;相反,它们会在图形中创建在运行图形时执行它们的节点。您可以认识到θ的定义对应于方程 Linear Regression with TensorFlow - 图1

最后,代码创建一个session并使用它来求出theta

  1. import numpy as np
  2. from sklearn.datasets import fetch_california_housing
  3. housing = fetch_california_housing()
  4. m, n = housing.data.shape
  5. # np.c_按colunm来组合array
  6. housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data]
  7. X = tf.constant(housing_data_plus_bias, dtype=tf.float32, name="X")
  8. y = tf.constant(housing.target.reshape(-1, 1), dtype=tf.float32, name="y")
  9. XT = tf.transpose(X)
  10. theta = tf.matmul(tf.matmul(tf.matrix_inverse(tf.matmul(XT, X)), XT), y)
  11. with tf.Session() as sess:
  12. theta_value = theta.eval()
  13. print(theta_value)

如果您有一个 GPU 的话,上述代码相较于直接使用 NumPy 计算正态方程式的主要优点是 TensorFlow 会自动运行在您的 GPU 上(如果您安装了支持 GPU 的 TensorFlow,则 TensorFlow 将自动运行在 GPU 上,请参阅第 12 章了解更多详细信息)。

其实这里就是用最小二乘法算θ

http://blog.csdn.net/akon_wang_hkbu/article/details/77503725