TF Dataset API:以下顺序正确吗?映射,缓存,随机播放,批处理,重复,预取

时间:2018-07-23 19:17:31

标签: tensorflow tensorflow-datasets

我正在使用此顺序从磁盘读取图像文件,并将其输入到TF Keras模型中。

  #Make dataset for training
    dataset_train = tf.data.Dataset.from_tensor_slices((file_ids_training,file_names_training))
    dataset_train = dataset_train.flat_map(lambda file_id,file_name: tf.data.Dataset.from_tensor_slices(
        tuple (tf.py_func(_get_data_for_dataset, [file_id,file_name], [tf.float32,tf.float32]))))
    dataset_train = dataset_train.cache()

    dataset_train= dataset_train.shuffle(buffer_size=train_buffer_size)
    dataset_train= dataset_train.batch(train_batch_size) #Make dataset, shuffle, and create batches
    dataset_train= dataset_train.repeat()
    dataset_train = dataset_train.prefetch(1)
    dataset_train_iterator = dataset_train.make_one_shot_iterator()
    get_train_batch = dataset_train_iterator.get_next()

我对这是否是最佳序列有疑问。 例如应该在shuffle()之后并在batch()之前重复吗?是否应该将cache()在批次之后?

1 个答案:

答案 0 :(得分:3)

这里的答案Output differences when changing order of batch(), shuffle() and repeat()建议在批处理之前重复或随机播放。我经常使用的顺序是(1)随机播放,(2)重复,(3)映射,(4)批处理,但是它可以根据您的喜好而有所不同。我在重复之前使用shuffle,以避免模糊时代边界。我在批处理之前使用map,因为我的映射函数适用于单个示例(不适用于一批示例),但是您当然可以编写矢量化的map函数,并希望将批处理视为输入。