人工智能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构造图)
谢谢大家的观看点赞与转发,关于分享的文章,大家有任何问题,可以在评论区一起探讨学习!!!