Tensorflow模拟简单线性模型小栗子

本文通过模拟数据构造线性模型,使用TensorFlow与梯度下降算法估计模型系数。展示了从数据生成到模型训练全过程,并通过图表比较了不同迭代次数下的拟合效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文通过模拟产生数据,构造简单的线性模型,使用TensorFlow工具,利用梯度下降算法,估计模型系数,给出收敛效果,so,let’s begin , just do it !

首先加载我们将要用的的库

import tensorflow as tf
import numpy as np

模拟产生数据

x_data = np.random.rand(100).astype(np.float32)

公式

y_data =0.5* x_data**2 + 0.3

下面看看我们画图看看数据到底长成什么样子,是不是美丽的

这里写图片描述

从图中我们是可以看出二次趋势的,下面开始我们的tensorflow模拟过程。

产生Tensorflow结构的数据

### create tensorflow Weights and biases ###

Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
biases = tf.Variable(tf.zeros([1]))

公式和上面一样

### generate formula as above

y = Weights*x_data**2 + biases

优化过程

首先,定义损失函数(这里使用MSE)

### define loss  function
loss = tf.reduce_mean(tf.square(y-y_data))

使用梯度下降最优化损失函数,步长暂定为0.05

### define optimization:use GradientDescentOptimizer
### choose learning rate : 0.05 or other ...

optimizer = tf.train.GradientDescentOptimizer(0.05)

极小化损失函数

### minimize optimize

train = optimizer.minimize(loss)

初始化变量

###initial variables

init = tf.global_variables_initializer()

结束创建tensorflow结构,并且run起来

### create tensorflow structure end ###

sess = tf.Session()
sess.run(init)

我们选择迭代次数为400次,部分打印优化得到的结果

for step in range(401):
    sess.run(train)
    if step % 10 == 0:
        print(step, sess.run(Weights), sess.run(biases))


#迭代结果
0 [ 0.45762387] [ 0.31559378]
20 [ 0.46390951] [ 0.31328076]
40 [ 0.46926278] [ 0.3113108]
60 [ 0.47382206] [ 0.30963311]
80 [ 0.477705] [ 0.3082042]
100 [ 0.48101205] [ 0.30698729]
120 [ 0.48382849] [ 0.30595091]
140 [ 0.48622724] [ 0.30506817]
160 [ 0.48827016] [ 0.30431643]
180 [ 0.49001008] [ 0.30367616]
200 [ 0.49149185] [ 0.30313087]
220 [ 0.49275389] [ 0.30266646]
240 [ 0.49382871] [ 0.30227098]
260 [ 0.49474409] [ 0.30193409]
280 [ 0.49552372] [ 0.30164719]
300 [ 0.49618763] [ 0.30140293]
320 [ 0.49675313] [ 0.30119479]
340 [ 0.49723473] [ 0.30101761]
360 [ 0.49764487] [ 0.30086669]
380 [ 0.49799421] [ 0.3007381]
400 [ 0.49829179] [ 0.30062863]

看看预测效果

pre =  sess.run(Weights)*x_data**2 + sess.run(biases)

对比效果

为方便将我们的预测结果与原始数据做对比,选择迭代次数变化过程中拟合效果的可视化展示:

import matplotlib.pyplot as plt  

fig,ax = plt.subplots(figsize=(20,10))  

plt.plot(x_data,pre,'bo',label="Predicted data",color='red')
plt.plot(x_data,y_data,"bo",label="Original data",color='blue') 

"""open the grid"""  
plt.grid(True)  

plt.legend(bbox_to_anchor=(1.0, 1), fontsize=25,loc=1, borderaxespad=0.)  

plt.title("Linear Model: iteration 100 times : y =0.5*x^2 + 0.3",fontsize=25)
plt.show() 

迭代100次效果:

这里写图片描述

迭代200次效果:

这里写图片描述

迭代300次效果:

这里写图片描述

迭代400次效果:

这里写图片描述

固定学习率,从迭代次数逐渐增加的过程中可以看出拟合效果也是逐渐刚刚的好。

一个tensorflow的简单小栗子就这样告成了,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值