1. 程式人生 > >tensorflow製作資料集之TFRecord

tensorflow製作資料集之TFRecord

前面講解了tensorflow讀取csv格式的資料(http://blog.csdn.net/xuan_zizizi/article/details/78400839 ,以及tensorflow的3個函式gfile,WholeFileReader,read_file 讀取影象資料(http://blog.csdn.net/xuan_zizizi/article/details/78418351) ,這些方法對於小資料量都可以較好的實施,但是對於深度學習的大量圖片則存在效率問題。一般讀取可以理解為直接載入資料進記憶體和通過佇列載入。今天要講的tensorboard就是通過佇列進行讀取圖片集並製作成二進位制的資料集,能更好的利用記憶體,更方便複製和移動,不需要單獨的標籤檔案。下面具體講解:
1.生成TFRecord檔案
寫入TFRecord資料:tf.train.Example 協議記憶體塊包含了Features欄位,通過Features欄位裡面的feature將圖片的二進位制資料和label進行統一封裝, 然後將example協議記憶體塊轉化為字串, tf.python_io.TFRecordWriter 將圖片寫入到TFRecords檔案中。流程如下注釋所示:

import os
import tensorflow as tf 
#cwd = os.getcwd()#自動獲取當前目錄路徑
cwd = '/home/zcm/tensorf/ball/'#手動輸入路徑
classes = {'ball1','ball2'}#類別設定
#定義writer用於寫入資料,tf.python_io.TFRecordWriter 寫入到TFRecords檔案中
writer = tf.python_io.TFRecordWriter("ball_train.tfrecords")#定義生成的檔名為“ball_train.tfrecords”
for index, name in
enumerate(classes): class_path = cwd + name + "/" for img_name in os.listdir(class_path): img_path = class_path + img_name #每一個圖片的地址 img = Image.open(img_path) img = img.resize((224, 224)) #將圖片儲存成224×224大小 img_raw = img.tobytes() #將圖片轉化為原生bytes,#tf.train.Example 協議記憶體塊包含了Features欄位,通過feature將圖片的二進位制資料和label進行統一封裝
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])) })) #example物件對label和image進行封裝 writer.write(example.SerializeToString()) #序列化為字串,example協議記憶體塊轉化為字串 writer.close()

結果在當前執行路徑下生成名為ball_train.tfrecords的檔案。
這裡寫圖片描述
這樣資料集的生成就完成了,接下來就是資料的讀取。
2.讀取TFRecord資料
(1)可以簡單的5通過os讀取:

import os
import tensorflow as tf 

for serialized_example in tf.python_io.tf_record_iterator("ball_train.tfrecords"):
    example = tf.train.Example()
    example.ParseFromString(serialized_example)

    image = example.features.feature['image'].bytes_list.value
    label = example.features.feature['label'].int64_list.value
    # 可以做一些預處理之類的
    print (image,label)

(2)一般比實用的是利用tf.train.string_input_producer()這個函式建立一個佇列,利用tf.RecoderReader()和tf.parse_single_example()來將example協議記憶體塊解析為張量。具體操作如下:

import os
import tensorflow as tf 
from PIL import Image #image後面需要使用

