美文网首页
TensorFlow---拟合二维数据分析

TensorFlow---拟合二维数据分析

作者: 善笃有余劫 | 来源:发表于2018-11-19 22:58 被阅读42次

前言

TensorFlow 当我第一次打开TensorFlow教程,第一个实例就是使用随机生成的数据拟合y=2x函数。虽然整个代码完整敲一遍还不太明白。但是得到了想要的结果还是很激动。
下面来仔细分析代码

拟合二维数据y=2x.py

导入包

import tensorflow as tf 
import numpy as np # 数学计算
import matplotlib.pyplot as plt # 画图用到的

录入数据

这里使用生成的100个随机数,而且添加了一点随机变化。

#生成模拟数据
train_X = np.linspace(-1, 1, 100) # linspace 均分函数 表示 在-1,1之前平均取100个点
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 # y=2x,但是加入了噪声

为了更直观 可以画出这100个点来

#显示模拟数据点
plt.plot(train_X, train_Y, 'ro', label='Original data') # 绘图 标签
plt.legend()
plt.show()

结果如图:

image.png

创建模型

模型分为两部分1.正向模型 2.反向模型
正向模型构造权重和偏执的值,得到结果。
反向模型计算得到的结果与实际结果的偏差,通过优化W和b的值返回给正向模型计算。
如此反复得到最优的W和b的值。

正向的数据模型

# 占位符
X = tf.placeholder("float")
Y = tf.placeholder("float")
# 模型参数 
W = tf.Variable(tf.random_normal([1]), name="weight") # w是矩阵 所以大写来区分。初始值为0到1的随机值
b = tf.Variable(tf.zeros([1]), name="bias") # 初始为0的一维数组

# 前向结构
z = tf.multiply(X, W)+ b # 计算结果

反向的数据模型

#反向优化
cost =tf.reduce_mean( tf.square(Y - z))
learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent

cost 即方差,计算出Y的值和得到的z的方差。
learning_rate 表示学习效率 这个值需要适当调整 一般是小于1的小数。
optimizer 优化器 通过tf.train 使用 GradientDescentOptimizer(梯度下降优化器) 减小 cost的值。

开始训练模型

最重要的一句:

# 初始化变量 不然前面所有定义的变量都无效
init = tf.global_variables_initializer() 

定义两个参数 一个 训练总步数 一个 显示数据跳的步数

# 训练参数
training_epochs = 20
display_step = 2

训练代码如下:

# 启动session
with tf.Session() as sess: # python语法 session可以自动关闭
    sess.run(init) # 载入所有变量
    # Fit all training data
    for epoch in range(training_epochs): # 循环 20次
        for (x, y) in zip(train_X, train_Y):  # 循环取出数据集数据 python zip函数
            sess.run(optimizer, feed_dict={X: x, Y: y})  

这里指定注意的是 optimizer 是一个 placeholder(占位符) 变量 每次run都需要传入字典类型的参数。这里传入x,y的值 用于计算方差 优化迭代

显示训练过程中的变化:
loss 即 误差大小 可以观测到整个误差值的变化

plotdata = { "batchsize":[], "loss":[] } //with session 外定义字典


# 启动session 往字典内加入值
with tf.Session() as sess:
    ...... 
    ...... ,  MMMMMMMMMM
        #显示训练中的详细信息
        if epoch % display_step == 0:
            loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
            print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))
            if not (loss == "NA" ):
                plotdata["batchsize"].append(epoch)
                plotdata["loss"].append(loss)
    //绘制字典内容
    plotdata["avgloss"] = moving_average(plotdata["loss"])
    plt.figure(1)
    plt.subplot(211)
    plt.plot(plotdata["batchsize"], plotdata["avgloss"], 'b--')
    plt.xlabel('Minibatch number')
    plt.ylabel('Loss')
    plt.title('Minibatch run vs. Training loss')
    plt.show()

图像显示:

image.png

当然顺便也绘制了拟合后的函数图像。

image.png

使用训练结果:

假设输入0.2

    print ("x=0.2,z=", sess.run(z, feed_dict={X: 0.2}))

得出:

x=0.2,z= [0.40521938]

运行z函数 利用得到的w和b 输入0.2得到0.4

总结

这里主要是学习到 整个机器学习训练的过程。

相关文章

  • TensorFlow---拟合二维数据分析

    前言 TensorFlow 当我第一次打开TensorFlow教程,第一个实例就是使用随机生成的数据拟合y=2x函...

  • 数据拟合之Excel篇

    要尝试入门数据分析,不如从数据拟合入手,毕竟操作起来非常非常非常简单! 什么是数据拟合 按照百度给出的定义,数据拟...

  • python实现多元线性拟合、一元多项式拟合、多元多项式拟合

    数据分析中经常会使用到数据拟合,本文中将阐述如何实现一元以及多元的线性拟合以及多项式拟合,本文中只涉及实现方式,不...

  • 生活中的“过拟合”

    在数据分析中,经常会出现“过拟合”现象,判断方法为一个假设在训练数据上能够获得比其他假设更好的拟合,但在训练数据外...

  • sklearn调包侠之线性回归

    线性回归原理 如图所示,这是一组二维的数据,我们先想想如何通过一条直线较好的拟合这些散点了?直白的说:尽量让拟合的...

  • R环境下实现非线性拟合(多项式拟合)以及ggplot2的可视化

    对数据的拟合(回归分析)是常见的分析需求,可以更直观地反应数据的变化趋势,并对数据进行评价。(虽然这个东西exce...

  • 四、正则化

    欠拟合 模型拟合程度不高,数据距离拟合曲线较远,或指模型没有很好地捕捉到数据特征,不能够很好地拟合数据 过拟合(“...

  • Machine Learning基础:欠拟合和过拟合

    1 欠拟合 欠拟合是指模型拟合程度不高,数据距离拟合曲线较远,或指数据没有很好地捕捉到数据特征,不能够很好地拟合数...

  • TensorFlow-拟合

    过拟合overfitting 过于的拟合 拟合的结果 欠拟合 拟合完美 过度拟合 过度拟合的解决方法 减少数据 平...

  • 机器学习之线性回归

    线性回归是一种回归分析技术.回归分析就是利用样本(已知数据),产生拟合方程,从而对未知数据进行预测,回归在于分...

网友评论

      本文标题:TensorFlow---拟合二维数据分析

      本文链接:https://www.haomeiwen.com/subject/etihfqtx.html