1. 程式人生 > >tensorflow資料集製作/檔案佇列讀取方式

tensorflow資料集製作/檔案佇列讀取方式

3種資料讀取方式

TensorFlow程式讀取資料一共有3種方法:
供給資料(Feeding): 在TensorFlow程式執行的每一步, 讓Python程式碼來供給資料。
從檔案讀取資料: 在TensorFlow圖的起始, 讓一個輸入管線從檔案中讀取資料。
預載入資料: 在TensorFlow圖中定義常量或變數來儲存所有資料(僅適用於資料量比較小的情況)。

以上3種方式官網中均有介紹
1. input = tf.placeholder(tf.float32) feed方式,先定義一個佔位符,需要sess.run()的時候把資料傳進去。
3.預載入,如下,講資料儲存在常量中,這個方法對於大資料不合適,記憶體資源不夠。

training_data = ...
training_labels = ...
with tf.Session():
  input_data = tf.constant(training_data)
  input_labels = tf.constant(training_labels)

檔案讀取方式

使用原因:例如圖片分類場景中,我們要使用自己的資料集,資料集比較大,需要動態的去新增資料,這樣可以使用佔位符,也可以利用檔案讀取的方式,這種方式更方便。下面我們介紹檔案讀取方式。(這裡特別補充一個問題,佇列是用來解決gpu空閒和記憶體問題的。所有的圖片同時讀到記憶體中是非常大的,記憶體可能承受不了,有了佇列之後,每一次都從佇列載入到記憶體佇列中,這樣就可以新增比較大的圖片了。

http://geek.csdn.net/news/detail/201552 詳解TENSORFLOW讀取機制)

官網中給出的一般步驟
一共典型的檔案讀取管線會包含下面這些步驟:
`檔名列表
`可配置的 檔名亂序(shuffling)
`可配置的 最大訓練迭代數(epoch limit)
`檔名佇列
`針對輸入檔案格式的閱讀器
`紀錄解析器
`可配置的前處理器
`樣本佇列

這裡介紹使用tensorflow的二進位制格式來處理,一是因為這個二進位制檔案操作方便,而且網上有比較通用的處理流程,2是利用圖片生成方便,200M的二進位制檔案可以很快速的生成,但是如果是csv檔案的話,生成速度特別慢,而且200M的excel也打不開的。。(親測)所以還是用二進位制檔案吧!

一下假設有了二進位制檔案,先別急,後面我會告訴大家如何去製作一個屬於自己的資料集!

具體的佇列描述,參考官網即可,我也沒太看懂。
http://www.tensorfly.cn/tfdoc/how_tos/reading_data.html#AUTOGENERATED-preloaded-data
TensorFlow提供了兩個類來幫助多執行緒的實現:tf.Coordinator和 tf.QueueRunner。從設計上這兩個類必須被一起使用。Coordinator類可以用來同時停止多個工作執行緒並且向那個在等待所有工作執行緒終止的程式報告異常。QueueRunner類用來協調多個工作執行緒同時將多個張量推入同一個佇列中。QueueRunner類會建立一組執行緒, 這些執行緒可以重複的執行Enquene操作, 他們使用同一個Coordinator來處理執行緒同步終止。

basePath = '/home/user/xxxxx'

classes = {'c1','c2'}
#生成資料集
def create_record():
    writer = tf.python_io.TFRecordWriter("train.tfrecords")
    for index, name in enumerate(classes):
        class_path = basePath +"/"+ name+"/"
        for img_name in os.listdir(class_path):
            img_path = class_path + img_name
            img = Image.open(img_path)
            img = img.resize((320, 240))
            img_raw = img.tobytes() #將圖片轉化為原生bytes
            #print index,img_raw

            example = tf.train.Example(
                features=tf.train.Features(
                    feature={
                        "label": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),
                        'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))
                    }
                )
            )
            writer.write(example.SerializeToString())
    writer.close()

#讀取二進位制資料
img, label = read_and_decode("../train.tfrecords")
#分塊處理,這裡img_batch,就可以當做輸入看待了,以後每次sess.run()相關操作都會取出一部分,此處相當於你自己寫一個佇列操作去feed x的資料。(個人理解)
img_batch, label_batch = tf.train.shuffle_batch([img, label],
                                            batch_size=4, capacity=2000,
                                            min_after_dequeue=1000)