cwd = '/home/zcm/tensorf/ball/'#手動輸入路徑
filename_queue = tf.train.string_input_producer(["ball_train.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, [224, 224, 3])
label = tf.cast(features['label'], tf.int32)
with tf.Session() as sess: #開始一個會話
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    coord=tf.train.Coordinator()
    threads= tf.train.start_queue_runners(coord=coord)
    for i in range(20):
        example, l = sess.run([image,label])#在會話中取出image和label
        img=Image.fromarray(example, 'RGB')#這裡Image是之前提到的
        img.save(cwd+str(i)+'_''Label_'+str(l)+'.jpg')#存下圖片
        print('----------------------------')
        print(example, l)
    coord.request_stop()
    coord.join(threads)

結果打印出圖片的種類和儲存圖片:
這裡寫圖片描述
(3)也可以定義一個函式read_and_decode(filename)來進行讀取和解碼,操作如下所示:

import os
import tensorflow as tf 
from PIL import Image #image後面需要使用

cwd = '/home/zcm/tensorf/ball/'#手動輸入路徑
def read_and_decode(filename): # 讀入dog_train.tfrecords
    filename_queue = tf.train.string_input_producer([filename])#生成一個queue佇列

    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取出來

    img = tf.decode_raw(features['img_raw'], tf.uint8)
    img = tf.reshape(img, [224,224, 3])  #reshape為224*224的3通道圖片
    #歸一化
    img = tf.cast(img, tf.float32) * (1. / 255) - 0.5 #在流中丟擲img張量
    label = tf.cast(features['label'], tf.int32) #在流中丟擲label張量
    return img, label
image, label = read_and_decode("ball_train.tfrecords") #使用函式讀入流中
with tf.Session() as sess: #開始一個會話
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    coord=tf.train.Coordinator()
    threads= tf.train.start_queue_runners(coord=coord)
    for i in range(20):
        example, l = sess.run([image,label])#在會話中取出image和label
        img=Image.fromarray(example, 'RGB')#這裡Image是之前提到的
        img.save(cwd+str(i)+'_''Label_'+str(l)+'.jpg')#存下圖片
        print('----------------------------')
        print(example, l)
    coord.request_stop()
    coord.join(threads)

這裡寫圖片描述
注意:在顯示的時候把歸一化操作註釋掉,但是在進行資料預處理的時候需要加上,下面的圖片是進行歸一化之後的顯示結果。
總結一下自己製作資料集的流程:
這裡寫圖片描述

相關推薦

tensorflow製作資料TFRecord

前面講解了tensorflow讀取csv格式的資料(http://blog.csdn.net/xuan_zizizi/article/details/78400839 ,以及tensorflow的3個函式gfile,WholeFileReader,read_fi

使用tensorflow訓練自己的資料(一)——製作資料

使用tensorflow訓練自己的資料集—製作資料集 想記錄一下自己製作訓練集並訓練的過、希望踩過的坑能幫助後面入坑的人。 本次使用的訓練集的是kaggle中經典的貓狗大戰資料集(提取碼:ufz5)。因為本人筆記本配置很差還不是N卡所以把train的資料分成了訓練集和測試集並沒有使用

深度學習入門專案完整流程——圖片製作資料、訓練網路、測試準確率(TensorFlow+keras)

首先將訓練的圖片和標籤製作成資料集,我用的是numpy庫裡的savez函式,可以將numpy陣列儲存為.npz檔案(無壓縮,所以檔案較大)。 import cv2 as cv import numpy as np import os import glob #調整影象的大小、製作資

tensorflow匯入mnist資料超時解決辦法

首先下載: 下載連結 下載右邊4個檔案,並存在新建的MNIST_data資料夾中。注意⚠️千萬不要解壓!否則就會不停報錯超時! (mac safari瀏覽器下載檔案後會自動解壓,在safari-偏好設定-通用-反選下載後開啟“安全的”檔案即可) 匯入mnist

深度學習(二)——從零自己製作資料到利用deepNN實現誇張人臉表情的實時監測(tensorflow實現)

一、背景介紹 這篇文章主要參考我的上一篇文章:深度學習(一)——deepNN模型實現攝像頭實時識別人臉表情(C++和python3.6混合程式設計)。由於上一篇文章的模型所採用的資料集為fer2013,前面也介紹過這個基於這個資料集的模型識別人臉表情的準確率大概在70%左右

[ MOOC課程學習 ] 人工智慧實踐:Tensorflow筆記_CH6_2 製作資料

製作資料集 tfrecords 檔案: (1) tfrecords: 是一種二進位制檔案,可先將圖片和標籤製作成該格式的檔案。使用 tfrecords 進行資料讀取,會提高記憶體利用率。 (2) tf.train.Example: 用來儲存訓練資料。訓練

TensorFlow Mnist資料下載問題

安裝好TensorFlow後,按教程輸入如下命令時,會出現不能下載資料的問題。 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/",

Tensorflow: MNIST資料實現DNN、CNN、LSTM神經網路

最近學了一下tensorflow的基本用法,這裡做一下總結 全連線深度神經網路(FC-DNN) 全連線深度神經網路,每一層的神經元直接都是全連線,並且不共享權值。在普通的分類的問題中表現的不錯,但是對於圖片處理等具有網格形式的資料,最好採用CNN(卷積神經網路),對於序列化資料如NL

pytorch人臉識別——自己製作資料

這是一篇面向新手的博文:因為本人也是新手,記錄一下自己在做這個專案遇到的大大小小的坑。 按照下面的例子寫就好了 import torch as t from torch.utils import data import os from PIL import Image import numpy as

Tensorflow建立資料(mnist為例)

網上的mnist的demo大部分都是按照實戰google那本來的,但是那個在資料集的處理上用的是TensorFlow的官方api,我們在正常做標籤的時候並不一定要那樣做,本文講解了兩種標籤方式區別於實戰google的demo。 folder方式: ROOT_FOLDER |--------

==5== ubuntu16.04 python3.5安裝labelImg/labelme工具--製作資料

真是嘔心瀝血… labelImg git clone https://github.com/tzutalin/labelImg sudo apt-get install pyqt5-dev-tools sudo pip3 install lxml# 安裝lxml,如果報錯,可以試試下

Semantic Segmentation DeepLab v3 讀取資料TFRecord)程式碼詳解

本文主要介紹谷歌官方在Github TensorFlow中開源的官方程式碼DeepLab在讀取TFRecord格式資料集所使用的方法。 配置DeepLab v3 首先,需要將整個工程拉取到本地的workspace。 2. 將原始碼拉取到自己的workspace中。

lession25 製作資料

  mnist_test.py #encoding:utf-8 #####lesson25 輸入手寫數字圖片輸出識別結果 import tensorflow as tf #MNIST資料集輸出識別準確率 #MNIST資料集: #提供6w張28*28畫素點的0-9手寫數字圖片和

TensorFlow資料讀取tfrecords

關於Tensorflow讀取資料,官網給出了三種方法: 供給資料(Feeding): 在TensorFlow程式執行的每一步, 讓Python程式碼來供給資料。 從檔案讀取資料: 在TensorFlow圖的起始, 讓一個輸入管線從檔案中讀取資料。 預載入資料: 在TensorFlow圖中定義常

Tensorflow mnist資料操作

import sys import numpy as np import matplotlib.pyplot as plt import tensorflow as tf import argparse import matplotlib.image as mpimg fro

基於CNN 的 TensorFlow Mnist 資料實現 (另附識別單幅圖片的源程式)

import tensorflow as tf import numpy as np import mnist_inference import mnist_train_cnn import cv2 import matplotlib.pyplot as plt '''如果自己手寫的圖片是白底黑字的話,可

tensorflow MNIST資料上簡單的MLP網路

一、code import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data'

製作資料標籤--使用labelImg

我們在學習深度學習的時候,會經常用到自己的資料集,而資料集的標籤,往往是用labelImg製作的,下面就講一下labelImg的使用方法 開啟終端,下載labelImg git clone https://github.com/tzutalin/labelImg 安裝依

識別MNIST資料(二):用Python實現神經網路

在這篇文章當中,我們將會用根據MNIST的資料集,跟大家介紹神經網路進行分類的基本原理和方法。 1.神經網路的正向計算 如果我們把神經網路當作一個黑盒來看,它的結構大概是這樣的: 輸入(層):一張圖片 計算過程 : 神經網路 輸出 (層): 這張圖

caffe自己製作資料的時候出現的問題,及解決方法

Creating train lmdb... I0103 08:37:05.753677  4832 convert_imageset.cpp:86] Shuffling data I0103 08:37:05.753800  4832 convert_imageset.cpp: