僅供自己學習使用利用tensorflow提供的tfrecord資料儲存格式工具,我們可以將我們已經進行過處理的資料儲存起來,以便我們下次更高效地讀取,略過資料處理的過程,提高效率。具體的步驟大概分為以下幾步:tensorflow通過tfrecord高效讀寫資料
將資料轉化為tf.train.feature,然後存於字典;
接著,將其轉化為tf.train.example,然後進行序列化,寫入tf.python_io.tfrecordwriter,到這裡就完成了寫入的操作;
讀取的時候,首先通過tf.data.tfrecorddataset來讀取它;
然後,通過tf.parse_single_example來解析還原資料原本的結構;
最後就可以結合我們上次提高的batch來批量獲取。(關於batch、shuffle、repeat函式的詳細介紹tensorflow dataset.shuffle、batch、repeat用法)
import tensorflow as tf
import collections
import numpy as np
inputs_1 = np.array([
[[1,2], [3,4]],
[[5,6], [7,8]]
])inputs_2 = [
[1.1, 2.2, 3.3],
[4.4, 5.5, 6.6]
]lables = [0, 1]
def create_int_feature(values):
f = tf.train.feature(int64_list=tf.train.int64list(value=list(values))) # 需要注意這裡接受的格式是list,並且只能是一維的
return f
def create_float_feature(values):
f = tf.train.feature(float_list=tf.train.floatlist(value=list(values)))
return f
def create_bytes_feature(values):
f = tf.train.feature(bytes_list=tf.train.byteslist(value=[values]))
return f
writer = tf.python_io.tfrecordwriter('test.tfrecord') # test.tfrecord是寫入的檔案路徑
for i1, i2, l in zip(inputs_1, inputs_2, lables):
features = collections.ordereddict() # 這裡是新建乙個有序字典
# 對於多維陣列,只能先將其轉化為byte,才能傳遞給feature
features['inputs_1'] = create_bytes_feature(i1.tostring())
features['inputs_2'] = create_float_feature(i2)
features['labels'] = create_int_feature([l])
example = tf.train.example(features=tf.train.features(feature=features))
writer.write(example.serializetostring())
writer.close()
name_to_features =
d = tf.data.tfrecorddataset('test.tfrecord')
d = d.repeat() # 這裡repeat不傳遞引數,則會無限重複
d = d.shuffle(buffer_size=2)
# map_and_batch其實就是map和batch結合在一起而已
lambda record: tf.parse_single_example(record, name_to_features),
batch_size=1))
iters = d.make_one_shot_iterator()
batch = iters.get_next()
# byteslist解析時會丟失shape資訊,需要自己還原它的shape,所以一般也會將shape資料一同寫入
# 這裡需要將byte解析成原本的資料結構,這裡的tf.int32需要與寫入時的格式保持一致
inputs_1_batch = tf.decode_raw(batch['inputs_1'], tf.int32)
inputs_1_batch = tf.reshape(inputs_1_batch, [-1, 2, 2])
# 因為每次是batch個inputs_1,所以shape是[-1, 2, 2],原來的shape是[2, 2]
inputs_2_batch = batch['inputs_2']
labels_batch = batch['labels']
sess = tf.session()
# 這樣我們就可以每次獲取乙個batch的資料了
sess.run([inputs_1_batch, inputs_2_batch, labels_batch])
c mysql多執行緒 多執行緒讀寫mysql資料庫
該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 unsigned int stdcall scan pvoid pm char ip 20 strcpy ip,char pm mysql mysql mysql res result 初始化mysql控制代碼 mysql init mysql 連線my...
c 多執行緒mysql 多執行緒讀寫mysql資料庫
該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 unsigned int stdcall scan pvoid pm char ip 20 strcpy ip,char pm mysql mysql mysql res result 初始化mysql控制代碼 mysql init mysql 連線my...
c 多執行緒mysql 多執行緒讀寫mysql資料庫
該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 unsigned int stdcall scan pvoid pm char ip 20 strcpy ip,char pm mysql mysql mysql res result 初始化mysql控制代碼 mysql init mysql 連線my...