Learning Tensorflow (3)

来源:互联网 发布:网络交换机类型的杂志 编辑:程序博客网 时间:2024/06/11 23:00


  在学习 Tensorflow 官方文档时,简介介绍了用 tensorflow 针对生成的一些三维数据来拟合一个平面的例子。

import tensorflow as tfimport numpy as np# 使用 NumPy 生成假数据(phony data), 总共 100 个点.x_data = np.float32(np.random.rand(2, 100)) # 随机输入y_data = np.dot([0.100, 0.200], x_data) + 0.300# 构造一个线性模型b = tf.Variable(tf.zeros([1]))W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))y = tf.matmul(W, x_data) + b# 最小化方差loss = tf.reduce_mean(tf.square(y - y_data))optimizer = tf.train.GradientDescentOptimizer(0.5)train = optimizer.minimize(loss)# 初始化变量init = tf.initialize_all_variables()# 启动图 (graph)sess = tf.Session()sess.run(init)# 拟合平面for step in xrange(0, 201):    sess.run(train)    if step % 20 == 0:        print step, sess.run(W), sess.run(b)# 得到最佳拟合结果 W: [[0.100  0.200]], b: [0.300]


  例子虽然说明了使用 tensorflow 来拟合平面计算方法步骤,但是这里有个小问题,那就是为了构造数据,平面开始已经给出,目标函数的参数初始给定 w = [0.1, 0.2], b = 0.3 , 最后拟合的最佳结果也是这个最终的结果,有点骑着驴找驴的意思,当然也许是为了对比参照。

  下面我们尝试给出随机数(不指定参数来构造目标函数)来拟合数据,最后我们通过3D图来验证数据的拟合情况。

import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt  from mpl_toolkits.mplot3d import Axes3D  # 构造随机数x_data = np.float32(np.random.rand(2, 150))y_data = np.random.normal(0, 1, 150)    # 构建一个线性模型b = tf.Variable(tf.zeros([1]))w = tf.Variable(tf.random_uniform([1, 2],  -1.0, 1.0))y = tf.matmul(w, x_data) + b# 设置损失函数loss = tf.reduce_mean(tf.square(y - y_data))optimizer = tf.train.GradientDescentOptimizer(0.5)train = optimizer.minimize(loss)# 初始化变量init = tf.initialize_all_variables()# 启动图sess = tf.Session()sess.run(init)# 初始化参数w_ = 0b_ = 0for step in xrange(0, 201):    sess.run(train)    if step % 20 == 0:        print step, sess.run(w), sess.run(b)    if step == 200:        w_ = sess.run(w)        b_ = sess.run(b)# 线性拟合的目标函数值y_ = np.matmul(w_ ,  x_data) + b_# 绘制3D图fig = plt.figure()  ax = fig.add_subplot(111, projection='3d')y = np.random.normal(0, 1, 100)# 数据散点图    ax.scatter(x_data[0],  x_data[1],  y_data)# 原目标函数y值下的曲面ax.plot_trisurf(x_data[0], x_data[1], y_data, color="red")  # 拟合的平面ax.plot_trisurf(x_data[0], x_data[1], y_[0], color="blue")plt.show()  

这里写图片描述

  如图示,蓝色是我拟合出来的平面,红色是用本身数据来构建的图,从拟合情况来看,蓝色平面丢失了很多数据信息,以此平面来对数据做预测误差会比较大,而现实中很多数据之间关系都是不会像我们构造出来的数据一样规则,很漂亮的反应出我们的设想。

原创粉丝点击