本文,给出两组随机数据,并尝试着找出这两组数据之间的函数关系。本文只准备拟合出一个一次函数,虽然这样的结果,很可能并不能很好的拟合数据。
工具/原料
电脑
python3.6(Anaconda)
tensorflow模块
numpy模块
准备数据
1、给出两组随机数:import tensorflow as tfimport numpy as npx忧溲枷茫_data = np.random.rand(300).astype(np.float32)y_data = np.random.rand(300).astype(np.float32)
2、打印一下x_data,这是由300个随机实数组成的数组。
3、打印一下y_data,也是300个随机实数,与x_data的数字一一对应。
创建训练结构
1、本文的目标,是找到一个函数:y = W*x_data+b能够尽量拟合给定的数组数据。
2、其中,一次项系数W称为权重,是一个介于-1到1之间的实数:W = tf.Variable(tf.random_uniform([1],-1.0,1.0))
3、常数项b的初始值是0:b = tf.Variable(tf.zeros([1]))
4、loss是y与y_data的误差:loss = tf.reduce_mean(tf.square(y-y_data))
5、用梯度下降法制作一个优化器(optimizer),通过训练,来减少误差:optimizer = tf.train.GradientDescentOptimizer(0.5)train = optimizer.minimize(loss)
6、初始化所有的变量:init = tf.initialize_all_variables()这样,基本的训练结构就完成了。
开始训练
1、创建一个对话:sess = tf.Session()激活所有的初始化变量:sess.run(init)
2、开始长达10000次的训练:for step in range(10001): sess.run烫喇霰嘴(train)#每隔100次,就输出一下对应的W和b: if step%100==0: print(str(step).rjust(5),sess.run(W),sess.run(b))训练结束后,关闭对话:sess.close()
3、运行一下,看看具体的训练过程。
4、在关闭对话之前,还可以插入数据对应的图像,以及训练的函数y对应的图像:import matplotlib.pyplot as ptpt.axis('on&垆杪屑丝#39;)pt.scatter(x_data,y_data,c='g')pt.scatter(x_data,sess.run(W*x_data+b), c='r')pt.show()图中,绿色点是给出的随机数据的图像,红色线是拟合的函数图像;由于数据点过于分散,因此,一次函数并不能很好的拟合这组数据;这里拟合出的y,只是误差尽可能小的一次函数。