gpt4 book ai didi

python - 从 Tensorflow 中的张量中提取随机切片

转载 作者:行者123 更新时间:2023-12-03 17:37:27 24 4
gpt4 key购买 nike

我在 tensorflow 队列阅读器中生成了一个形状为 (1, 512, 512, 32) 的输入张量

batch_input, batch_output = tf.train.shuffle_batch([image, label], batch_size=BATCH_SIZE, capacity=3 * BATCH_SIZE + min_queue_examples,
enqueue_many=True, min_after_dequeue=min_queue_examples, num_threads=16)
#BATCH_SIZE = 1

我想在这个输出张量的第 4 维上选择一个随机切片,这样每次调用新批次时,也会采用一个新的随机切片。我已经尝试了以下 numpy
rand_slice_ind = np.random.randint(0, 32)
slice_begin = tf.constant([0, 0, 0, rand_slice_ind])
slice_input = tf.slice(batch_input, begin = slice_begin, size = [BATCH_SIZE, height, width, 1])

但是,这将为 rand_slice_ind 返回相同的值每一次。我认为这与使用在图形外部生成的非 tensorflow 对象有关。

我也尝试过 tf.random_uniform沿着以下路线:
rand_slice_ind = tf.random_uniform([], minval=0, maxval=depth, dtype=tf.int32)    
slice_begin = tf.Variable([tf.constant(0, dtype=tf.int32), tf.constant(0, dtype=tf.int32), tf.constant(0, dtype=tf.int32), rand_slice_ind])

但这会导致梯度计算出现问题。有小费吗?

最佳答案

您可以尝试使用 gather 来实现这一点。 :

slice_length = 128
data_length = data.shape[your_axis]
max_offset = data_length - slice_length
random_offset = tf.random.uniform((), minval=0, maxval=max_offset, dtype=tf.dtypes.int64)
slice_indices = tf.range(0, slice_length, dtype=tf.dtypes.int64)
random_slice = tf.gather(data, slice_indices + random_offset, axis=your_axis)

关于python - 从 Tensorflow 中的张量中提取随机切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45867843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com