寫一個自己的batch函數

學術渣滓在自己改代碼的時候遇到了一個大問題。從github上下載下來的代碼用的訓練集大多數都是minst集。如果想用這個代碼訓練自己的數據,就需要自己動動手改代碼。一切進行的都很順利,把所有有minst集的地方都改成自己的數據集就可以了。最後我發現了一個大問題,我的batch需要自己寫。本來想着抄minst的作業,查了一下參考的minst集是怎麼做的,這個居然是TensorFlow自己寫好的。自己嘗試改了一下,當時忘記自己爲啥放棄了,懶人一定是覺得太難改了。不過沒關係,CSDN的大佬一定會告訴你怎麼做的,經過了一系列的百度,找到了個人認爲比較實用的幾份參考。

附上大佬的鏈接(畢竟咱是根據人家的東西修改得到的,抄襲不是好孩子):

Tensorflow將自己的數據分割成batch訓練:https://blog.csdn.net/sinat_35821976/article/details/82668555

TensorFlow走過的坑之---數據讀取和tf中batch的使用方法:https://www.cnblogs.com/marsggbo/p/10040740.html

不過我用的辦法是第一篇博客裏面的,主要就是兩個函數:

一、tf.slice_input_producer()

作用:作用是從輸入的tensor_list按要求抽取一個tensor放入文件名隊列

tf.slice_input_producer(tensor_list, num_epochs=None, shuffle=True, seed=None,
                         capacity=32, shared_name=None, name=None)

參數說明:

tensor_list:你自己的輸入,格式爲tensor的列表;注:[你的數據名字],親測你要是不加括號會出現bug
num_epohs:設置你想要的訓練次數。如果沒有給定值,那麼將會抽取無數次batch(這會導致你訓練過程停不下來),如果給定值,那麼在到達次數之後就會報OutOfRange的錯誤
shuffle:設置是否隨機。如果爲False,batch是按順序抽取;如果爲True,batch是隨機抽取
seed:隨機種子
capcity:隊列容量的大小,爲整數(沒鬧明白這個是怎麼回事)
name:名稱(可以不寫)

二、tf.train.batch()& tf.train.shuffle_batch()

作用:給你用上一個函數取出來的數據做一個tensor

tf.train.batch([data, label], batch_size=batch_size, capacity=capacity,num_threads=num_thread,allow_smaller_final_batch= True)
tf.train.shuffle_batch([example, label], batch_size=batch_size, capacity=capacity,num_threads=num_thread,allow_smaller_final_batch=True)

參數介紹:

[data,label]:上一個函數的名字
batch_size:batch的大小
capcity:隊列的容量(一個隊列裏允許的最大容量,爲整數)
num_threads:線程數,使用多少個線程來控制整個隊列。如果num_threads大於1,則batch操作將是非確定性的,輸出的batch可能會亂序
allow_smaller_final_batch:這個是當最後的幾個樣本不夠組成一個batch的時候用的參數,如果爲True則會重新組成一個batch

三、自己的batch函數

讀函數這個事吧,對於學渣來說還是太頭疼了。基本上的意思就是如果你想用TensorFlow寫自己batch就要用到這兩個函數。

def get_Batch(data, batch_size):
    #print(data.shape)測試用的,忽略這一行
    input_queue = tf.train.slice_input_producer([你自己數據的名字噢], num_epochs=這塊一定要改好,小編吃過虧, shuffle=True(隨機), capacity=64 )
    x_batch = tf.train.batch(input_queue, batch_size=batch_size, num_threads=1, capacity=64, allow_smaller_final_batch=False)
    return x_batch
#引用函數就可以了
f = get_Batch(train_data,batch_size)
#f就是你的訓練集

不知道還有什麼補充的沒有,如果想起來會修改的。如果有說錯的地方,大家要指出來啊。

今日的文案收工啦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章