#官網推薦處理模板
# Create the graph, etc.
init_op = tf.initialize_all_variables()

# Create a session for running operations in the Graph.
sess = tf.Session()

# Initialize the variables (like the epoch counter).
sess.run(init_op)

# Start input enqueue threads.
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)

try:
    while not coord.should_stop():
        # Run training steps or whatever
        sess.run(train_op)

except tf.errors.OutOfRangeError:
    print 'Done training -- epoch limit reached'
finally:
    # When done, ask the threads to stop.
    coord.request_stop()

# Wait for threads to finish.
coord.join(threads)
sess.close()

製作自己的資料集

思路:TFRecords檔案。
獲取這種格式的檔案方式為,首先將一般的資料格式填入Example protocol buffer中,再將 protocol buffer序列化為一個字串,然後使用tf.python_io.TFRecordWriter類的相關方法將字串寫入一個TFRecords檔案中。

#製作二進位制資料
def create_record():
    writer = tf.python_io.TFRecordWriter("train.tfrecords")
    for index, name in enumerate(classes):
        class_path = basePath +"/"+ name+"/"
        for img_name in os.listdir(class_path):
            img_path = class_path + img_name
            img = Image.open(img_path)
            img = img.resize((320, 240))
            img_raw = img.tobytes() #將圖片轉化為原生bytes
            #print index,img_raw

            example = tf.train.Example(
                features=tf.train.Features(
                    feature={
                        "label": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),
                        'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))
                    }
                )
            )
            writer.write(example.SerializeToString())
    writer.close()

小問題

利用CNN分類的時候,出現了資源耗盡問題,網路鋪的太大,顯示卡記憶體就用光了。mnist中使用28*28,我的圖片320*240。主要原因來自於最後全連線層,引數過多。需要單獨處理了!

相關推薦

tensorflow資料製作/檔案佇列讀取方式

3種資料讀取方式 TensorFlow程式讀取資料一共有3種方法: 供給資料(Feeding): 在TensorFlow程式執行的每一步, 讓Python程式碼來供給資料。 從檔案讀取資料: 在TensorFlow圖的起始, 讓一個輸入管線從檔案中讀取資料

MNIST資料的格式以及讀取方式

MNIST 網站 http://yann.lecun.com/exdb/mnist/ 四個檔案 train-images-idx3-ubyte.gz: training set images (9912422 bytes) train-labels-idx1-ubyte.gz

Faster R-CNN Tensorflow實現之資料製作(2)--- xml檔案的讀寫修改

接著上一篇的文章繼續製作自己的資料集,由於需要將資料集弄成與VOC 2007資料集一樣的格式,需要自己手動標註資料,根據網上前輩的經驗,這裡使用了labelImg,版本用了windows_v1 .7.0,操作簡單方便。使用該軟體進行標註後將直接生成以與圖片名稱相同的.XML檔

資料製作之xml檔案轉化為csv

# -*- coding: utf-8 -*- """ 將資料夾內所有XML檔案的資訊記錄到CSV檔案中 """ import os import glob import pandas as pd import xml.etree.ElementTree as ET os.chdir('

MXNET資料製作,生成rec檔案

https://github.com/apache/incubator-mxnet/blob/master/tools/im2rec.py (一)製作rec資料集 (1)下載im2rec.py 檔案 (2)python im2rec.py train 檔案地址(內部按類別分成不同的資料夾)

Tensorflow框架下Faster-RCNN實踐(一)——Faster-RCNN所需資料製作(附程式碼)

最近剛實現了在Ubuntu16.04、Tensorfllow1.0下 Faster R-CNN 從資料製作到訓練再到利用生成的模型檢測的測試圖片的全過程,現在將具體的過程記錄在部落格,方便遇到困惑或者需要的朋友檢視。 製作資料集 利用Fast

tensorflow入門教程二】資料製作:使用TFRecords製作資料集並使用inceptionv3進行訓練

這篇文章中,我們將探討深度學習中最基本的問題,影象分類中的資料集以及標籤的製作;以及使用Inceptionv3網路對其進行訓練。PS:文末附博文配套程式碼以及資料集原圖的下載。先上一張最後的訓練結果圖:17flowers資料集17flowers資料集包含有17種不同的花的圖片

資料製作之txt轉xml

