1. 程式人生 > >TensorFlow 組合訓練資料(batching)

TensorFlow 組合訓練資料(batching)

在之前的文章中我們提到了TensorFlow TensorFlow 佇列與多執行緒的應用以及TensorFlow TFRecord資料集的生成與顯示,通過這些操作我們可以得到自己的TFRecord檔案,並從其中解析出單個的Image和Label作為訓練資料提供給網路模型使用,而在實際的網路訓練過程中,往往不是使用單個數據提供給模型訓練,而是使用一個數據集(mini-batch),mini-batch中的資料個數稱為batch-size。mini-batch的思想能夠有效的提高模型預測的準確率。大部分的內容和之前的操作是相同的,資料佇列中存放的還是單個的資料和標籤,只是在最後的部分將出隊的資料組合成為batch使用,下面給出從原始資料到batch的整個流程:
這裡寫圖片描述


可以看到,截止到生成單個數據佇列操作,和之前並沒有什麼區別,關鍵之處在於最後batch的組合,一般來說單個數據佇列的長度(capacity)和batch_size有關:
capacity = min_dequeue+3*batch_size
我是這樣理解第二個佇列的:入隊的資料就是解析出來的單個的資料,而出隊的資料組合成了batch,一般來說入隊資料和出隊陣列應該是相同的,但是在第二個佇列中不是這樣。

那麼在TensorFlow中如何實現資料的組合呢,其實就是一個函式:
tf.train.batch
或者
tf.train.shuffle_batch
這兩個函式都會生成一個佇列,入隊的資料是單個的Image和Label,而出隊的是一個batch,也已稱之為一個樣例(example)。他們唯一的區別是是否將資料順序打亂。

本文以tf.train.batch為例,定義如下:

def batch(
tensors, //張量
batch_size, //個數
num_threads=1, //執行緒數
capacity=32,//佇列長度
enqueue_many=False, 
shapes=None, 
dynamic_pad=False,
allow_smaller_final_batch=False, 
shared_name=None, 
name=None):

下面寫一個程式碼測試一下,工程目錄下有一個TFRecord資料集檔案,該程式碼主要做以下工作,從TFRecord中讀取單個數據,每四個資料組成一個batch,一共生成10個batch,將40張圖片寫入指定路徑下,命名規則為batch?size?Label?,batch和size決定了是第幾個組合中的第幾個圖,label決定資料的標籤。

import os 
import tensorflow as tf 
from PIL import Image  
import matplotlib.pyplot as plt 
import numpy as np

#路徑
swd = 'F:\\testdata\\show\\'
filename_queue = tf.train.string_input_producer(["mydata.tfrecords"]) #讀入流中
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)   #返回檔名和檔案
features = tf.parse_single_example(serialized_example,
                                   features={
                                       'label': tf.FixedLenFeature([], tf.int64),
                                       'img_raw' : tf.FixedLenFeature([], tf.string),
                                   })  #取出包含image和label的feature物件
image = tf.decode_raw(features['img_raw'], tf.uint8)
image = tf.reshape(image, [36,136,3])
label = tf.cast(features['label'], tf.int32)

#組合batch
batch_size = 4
mini_after_dequeue = 100
capacity = mini_after_dequeue+3*batch_size

example_batch,label_batch = tf.train.batch([image,label],batch_size = batch_size,capacity=capacity)

with tf.Session() as sess: #開始一個會話
    init_op = tf.initialize_all_variables()
    sess.run(init_op)
    coord=tf.train.Coordinator()
    threads= tf.train.start_queue_runners(sess = sess,coord=coord)
    for i in range(10):#10個batch
        example, l = sess.run([example_batch,label_batch])#取出一個batch
        for j in range(batch_size):#每個batch內4張圖
            sigle_image = Image.fromarray(example[j], 'RGB')
            sigle_label = l[j]
            sigle_image.save(swd+'batch_'+str(i)+'_'+'size'+str(j)+'_'+'Label_'+str(sigle_label)+'.jpg')#存下圖片
            print(example, l)

    coord.request_stop()
    coord.join(threads)

這裡寫圖片描述

相關推薦

TensorFlow 組合訓練資料batching

在之前的文章中我們提到了TensorFlow TensorFlow 佇列與多執行緒的應用以及TensorFlow TFRecord資料集的生成與顯示,通過這些操作我們可以得到自己的TFRecord檔案,並從其中解析出單個的Image和Label作為訓練資料提供給

tensorflow學習筆記——使用TensorFlow操作MNIST資料2

               tensorflow學習筆記——使用TensorFlow操作MNIST資料(1) 一:神經網路知識點整理 1.1,多層:使用多層權重,例如多層全連線方式   以下定義了三個隱藏層的全連線方式的神經網路

使用Tensorflow來讀取訓練自己的資料

本文詳解training.py是如何編寫的。 import os import numpy as np import tensorflow as tf import input_data import model N_CLASSES = 2 # 二分類問題,只有是還是否,即0,1 IMG_W

使用Tensorflow來讀取訓練自己的資料

接上一篇,繼續分析,model.py,也就是模型的構建。兩個卷積層,兩個池化層,以及後面的全連線層怎麼通過tensorflow定義的。 import tensorflow as tf def inference(images, batch_size, n_classess): # c

