Tensorflow - 洗牌和拆分图像和标签数据集

Tensorflow - shuffle & split dataset of images and labels

Tensorflow 的新功能,我正在使用神经网络对图像进行分类。我有一个包含图像的 Tensor,形状为 [N, 128, 128, 1](N 个图像 128x128,具有 1 个通道),以及一个形状为 [N]Tensor,其中包含标签图片。

我想将其全部洗牌并在训练张量和测试张量之间分配(比如说 80%-20%)。我没有找到 'zip' 我的张量将每个图像与其标签相关联的方法(以便以相同的方式随机播放图像和标签)。可能吗 ?如果没有,我怎样才能完成 shuffling/splitting 工作?

感谢您的帮助!

只是使用相同的'seed'关键字参数值,在函数中说seed=8 tf.random_shuffle 用于标签和数据。

ipdb> my_data = tf.convert_to_tensor([[1,1], [2,2], [3,3], [4,4], 
[5,5], [6,6], [7,7], [8,8]])
ipdb> my_labels = tf.convert_to_tensor([1,2,3,4,5,6,7,8])
ipdb> sess.run(tf.random_shuffle(my_data, seed=8))
array([[5, 5],
   [3, 3],
   [1, 1],
   [7, 7],
   [2, 2],
   [8, 8],
   [4, 4],
   [6, 6]], dtype=int32)
ipdb> sess.run(tf.random_shuffle(my_labels, seed=8))
array([5, 3, 1, 7, 2, 8, 4, 6], dtype=int32)

编辑: 如果你需要在运行时进行随机洗牌,比如说,批次将随机但不同地洗牌,你可以使用这样的技巧:

# each time shuffling pattern will be differend

# for now, it works
indicies = tf.random_shuffle(tf.range(8))
params = tf.convert_to_tensor([111, 222, 333, 444, 555, 666, 777, 888])
sess.run(tf.add(tf.gather(params, indicies), tf.gather(params, indicies) * 1000))
> array([555555, 444444, 666666, 222222, 111111, 888888, 333333, 777777], dtype=int32)

由相同数字组成的数字表明,聚集<-indicies采用相同的种子值