tensorflow tf.train.batch之?dāng)?shù)據(jù)批量讀取方式
在進行大量數(shù)據(jù)訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時候,可能需要批量讀取數(shù)據(jù)。于是參考了這篇文章的代碼,結(jié)果發(fā)現(xiàn)數(shù)據(jù)一直批量循環(huán)輸出,不會在數(shù)據(jù)的末尾自動停止。
然后發(fā)現(xiàn)這篇博文說slice_input_producer()這個函數(shù)有一個形參num_epochs,通過設(shè)置它的值就可以控制全部數(shù)據(jù)循環(huán)輸出幾次。
于是我設(shè)置之后出現(xiàn)以下的報錯:
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value input_producer/input_producer/limit_epochs/epochs
[[Node: input_producer/input_producer/limit_epochs/CountUpTo = CountUpTo[T=DT_INT64, _class=["loc:@input_producer/input_producer/limit_epochs/epochs"], limit=2, _device="/job:localhost/replica:0/task:0/cpu:0"](input_producer/input_producer/limit_epochs/epochs)]]
找了好久,都不知道為什么會錯,于是只好去看看slice_input_producer()函數(shù)的源碼,結(jié)果在源碼中發(fā)現(xiàn)作者說這個num_epochs如果不是空的話,就是一個局部變量,需要先調(diào)用global_variables_initializer()函數(shù)初始化。
于是我調(diào)用了之后,一切就正常了,特此記錄下來,希望其他人遇到的時候能夠及時找到原因。
哈哈,這是筆者第一次通過閱讀源碼解決了問題,心情還是有點小激動。啊啊,扯遠(yuǎn)了,上最終成功的代碼:
import pandas as pd
import numpy as np
import tensorflow as tf
def generate_data():
num = 25
label = np.asarray(range(0, num))
images = np.random.random([num, 5])
print('label size :{}, image size {}'.format(label.shape, images.shape))
return images,label
def get_batch_data():
label, images = generate_data()
input_queue = tf.train.slice_input_producer([images, label], shuffle=False,num_epochs=2)
image_batch, label_batch = tf.train.batch(input_queue, batch_size=5, num_threads=1, capacity=64,allow_smaller_final_batch=False)
return image_batch,label_batch
images,label = get_batch_data()
sess = tf.Session()
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())#就是這一行
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess,coord)
try:
while not coord.should_stop():
i,l = sess.run([images,label])
print(i)
print(l)
except tf.errors.OutOfRangeError:
print('Done training')
finally:
coord.request_stop()
coord.join(threads)
sess.close()
以上這篇tensorflow tf.train.batch之?dāng)?shù)據(jù)批量讀取方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python報錯:OSError:?[Errno?22]?Invalid?argument解決方案及應(yīng)用實例
最近跑別人的項目遇到一個這樣的問題一開始以為是沒有用管理員的權(quán)限運行,導(dǎo)致創(chuàng)建不了日志文件后來發(fā)現(xiàn)是和windows的命名規(guī)則沖突了,這篇文章主要給大家介紹了關(guān)于Python報錯:OSError:?[Errno?22]?Invalid?argument的解決方案及應(yīng)用實例,需要的朋友可以參考下2024-07-07
tensorflow 1.X遷移至tensorflow2 的代碼寫法
本文主要介紹了tensorflow 1.X遷移至tensorflow2 的代碼寫法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
Python學(xué)習(xí)之不同數(shù)據(jù)類型間的轉(zhuǎn)換總結(jié)
類型轉(zhuǎn)換,就是將自身的數(shù)據(jù)類型變成新的數(shù)據(jù)類型,并擁有新的數(shù)據(jù)類型的所有功能的過程。本文將詳細(xì)為大家介紹如何在Python中實現(xiàn)不同數(shù)據(jù)類型的轉(zhuǎn)換,感興趣的可以了解一下2022-03-03
如何使用Python 抓取和優(yōu)化所有網(wǎng)站圖像
我發(fā)布了一個通過FTP自動優(yōu)化新圖像的教程。這次我們將抓取整個網(wǎng)站,并在本地優(yōu)化我們遇到的圖像,按URL組織,怎么來操作呢,下面跟隨小編一起學(xué)習(xí)使用Python 抓取和優(yōu)化所有網(wǎng)站圖像的方法,感興趣的朋友一起看看吧2023-02-02

