1. 程式人生 > >tensorflow--從檔案讀取資料

tensorflow--從檔案讀取資料

讀取資料-csv

tensorflow讀取資料流程

  1. 構造檔案佇列
  2. 讀取佇列內容 reader = tf.TextLineReader()
  3. 解析成一個樣本資料 example, label = tf.decode_csv(value, record_defaults=records)
  4. 批處理
  5. 主執行緒取樣本
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讀取資料流程

  1. 構造檔案佇列
  2. 讀取佇列內容 tf.WholeFileReader()
  3. 解析成一個樣本資料 image = tf.image.decode_jpeg(value)
  4. 批處理
  5. 主執行緒取樣本
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讀取資料流程

  1. 構造檔案佇列
  2. 讀取佇列內容 reader = tf.FixedLengthRecordReader(位元組數)
  3. 解析成一個樣本資料 content = tf.decode_raw(value, tf.uint8)
  4. 批處理
  5. 主執行緒取樣本
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)