問題描述: 現有images圖片,txt檔案包含四種類別bounding box 座標,需要將txt中兩種類別座標提取出來並轉化成xml檔案。 images資料夾中有18184張圖片,txt資料夾中只有16907個txt檔案(即有一千多張圖片是沒有標註的,需要將這些圖片刪除

論文Multi-Perspective Sentence Similarity Modeling with Convolution Neural Networks實現之資料製作

1.資料集 本文采用的是STS資料集,如下圖所示,包括所有的2012-2016年的資料,而all資料夾包含2012-2015的所有資料。 每一個檔案的具體資料如下所示,每一行為一個三元組:<相似性得分,句子1,句子2>. 在實現時將all資料夾中的所有資料當作

VOC格式資料製作

rename %% %圖片儲存路徑為: %E:\image\car %E:\image\person %car和person是儲存車和行人的資料夾 %這些資料夾還可以有多個, %放在image資料夾裡就行 %該程式碼的作用是將圖片名字改成000123.jp

SOA在Linux下載資料物理檔案設定環境變數

背景 需要用到soa下載資料集物理檔案,並上傳到sftp伺服器,soa程式碼打包為可執行jar,放於Linux伺服器執行,設定了正確的FMS_HOME環境變數,並把FMS_HOME/lib追加在PATH環境變數後,仍然報錯,提示FMS_HOME可能不正確,載入不到FMS_HOME/lib下面

VOC2007格式資料製作

                                <div class="article-copyright">                     版權宣告:本文為博主原創文章,轉載需宣告出處。                    http

關於資料製作過程中對圖片的一些操作

#給圖片建立資料名稱列表: ls > list.txt 給當目錄下的圖片在當前目錄下一個名為list.txt的圖片名稱列表文字檔案 #在已建立圖片名稱列表文字檔案的前提下,給圖片增添型別號 在圖片所在的資料夾下開啟終端,執行下列命令: sed -i “1

JAVA中 IO流文字檔案讀取方式(一)(read 的用法)

JAVA中 IO流文字檔案的讀取方式(read 用法) 首先,我們先用通常的read方法去讀 程式碼 import java.io.FileReader; import java.io.IOException; public class FileReaderd

tensorflow模型儲存, 單個檔案, 模型讀取, 部分模型儲存,讀取

儲存完整的模型 生成一下4個檔案: checkpoint .meta .data-00000-of-00001 .index 使用此方法儲存時,會生成3個檔案,其中字尾為.meta儲存圖的結構和常量,.data和.index儲存模型的權重,偏差,梯度其他的變數

Tensorflow基礎0:檔案讀取與儲存

檔案讀取流程 學習目標 目標 說明TensorFlow檔案讀取的流程 應用 無 有四種獲取資料到TensorFlow程式的方法: tf.dataAPI:輕鬆構建複雜的輸入管道。(優

神坑警告!影象分割資料SYNTHIA之標籤讀取

神坑警告!影象分割資料集SYNTHIA之標籤讀取 神坑警告!影象分割資料集SYNTHIA之標籤讀取 影象分割與SYNTHIA資料集簡介 SYNTHIA資料集影象分割標籤讀取 神坑警告!影象分割資料集SYNTHIA之標

影象分割 | FCN資料製作的全流程(影象標註)

一 全卷積神經網路 文章所有程式碼已上傳至github,覺得好用就給個star吧,謝謝 深度學習影象分割(FCN)訓練自己的模型大致可以以下三步: 1.為自己的資料製作label; 2.將自己的資料分為train,val和test集; 3.仿照voc_lyaers.py編寫自己的輸入資料層。

caffe fcn資料製作 -標籤

caffe下fcn資料集的製作:看過我上篇部落格的人,想必已經跑通了作者的fcn資料集,現在就是製作自己的資料集並進行訓練。其實不難,首先我們分析一下作者的資料集。根據他的資料集,模仿一個即可。首先我們看作者訓練時需要的兩個資料集voc和dataset(這裡我的voc,我自己改了名字叫做voc2016):

ubuntu 使用yolov3 yolo-tiny-v3 基於cudnn 7.1 + cuda 9.1 + opencv 3.4.0 以及yolo資料製作

1.我在Ubuntu官網上直接下載並安裝ubuntu ,顯示卡使用的gtx10702.在nvidia官網家上下載cuda9.1 runtime ubuntu16.04版本3.下載cudnn7.1 (需要註冊)4.在opencv官網上下載opencv3.4.0 原始碼5.在nv