在上一篇文章中,我们通过使用mnist上的图片和标签数据来去制作数据集,而今天这一篇文章我们将在反向传播过程中和测试过程中调用数据集.
一:反向传播获取文件(mnist_backward.py)
先上代码:
在这里我们看到,我们和原有的mnist_backward.py中,我们增加了44,54,64行,修改了57行的代码.这几行代码,接下来我们一起分析一下这几行代码:
1: image_batch, label_batch=mnist_generateds.get_tfrecord(BATCH_SIZE, isTrain=True)
在之前的minst_backward文件中,我们是使用mnist.train.next_bacth()这个函数来读取图片和标签来喂给神经网络的.
现在我们来使用get_tfrecord()这个函数来替换,其中的两个参数是这样,BATCH_SIZE是一次获取BATCH_SIZE数量的图片和标签,isTrain是区分测试过程和训练过程的,如果是True表示训练过程,如果是False表示的是测试过程.
2:xs,ys=sess.run([img_batch,label_batch])
之前我们是使用函数xs,ys=mnist.train.next_batch(BATCH_SIZE),这个函数是mnist已经自己封装好的格式,而现在我们使用xs,ys=sess.run([img_batch,label_batch])来批量获取图片和标签的数据.
3:多线程协调(关键)
在这样的大规模数据读取中,逐条去读肯定是效率低,如果我们可以使用多线程读取,速度可以提升很多,因此我们会使用TensorFlow中的线程协调器来进行操作.
1:开启线程协调器
coord = tf.train.Coordinator( )
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
这个函数将会启动输入队列的线程,填充训练样本到队列中,以便出队操作可以 从队列中拿到样本。这种情况下最好配合使用一个 tf.train.Coordinator ,这 样可以在发生错误的情况下正确地关闭这些线程。
(sess:用于运行队列操作的会话。 默认为默认会话。 coord:可选协调器,用于协调启动的线程。)
2:关闭线程协调器
coord.request_stop( )
coord.join(threads)
直接关闭线程协调器
二:测试传播获取文件(mnist_test.py)
这里改动的为24行,33行,36行,42行,
这里的很多修改跟反向传播文件中类似,只需要参考上边的就可以理解.
现在让我们进行测试:
运行mnist_backward,训练模型
运行mnist_test,使用5000步模型测试
运行minst_app,使用模型进行识别:
网友评论