Tensorflow拟合函数:y=2x+3

本文代码在jupyter上实现
拟合一个一元一次函数:y=2x+3,具体要求如下:
1、使用Tensorflow框架
2、利用迭代方法,优化器不限
3、给出拟合的参数值
4、把拟合过程可视化

1.导入模块

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline #实现在线画图

2.可视化构造数据

#构造训练数据
x_data=np.random.rand(1000).astype(np.float)           #随机生成100个类型为float32的值
y_data=x_data*2+np.random.randn(*x_data.shape)*0.5+3   #定义方程式y=x_data*W+b
#可视化
plt.figure()
plt.scatter(x_data,y_data)
plt.plot(x_data,3+2*x_data,'r')

这里写图片描述

3.构造损失函数

# 定义权重和偏置项
w = tf.Variable(1.0,name="w")
b = tf.Variable(0.2,name="b")
y = w*x_data+b
# 计算损失函数定义(均方差)
loss = tf.reduce_mean(tf.square(y-y_data))

4.开始训练

# 设定学习速率为0.01,目的是减少loss到最小
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
sess=tf.Session()
sess.run(tf.global_variables_initializer())
#迭代1000次
for i in range(10000):
    sess.run(train_step)
    if i % 500 == 0 or i+1==10000:
        plt.scatter(x_data,sess.run(w)*x_data+sess.run(b))
        plt.plot(x_data,3+2*x_data,'r')
        print("train_step{},w is {},b is {}".format(i, sess.run(w), sess.run(b)))

这里写图片描述这里写图片描述

5.结果分析

迭代1000次过程中,w,b慢慢向损失函数最小靠近,根据结果可得i=7000以后,损失函数得到最小值,此时的w,b不在变化,所以得到的拟合x_data的最佳函数为y=wx+b,其中w=3.0804200172424316,b=1.976518154144287 。
以上过程第3步是核心,tf.Variable

猜你喜欢

转载自blog.csdn.net/MESSI_JAMES/article/details/81837929