1.tensorflow提供了tfrecords的格式來統一儲存資料,理論上,tfrecords可以儲存任何形式的資料。 tfrecords檔案中的資料都是通過tf.train.example protocol buffer的格式儲存的。以下的**給出了tf.train.example的定義。
message example ;
message features ;
message feature
};下面將介紹如何生成和讀取tfrecords檔案:
from random import shuffle
import numpy as np
import glob
import tensorflow as tf
import cv2
import sys
import os
# 因為我裝的是cpu版本的,執行起來會有'warning',解決方法入下,眼不見為淨~
# 取得該路徑下所有的路徑,type(addrs)= list
addrs = glob.glob(image_path)
# 標籤資料的獲得具體情況具體分析,type(labels)= list
labels = ...
# 這裡是打亂資料的順序
if shuffle_data:
c = list(zip(addrs, labels))
shuffle(c)
addrs, labels = zip(*c)
# 按需分割資料集
train_addrs = addrs[0:int(0.7*len(addrs))]
train_labels = labels[0:int(0.7*len(labels))]
val_addrs = addrs[int(0.7*len(addrs)):int(0.9*len(addrs))]
val_labels = labels[int(0.7*len(labels)):int(0.9*len(labels))]
test_addrs = addrs[int(0.9*len(addrs)):]
test_labels = labels[int(0.9*len(labels)):]
# 上面不是獲得了image的位址麼,下面這個函式就是根據位址獲取
def load_image(addr): # a function to load image
img = cv2.imread(addr)
img = cv2.resize(img, (224, 224), interpolation=cv2.inter_cubic)
img = cv2.cvtcolor(img, cv2.color_bgr2rgb)
# 這裡/255是為了將畫素值歸一化到[0,1]
img = img / 255.
img = img.astype(np.float32)
return img
# 將資料轉化成對應的屬性
def _int64_feature(value):
return tf.train.feature(int64_list=tf.train.int64list(value=[value]))
def _bytes_feature(value):
return tf.train.feature(bytes_list=tf.train.byteslist(value=[value]))
def _float_feature(value):
return tf.train.feature(float_list=tf.train.floatlist(value=[value]))
# 下面這段就開始把資料寫入tfrecods檔案
train_filename = '/path/to/train.tfrecords' # 輸出檔案位址
# 建立乙個writer來寫 tfrecords 檔案
writer = tf.python_io.tfrecordwriter(train_filename)
for i in range(len(train_addrs)):
# 這是寫入操作視覺化處理
if not i % 1000:
print('train data: {}/{}'.format(i, len(train_addrs)))
sys.stdout.flush()
# 載入
img = load_image(train_addrs[i])
label = train_labels[i]
# 建立乙個屬性(feature)
feature =
# 建立乙個 example protocol buffer
example = tf.train.example(features=tf.train.features(feature=feature))
# 將上面的example protocol buffer寫入檔案
writer.write(example.serializetostring())
writer.close()
sys.stdout.flush()
上面只介紹了train.tfrecords檔案的生成,其餘的validation,test舉一反三吧。。
接下來介紹tfrecords檔案的讀取:
tfrecords檔案製作
encoding utf 8 import os import tensorflow as tf from pil import image cwd e deep learing tensorflow inception v3 retrain data train classes 製作二進位制資料 ...
tfrecords資料的讀寫
tfrecords write.py import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data import numpy as np 定義乙個writer 轉化資料的格式 包裝好乙個examp...
DMP檔案的生成和使用
來自 1.minidump.h include include include pragma comment lib,dbghelp.lib long winapi myunhandledfilter struct exception pointers lpexceptioninfo else cl...