天天看點

tensorflow資料讀取流程和tf.data的使用讀取資料流程

讀取資料流程

tensorflow資料讀取流程和tf.data的使用讀取資料流程

該過程可以分為三步

  • 構造檔案名隊列

把檔案名隊列讀取進來,并随即打亂shufflu,即從filename到Filename到FilenameQueeue階段

file_queue=tf.train.string_input_producer(file_list)
           
  • 讀取與解碼

使用讀取器從上一步拿到的檔案名隊列,從檔案中讀取資料,按照一個樣本為機關讀取的,圖檔,文本,的編碼不同,使用的解碼器不同。

reader=tf.WholeFileReader()
    _,value=reader.read(file_queue)
    image_a=tf.image.decode_jpeg(value,channels=3)
    image=tf.image.resize_images(image_a,[iamge_size,image_size])
    image=tf.cast(image,tf.float32)
    image=tf.reshape(image,shape=[iamge_size,image_size,channel])
           
  • 批處理階段

建構批次即batch_size

inputs=tf.train.batch([image],batch_size=22,num_threads,capacity)
           
  • tf.data進階API的使用

self.tfrecordFile是解析tfrecord的路徑,
dataset = tf.data.TFRecordDataset(filenames = self.TfrecordFile)
num_parallel_calls 參數的最優值取決于你的硬體,訓練資料的特點(比如:它的 size、shape),map 函數的計算量 和 CPU 上同時進行的其它處理。一個簡單的原則是:将 num_parallel_calls 設定為 CPU 的核心數。例如,如果 CPU 有四個核,将 num_parallel_calls 設定為 4 将會很高效。另一方面,設定 num_parallel_calls 大于 CPU 的核心數,能夠導緻低效的排程,導緻輸入管道速度下降
dataset = dataset.map(self.parser, num_parallel_calls = 10)
将資料集打亂,并建構batch_size
dataset = dataset.repeat().shuffle(9000).batch(batch_size).prefetch(batch_size)
iterator = dataset .make_one_shot_iterator()
get_next()方法使資料集不斷的向神經網絡中送
iamge,label= iterator.get_next()
           

這樣就不用使用tf.placeholder()占位符了,直接将image送到神經網絡中就能實作訓練優化。

繼續閱讀