【发布时间】:2017-06-28 02:37:40
【问题描述】:
现在我使用以下函数进行洗牌
from tensorflow.contrib import data
def input_pipeline(filenames, batch_size):
# Define a `tf.contrib.data.Dataset` for iterating over one epoch of the data.
dataset = data.TextLineDataset(filenames)
dataset = dataset.map(decode_func)
dataset = dataset.shuffle(buffer_size=10000) # Equivalent to min_after_dequeue=10000.
dataset = dataset.batch(batch_size)
# Return an *initializable* iterator over the dataset, which will allow us to
# re-initialize it at the beginning of each epoch.
return dataset.make_initializable_iterator()
但它只会以buffer_size 的数量对数据进行洗牌,并将按订单填充buffer。
我的数据很大,我无法将buffer_size 设置得太大。有没有其他解决方案我可以洗牌整个数据集?
【问题讨论】:
-
也许在您的代码的未来部分您将转换为
Tensor?如果答案是肯定的,您可以使用tf.random_shuffle。 -
转移到
Tensor的部分只是batch_part而不是所有数据... -
是否会在数据队列之前创建一个像 `tf.train.string_input_producer' 这样的随机文件名队列来解决您的问题?
-
Thks,但这会导致其他问题,请参阅stackoverflow.com/questions/44549245/…
-
你介意洗牌是模型训练之前的预处理步骤吗?如果没有,请查看
shufunix 命令。
标签: tensorflow shuffle