Tensorflow - shuffle&拆分图像和标签的数据集

时间:2017-06-12 13:40:13

标签: image machine-learning tensorflow neural-network tensor

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

我想把它全部洗干并在训练和测试张量之间分开(让我们说80%-20%)。我没有找到一种方法来“压缩”我的张量以将每个图像与其标签相关联(为了以相同的方式对图像和标签进行混洗)。可能吗 ?如果没有,我怎样才能实现改组/拆分工作?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

只需使用相同的种子'关键字参数值,比如说函数中的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采用相同的种子值