Tensorflow 根据某些条件,如何使用tf.train.batch()获取一批数据?

Tensorflow 根据某些条件,如何使用tf.train.batch()获取一批数据?,tensorflow,Tensorflow,我有一个函数“read_and_decode_Train”,它从TFRecords数据集中读取并解码一个图像和标签。然后我使用tf.train.batch()函数将批大小的图像和标签序列化为图像批和标签批。代码如下: image, label = read_and_decode_Train(tfRecordsName) images_batch, labels_batch = tf.train.batch([image, label], batch_size=BATCH_SIZE, num_th

我有一个函数“read_and_decode_Train”,它从TFRecords数据集中读取并解码一个图像和标签。然后我使用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)
现在,我想根据一些条件将TFRecords数据集划分为训练、验证和测试数据集的三个子集,例如,如果我有一个csv文件,其中的行对应于TFRecords数据集的图像和标签,那么我将根据csv文件划分数据集。我修改我的程序以添加一个条件,如下所示:

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)
但是,tf.train.batch()函数似乎像以前一样读取数据。 因此,在我的情况下,如何根据某些条件从TFRecords中提取数据,而不是读取数据?
感谢您的建议和建议。

您可以更轻松地将数据拆分为3个独立的
TFRecords
文件;一个用于培训,一个用于验证,一个用于测试。

您可以更轻松地将数据拆分为3个独立的
TFRecords
文件;一个用于培训,一个用于验证,一个用于测试。

谢谢。但是,如果我想进行交叉验证,比如说,10倍交叉验证,我必须将数据拆分为30个单独的文件。所以我认为这不是一个合适的方法。大多数SGD算法在批量比整个训练数据集小得多的情况下工作得最好。我认为将数据划分为折叠应该在TensorFlow图之外进行,以获得最大的灵活性(也就是说,我不知道tf在这里可以做些什么来帮助您)。谢谢。但是,如果我想进行交叉验证,比如说,10倍交叉验证,我必须将数据拆分为30个单独的文件。所以我认为这不是一个合适的方法。大多数SGD算法在批量比整个训练数据集小得多的情况下工作得最好。我认为应该在TensorFlow图之外将数据划分为折叠,以获得最大的灵活性(即,我看不出tf在这里可以做些什么来帮助您)。