在上一篇文章中,我們通過使用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,使用模型進行識別: