人工智能TensorFlow(八)-matplotlib动态演示训练过程

通过往期的分享,我们学习了TensorFlow如何定义层,如何使用激励函数的概念,上期分享了matplotlib,那我们利用定义层的代码来实现如何使用matplotlib动态演示训练结果。

定义原始数据

x_data=np.linspace(-1,1,300)[:,np.newaxis]
noise=np.random.normal(0,0.05,x_data.shape)
y_data=np.square(x_data)-0.5+noise

这是往期定义的一个一元二次函数,我们使用matplotlib先显示一下这些是什么样的数据

plt.scatter(x_data,y_data)#scatter 是显示散点图
plt.show()

初始数据散点图

这是定义的原始数据,使用TensorFlow训练来拟合此曲线

predition=add_layer(lay_one,10,1,activation_function=None)#输出层

predition是TensorFlow输出的函数,及是TensorFlow拟合的曲线函数,使用matplotlib来显示predition的训练过程(此期代码在前前的基础上修改,需要源码的朋友,可以参考往期的文章,添加层的文章,本期只修改了训练显示部分)

import matplotlib.pyplot as plt#添加到程序头
#########################开始训练
with tf.Session() as sess:
 sess.run(init)
 fig = plt.figure()
 ax = fig.add_subplot(1, 1, 1)
 ax.scatter(x_data, y_data)
 plt.ion()
 plt.show()
########可视化初始化数据,把原始数据plot到坐标轴中

在plt.show前之所以加ion是因为因为python可视化库matplotlib的显示模式默认为阻塞(block)模式。阻塞模式就是在plt.show()之后,程序会暂停到那儿,并不会继续执行下去。如果需要继续执行程序,就要关闭图片。那如何展示动态图或多个窗口呢?这就要使用plt.ion()这个函数,使matplotlib的显示模式转换为交互(interactive)模式。当遇到plt.show(),代码还是会继续执行.

接下来train神经网络

for i in range(1000):
 sess.run(train,feed_dict={xs:x_data,ys:y_data})
 if i%50==0:
 try:
#删除上一次的图片
 ax.lines.remove(lines[0])
 except Exception:
 pass
#训练输出图片
 predition_value=sess.run(predition,feed_dict={xs:x_data})
#polt出训练的图片
 lines=ax.plot(x_data,predition_value,'r-',lw=5)
 plt.pause(0.5)

定义神经网络训练1000step,每隔50step,查看一下训练的图形.为了生成一个动态的曲线,每当查看训练的图片时,首先删除以前的训练图形,再plot出现在的图形,以此类推,生成一个动态的训练曲线

TensorFlow训练曲线

从训练结果可以看出,刚开始误差loss比较大,通过不停的训练,loss越来越小。

完整代码:

with tf.Session() as sess:
 sess.run(init)
 fig = plt.figure()
 ax = fig.add_subplot(1, 1, 1)
 ax.scatter(x_data, y_data)
 plt.ion()
 plt.show()
 for i in range(1000):
 sess.run(train,feed_dict={xs:x_data,ys:y_data})
 if i%50==0:
 try:
 ax.lines.remove(lines[0])
 except Exception:
 pass
 predition_value=sess.run(predition,feed_dict={xs:x_data})
 lines=ax.plot(x_data,predition_value,'r-',lw=5)
 plt.pause(0.5)

其他代码请参考往期文章

下期预告

TensorFlow带有自己的可视化工具TensorBoard,下期分享TensorBoard的可视化操作(如下图的TensorFlow构造图)

谢谢大家的观看点赞与转发,关于分享的文章,大家有任何问题,可以在评论区一起探讨学习!!!