有没有一种方法可以在一批内修改我的图像的合成?目前,当我创建一个大小为4的批次时,我的批次将如下所示:
批处理1:[Img0 Img1 Img2 Img3]
批处理2:[Img4 Img5 Img6 Img7]
我需要修改我的批处理的组成,这样它只会移动一次到下一个图像。那么它应该是这样的:
批处理1:[Img0 Img1 Img2 Img3]
第二批:[Img1 Img2 Img3 Img4]
批处理3:[Img2 Img3 Img4 Img5]
批处理4:[Img3 Img4 Img5 Img6]
批处理5:[Img4 Img5 Img6 Img7]
我在代码中使用了Tensorflow的dataset API,如下所示:
def tfrecords_train_input(input_dir, examples, epochs, nsensors, past, future,
features, batch_size, threads, shuffle, record_type):
filenames = sorted(
[os.path.join(input_dir, f) for f in os.listdir(input_dir)])
num_records = 0
for fn in filenames:
for _ in tf.python_io.tf_record_iterator(fn):
num_records += 1
print("Number of files to use:", len(filenames), "/ Total records to use:", num_records)
dataset = tf.data.TFRecordDataset(filenames)
# Parse records
read_proto = partial(record_type().read_proto, nsensors=nsensors, past=past,
future=future, features=features)
# Parallelize Data Transformation on available GPU
dataset = dataset.map(map_func=read_proto, num_parallel_calls=threads)
# Cache data
dataset = dataset.cache()
# repeat after shuffling
dataset = dataset.repeat(epochs)
# Batch data
dataset = dataset.batch(batch_size)
# Efficient Pipelining
dataset = dataset.prefetch(2)
iterator = dataset.make_one_shot_iterator()
return iterator
可以使用
sliding window
批处理操作来实现tf.data.Dataset
:示例:
输出:
^{pr2}$回复原帖子和回复@卷心菜汤对维杰回应的评论:
为了实现一个有效的滑动窗口,可以使用以下代码。在
data = data.window(size=batch_size, stride=1, shift=1, drop_remainder=True ) data = data.interleave( lambda *window: tf.data.Dataset.zip(tuple([w.batch(batch_size) for w in window])), cycle_length=10, block_length=10 ,num_parallel_calls=4 )
使用交错代替平面映射,因为它允许在这个窗口转换期间并行进行处理。在
请参阅文档以选择适用于您的硬件和数据的cycle_length、block_length和num_parallel_调用的值。在
相关问题 更多 >
编程相关推荐