日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorFlow入门(十-I)tfrecord 固定维度数据读写

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow入门(十-I)tfrecord 固定维度数据读写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本例代碼:https://github.com/yongyehuang/Tensorflow-Tutorial/tree/master/python/the_use_of_tfrecord

關于 tfrecord 的使用,分別介紹 tfrecord 進行三種不同類型數據的處理方法。
- 維度固定的 numpy 矩陣
- 可變長度的 序列 數據
- 圖片數據

在 tf1.3 及以后版本中,推出了新的 Dataset API, 之前趕實驗還沒研究,可能以后都不太會用下面的方式寫了。這些代碼都是之前寫好的,因為注釋中都寫得比較清楚了,所以直接上代碼。

tfrecord_1_numpy_writer.py

# -*- coding:utf-8 -*- import tensorflow as tf import numpy as np from tqdm import tqdm'''tfrecord 寫入數據. 將固定shape的矩陣寫入 tfrecord 文件。這種形式的數據寫入 tfrecord 是最簡單的。 refer: http://blog.csdn.net/qq_16949707/article/details/53483493 '''# **1.創建文件,可以創建多個文件,在讀取的時候只需要提供所有文件名列表就行了 writer1 = tf.python_io.TFRecordWriter('../data/test1.tfrecord') writer2 = tf.python_io.TFRecordWriter('../data/test2.tfrecord')""" 有一點需要注意的就是我們需要把矩陣轉為數組形式才能寫入 就是需要經過下面的 reshape 操作 在讀取的時候再 reshape 回原始的 shape 就可以了 """ X = np.arange(0, 100).reshape([50, -1]).astype(np.float32) y = np.arange(50)for i in tqdm(xrange(len(X))): # **2.對于每個樣本if i >= len(y) / 2:writer = writer2else:writer = writer1X_sample = X[i].tolist()y_sample = y[i]# **3.定義數據類型,按照這里固定的形式寫,有float_list(好像只有32位), int64_list, bytes_list.example = tf.train.Example(features=tf.train.Features(feature={'X': tf.train.Feature(float_list=tf.train.FloatList(value=X_sample)),'y': tf.train.Feature(int64_list=tf.train.Int64List(value=[y_sample]))}))# **4.序列化數據并寫入文件中serialized = example.SerializeToString()writer.write(serialized)print('Finished.') writer1.close() writer2.close()

tfrecord_1_numpy_reader.py

# -*- coding:utf-8 -*- import tensorflow as tf'''read data 從 tfrecord 文件中讀取數據,對應數據的格式為固定shape的數據。 '''# **1.把所有的 tfrecord 文件名列表寫入隊列中 filename_queue = tf.train.string_input_producer(['../data/test1.tfrecord', '../data/test2.tfrecord'], num_epochs=None,shuffle=True) # **2.創建一個讀取器 reader = tf.TFRecordReader() _, serialized_example = reader.read(filename_queue) # **3.根據你寫入的格式對應說明讀取的格式 features = tf.parse_single_example(serialized_example,features={'X': tf.FixedLenFeature([2], tf.float32), # 注意如果不是標量,需要說明數組長度'y': tf.FixedLenFeature([], tf.int64)} # 而標量就不用說明) X_out = features['X'] y_out = features['y']print(X_out) print(y_out) # **4.通過 tf.train.shuffle_batch 或者 tf.train.batch 函數讀取數據 """ 在shuffle_batch 函數中,有幾個參數的作用如下: capacity: 隊列的容量,容量越大的話,shuffle 得就更加均勻,但是占用內存也會更多 num_threads: 讀取進程數,進程越多,讀取速度相對會快些,根據個人配置決定 min_after_dequeue: 保證隊列中最少的數據量。假設我們設定了隊列的容量C,在我們取走部分數據m以后,隊列中只剩下了 (C-m) 個數據。然后隊列會不斷補充數據進來,如果后勤供應(CPU性能,線程數量)補充速度慢的話,那么下一次取數據的時候,可能才補充了一點點,如果補充完后的數據個數少于min_after_dequeue 的話,不能取走數據,得繼續等它補充超過 min_after_dequeue 個樣本以后才讓取走數據。這樣做保證了隊列中混著足夠多的數據,從而才能保證 shuffle 取值更加隨機。但是,min_after_dequeue 不能設置太大,否則補充時間很長,讀取速度會很慢。 """ X_batch, y_batch = tf.train.shuffle_batch([X_out, y_out], batch_size=2,capacity=200, min_after_dequeue=100, num_threads=2) sess = tf.Session() init = tf.global_variables_initializer() sess.run(init)# **5.啟動隊列進行數據讀取 # 下面的 coord 是個線程協調器,把啟動隊列的時候加上線程協調器。 # 這樣,在數據讀取完畢以后,調用協調器把線程全部都關了。 coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(sess=sess, coord=coord) y_outputs = list() for i in xrange(5):_X_batch, _y_batch = sess.run([X_batch, y_batch])print('** batch %d' % i)print('_X_batch:', _X_batch)print('_y_batch:', _y_batch)y_outputs.extend(_y_batch.tolist()) print(y_outputs)# **6.最后記得把隊列關掉 coord.request_stop() coord.join(threads)

總結

以上是生活随笔為你收集整理的TensorFlow入门(十-I)tfrecord 固定维度数据读写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。