私は、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からデータをフェッチする方法はありますか? ご指摘いただきありがとうございます。
ありがとうございます。しかし、クロスバリデーション、たとえば10倍のクロスバリデーションを行いたい場合は、データを30の別々のファイルに分割する必要があります。だから私はこれが適切な方法だとは思わない。 – Kongsea
ほとんどのSGDアルゴリズムは、トレーニングデータセット全体よりもはるかに小さいバッチサイズで最も効果的です。私はこのデータを折り目に分割することは、柔軟性を最大限にするためにTensorFlowグラフの外側で行うべきだと考えています(つまり、私はtfがあなたを助けるために何をすることができないのか分かりません)。 –