美文网首页Tensorflow实践
每次一篇10分钟,小步快跑攻陷Tensorflow(简单线性回归

每次一篇10分钟,小步快跑攻陷Tensorflow(简单线性回归

作者: 一块自由的砖 | 来源:发表于2019-11-23 22:32 被阅读0次

目的

通过观察数据大概的样子,猜测对应的模型,根据数据集拟合出一个最优的模型,这样可以计算任何点的值,可以查看历史和未来数据的。

数据集

构建随机的线性数据集

生成100个点的线性随机点

"""
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

#训练数据和测试数据
number=100
list_x = []
list_y = []

for i in range(number):
    x = np.random.randn(1)
    #这里构建的数据的分布满足 y=2*x+3 增加了一些噪点
    y = 2*x+3+np.random.randn(1)*1
    list_x.append(x)
    list_y.append(y)
print(list_x)
print(list_y)

plt.scatter(list_x, list_y)
plt.show()

数据集散点图

数据集散点图

确定拟合模型

根据散点图的分布,散点的趋势是可以有一条直线,通过调整斜率和截距来拟合。猜测是线性模型:y=wx+b。但是w和b咱们是不知道的,怎么知道w和b呢,可以一开始给随机值,然后通过现有数据的训练,最后计算出w和b达到最优解。

模型实现和训练

#初始化x和y的占位符
X = tf.placeholder(tf.float32, name='X')
Y = tf.placeholder(tf.float32, name='Y')
# 初始化 w 和 b
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
#建模,建立op y=w*x+b
Y_pred = tf.add(tf.multiply(X,W),b)
#计算损失函数值
loss = tf.square(Y-Y_pred, name='loss')
#初始化optimizer (优化器)
#学习率
learning_rate = 0.01
#选择优化器,这里使用梯度下降算法
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
#指定迭代次属,并在session中执行graph
#初始化数据样本个数
n_samples = len(list_x)
#初始化全部变量
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    writer = tf.summary.FileWriter('./graphs', sess.graph)
    #训练模型,训练100次
    for i in range(100):
        total_loss = 0
        #zip函数 处理后 [(x1,y1),(x2,y2),...]
        for x, y in zip(list_x, list_y):
            #通过feed_dict把数据喂进去
            #这里说明下先执行了 optimier op 然后再执行 loss op 使用的数据都是feed_dict的
            sess.run([optimizer, loss],feed_dict={X:x,Y:y})
        #每10次输出一个训练情况,看看loss
        if i %10==0:
            print("step %d eval loss is %f" % (i, total_loss/n_samples))
    #关闭writer
    writer.close()
    W = sess.run(W)
    b = sess.run(b)
    #输出下最红的w和b    
    print(W)
    print(b)

取得的W和B
[2.087692]
[3.0534093]

查看拟合情况

plt.plot(list_x, list_y, 'bo', label='real data')
plt.plot(list_x, W*list_x+b, 'r', label='predicted data')
plt.legend()
plt.show()
image.png

全代码

到github查看https://github.com/horacepei/tensorflow_study

tensorboard看图

tensorboard

相关文章

网友评论

    本文标题:每次一篇10分钟,小步快跑攻陷Tensorflow(简单线性回归

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