2

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

我想把它全部洗牌,然后在训练和测试张量之间分开(比如说 80%-20%)。我没有找到一种方法来“压缩”我的张量以将每个图像与其标签相关联(以便以相同的方式打乱图像和标签)。可能吗 ?如果没有,我怎样才能完成洗牌/拆分工作?

谢谢你的帮助 !

4

1 回答 1

1

只需使用相同的“种子”关键字参数值,例如在函数 tf.random_shuffle中为标签和数据设置种子 = 8。

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)

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

于 2017-08-10T15:54:55.517 回答