使用Tensorflow來讀取訓練自己的資料

本文的程式碼以及思路都是參考別人的,現在只是整理一下思路,做一些解釋,畢竟是小白。   首先本文所使用的圖片資料都是https://www.kaggle.com/下載的,使用的是貓和狗的圖片集,https://www.kaggle.com/c/dogs-vs-cats-redux-ker

TensorFlow——訓練自己的資料模型評估

模型的評估主要有幾個指標:平均準確率、識別的時間、loss下降變化等。Tensorflow提供了一個log視覺化的工具tensroboard。要看到log就必須在訓練時用summary去記錄想

TensorFlow——訓練自己的資料模型訓練

檔案training.py 匯入檔案 import os import numpy as np import tensorflow as tf import input_data

Tensorflow + ResNet101 + fasterRcnn 訓練自己的模型 資料

一、資料準備: 1、PASCAL VOC資料集格式 2、資料擴充:做了旋轉【0, 90,180,270】(備註:這裡可以不做那麼多許旋轉,fasterrcnn在訓練的時候要做圖片的映象變換)、降取樣 降取樣: import os import cv2 import nu

TensorFlow——訓練自己的資料模型測試

獲取一張圖片 函式:def get_one_image(train): 輸入引數:train,訓練圖片的路徑 返回引數:image,從訓練圖片中隨機抽取一張圖片 n = len(tra

利用tensorflow訓練自己的圖片資料5——測試訓練網路

一.說明 上一篇部落格中,我們已經將建立好的網路模型訓練好了,並將訓練的網路引數儲存在相應的檔案中;下面我們就開始測試網路,驗證網路的訓練效果;本次測試為隨機的單圖片測試,即隨機的從訓練集或測試集中讀取一張圖片,送入到神經網路中進行識別,列印識別率及識別的影象。 二. 程式

利用tensorflow訓練自己的圖片資料3——建立網路模型

一. 說明 在上一部落格——利用tensorflow訓練自己的圖片資料(2)中,我們已經獲得了神經網路的訓練輸入資料:image_batch,label_batch。接下就是建立神經網路模型,筆者的網路模型結構如下: 輸入資料:(batch_size,IMG_W,IMG_H

TensorFlow 訓練 MNIST 資料

上一篇部落格講了一個簡單的基於 SoftMax 迴歸的學習模型,準確率大概在91%左右,這篇構建一個深度卷積神經網路。主要的教程還是來自於極客學院,但是講的很瑣碎,我把自己整理的思路和最後寫的完整的程式碼在這篇博文中呈現出來。 這篇文章大致構建的網路結構如下: 輸入層--&

TensorFlow 訓練 MNIST 1—— softmax 單層神經網絡

float 像素點 min nim 精度 show mnist port 格式化 1、MNIST數據集簡介   首先通過下面兩行代碼獲取到TensorFlow內置的MNIST數據集: from tensorflow.examples.tutorials.mnist i

caffe模型訓練全過程指令碼、資料準備與製作

1.首先建立工程資料夾 資料夾結構如下 |——project ├── create_imagenet.sh #生成lmdb檔案的指令碼 |——train_lmdb ├── data.mdb └── lock.mdb

TensorFlow 訓練 MNIST 1—— softmax 單層神經網路

1、MNIST資料集簡介   首先通過下面兩行程式碼獲取到TensorFlow內建的MNIST資料集: from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('./data

TensorFlow 訓練 MNIST 2—— 多層神經網路

  在我的上一篇隨筆中,採用了單層神經網路來對MNIST進行訓練,在測試集中只有約90%的正確率。這次換一種神經網路(多層神經網路)來進行訓練和測試。 1、獲取MNIST資料   MNIST資料集只要一行程式碼就可以獲取的到,非常方便。關於MNIST的基本資訊可以參考我的上一篇隨筆。 mnist = i

Tensorflow學習之路:從MNIST資料集開始

MNIST資料集簡單介紹: MNIST 資料集可在 http://yann.lecun.com/exdb/mnist/ 獲取, 它包含了四個部分: Training set images: train-images-idx3-ubyte.gz (9.9 MB,

TensorFlow深度學習實戰:AlexNet對MNIST資料集進行分類

概要 進來一段時間在看深度學習中經典的CNN模型相關論文。同時,為了督促自己學習TensorFlow,通讀論文之後開始,利用TensorFlow實現各個模型,復現相關實驗。這是第一篇論文講解的是AlexNet,論文下載網址為:ImageNet Classific

Tensorflow:Android呼叫Tensorflow Mobile版本API1-訓練一個網路

在這裡,我們訓練一個網路來擬合 y=x^2+1 程式碼如下: # y = x^2 + 1 import tensorflow as tf import numpy as np import r

FCN語義分割訓練資料以siftflow和voc2012資料集為例

截至目前,現已經跑通了siftflow-fcn32s,voc-fcn32s,並製作好了自己的資料集,現在就等大批資料的到來,進而針對資料進行引數fine-tuning,現對我訓練的訓練流程和訓練過程中遇到的問題,做出總結和記錄,從而對以後的學習作鋪墊。 通過這篇分析語義分割