tensorflow--從檔案讀取資料
阿新 • • 發佈:2018-11-03
讀取資料-csv
tensorflow讀取資料流程
- 構造檔案佇列
- 讀取佇列內容
reader = tf.TextLineReader()
- 解析成一個樣本資料
example, label = tf.decode_csv(value, record_defaults=records)
- 批處理
- 主執行緒取樣本
def csvread(filelist):
"""
讀取CSV檔案
:param filelist: 檔案路徑+名字的列表
:return: 讀取的內容
"""
# 1、構造檔案的佇列
# 此操作會隱含地將一個QuenuRunner加入全域性圖中
file_queue = tf.train.string_input_producer(filelist)
# 2、構造csv閱讀器讀取佇列資料(按一行)(key檔名,value讀取的內容)
reader = tf.TextLineReader()
key, value = reader.read(file_queue)
# 3、對每行內容解碼,example, label是指我讀取的資料的兩個特徵
# record_defaults:指定每一個樣本的每一列的型別,指定預設值[["None"], [4.0]]
records = [["None"], ["None"]]
example, label = tf.decode_csv(value, record_defaults=records)
# 4、想要讀取多個數據,就需要批處理
example_batch, label_batch = tf.train.batch([example, label], batch_size=9, num_threads=1, capacity=9)
return example_batch, label_batch
主執行緒呼叫:
# 找到指定資料夾下的所有檔案,將路徑+名字存到列表中
file_name = os.listdir("資料夾路徑")
filelist = [os.path.join("資料夾路徑", file) for file in file_name]
# 呼叫函式讀取資料
example, label = csvread(filelist)
# 會話
with tf.Session() as sess:
# 執行緒協調器
coord = tf.train.Coordinator()
# 開啟讀檔案的執行緒
threads = tf.train.start_queue_runners(sess,coord=coord)
# 打印出來
print(sess.run([example, label]))
#回收子執行緒
coord.request_stop()
coord.join(threads)
讀取資料-圖片
tensorflow讀取資料流程
- 構造檔案佇列
- 讀取佇列內容
tf.WholeFileReader()
- 解析成一個樣本資料
image = tf.image.decode_jpeg(value)
- 批處理
- 主執行緒取樣本
def read_pic(file_list):
# 檔案佇列
file_queue = tf.train.string_input_producer(file_list)
# 讀資料
reader = tf.WholeFileReader()
key, value = reader.read(file_queue)
# 解碼
image = tf.image.decode_jpeg(value)
# 統一圖片大小
image_resize = tf.image.resize_images(image, [300, 200])
# 批處理需要,必須指定通道數
image_resize.set_shape([300,200,3])
# 批處理
image_batch = tf.train.batch([image_resize], batch_size=5)
return image_batch
主執行緒呼叫:
# 找到指定資料夾下的所有檔案,將路徑+名字存到列表中
file_name = os.listdir("資料夾路徑")
filelist = [os.path.join("資料夾路徑", file) for file in file_name]
# 呼叫函式讀取資料
image = read_pic(file_list)
with tf.Session() as sess:
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess, coord=coord)
print(sess.run(image))
coord.request_stop()
coord.join(threads)
讀取資料-二進位制
tensorflow讀取資料流程
- 構造檔案佇列
- 讀取佇列內容
reader = tf.FixedLengthRecordReader(位元組數)
- 解析成一個樣本資料
content = tf.decode_raw(value, tf.uint8)
- 批處理
- 主執行緒取樣本
def bin_reader(filelist):
"""
讀取CSV檔案
:param filelist: 檔案路徑+名字的列表
:return: 讀取的內容
"""
# 1、構造檔案的佇列
# 此操作會隱含地將一個QuenuRunner加入全域性圖中
file_queue = tf.train.string_input_producer(filelist)
# 2、構造csv閱讀器讀取佇列資料(按一行)(key檔名,value讀取的內容)
reader = tf.FixedLengthRecordReader(位元組數)
key, value = reader.read(file_queue)
# 3、對每行內容解碼,需要指定讀取內容的型別
content = tf.decode_raw(value, tf.uint8)
# 4、想要讀取多個數據,就需要批處理
content_batch = tf.train.batch([contentl], batch_size=9, num_threads=1, capacity=9)
return example_batch, label_batch
主執行緒呼叫:
# 找到指定資料夾下的所有檔案,將路徑+名字存到列表中
file_name = os.listdir("資料夾路徑")
filelist = [os.path.join("資料夾路徑", file) for file in file_name]
# 呼叫函式讀取資料
content = bin_reader(filelist)
# 會話
with tf.Session() as sess:
# 執行緒協調器
coord = tf.train.Coordinator()
# 開啟讀檔案的執行緒
threads = tf.train.start_queue_runners(sess,coord=coord)
# 打印出來
print(sess.run([contentl]))
#回收子執行緒
coord.request_stop()
coord.join(threads)