我刚开始使用Tensorflow,通过神经网络来分类图像。我有一个形状为[N, 128, 128, 1]
的Tensor
,包含N张128×128的单通道图像,还有一个形状为[N]
的Tensor
,包含这些图像的标签。
我想把它们全部打乱,并按80%-20%的比例分割成训练和测试数据集。我没有找到一种方法来“打包”我的张量,以便将每张图像与其标签关联起来(以便以相同的方式打乱图像和标签)。这是可能的吗?如果不可能,我该如何实现这种打乱和分割的工作?
感谢任何帮助!
回答:
只需在函数tf.random_shuffle中对标签和数据使用相同的’seed’关键字参数值,例如seed=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)
编辑:如果你需要在运行时进行随机打乱,例如批次将被随机但不同地打乱,你可以使用这样的技巧:
# 每次打乱模式都会不同# 目前,它有效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使用了相同的种子值