2016-09-01 18 views
0

私は、TFRecordsデータセットから1つのイメージとラベルを読み取り、デコードする関数 'read_and_decode_Train'を持っています。次に、tf.train.batch()関数を使ってBATCH_SIZEのイメージとラベルをimages_batchとlabels_batchにシリアル化します。私は行が対応しているCSVファイルを持っている場合いくつかの条件に従ってtf.train.batch()を使用してデータのバッチを取得する方法は?

image, label = read_and_decode_Train(tfRecordsName) 
images_batch, labels_batch = tf.train.batch([image, label], batch_size=BATCH_SIZE, num_threads=8, capacity=2000) 

さて、私は、例えば、いくつかの条件に従ってトレーニング、検証とテストデータセットの3つのサブセットにTFRecordsデータセットを分割したい:蛇腹のようにコードがありますTFRecordsデータセットの画像とラベルにコピーし、次にcsvファイルに従ってデータセットを分割します。しかし、tf.train.batch()関数は、以前のように、結果としてデータを読み込むように思わ

COUNT_TRAIN = -1  
def read_and_decode_Train(filename, csvLines, valNo, testNo): 
    '''read and decode one single image and label 
     from the TFRecords dataset. 
    ''' 
    global COUNT_TRAIN 
    filename_queue = tf.train.string_input_producer([filename], num_epochs=None) 
    reader = tf.TFRecordReader() 
    _, serialized_example = reader.read(filename_queue) 
    while True: 
     features = tf.parse_single_example(
      serialized_example, 
      features={ 
       'label': tf.FixedLenFeature([], tf.int64), 
       'img_raw': tf.FixedLenFeature([], tf.string) 
      }) 
     image = tf.decode_raw(features['img_raw'], tf.float32) 
     image = tf.reshape(image, [64, 64, 1]) 
     label = features['label'] 
     COUNT_TRAIN += 1 
     if csvLines[COUNT_TRAIN][1] != valNo and csvLines[COUNT_TRAIN][1] != testNo: 
      break 
    return image, label 

image, label = read_and_decode_Train(tfRecordsName, csvLines, valNo, testNo) 
images_batch, labels_batch = tf.train.batch([image, label], batch_size=BATCH_SIZE, num_threads=8, capacity=2000) 

:私は次の通りです条件を追加するために私のプログラムを変更します。 私の状況では、結果的にデータを読み込むのではなく、いくつかの条件に従ってTFRecordsからデータをフェッチする方法はありますか? ご指摘いただきありがとうございます。

答えて

0

代わりに、データを別々の3つのTFRecordsファイルに分割する方が簡単かもしれません。トレーニング用、検証用、テスト用です。

+0

ありがとうございます。しかし、クロスバリデーション、たとえば10倍のクロスバリデーションを行いたい場合は、データを30の別々のファイルに分割する必要があります。だから私はこれが適切な方法だとは思わない。 – Kongsea

+0

ほとんどのSGDアルゴリズムは、トレーニングデータセット全体よりもはるかに小さいバッチサイズで最も効果的です。私はこのデータを折り目に分割することは、柔軟性を最大限にするためにTensorFlowグラフの外側で行うべきだと考えています(つまり、私はtfがあなたを助けるために何をすることができないのか分かりません)。 –

関連する問題