假设,我有一个TensortfDataSet
如下:
data3d = [
[[7.042 9.118 0. 1. 1. 1. 1. 1. 0. 0. 1. ]
[5.781 5.488 7.47 0. 0. 0. 0. 1. 1. 0. 0. ]
[5.399 5.166 6.452 0. 0. 0. 0. 0. 1. 0. 0. ]
[5.373 4.852 6.069 0. 0. 0. 0. 1. 1. 0. 0. ]
[5.423 5.164 6.197 0. 0. 0. 0. 2. 1. 0. 0. ]]
,
[[ 5.247 4.943 6.434 0. 0. 0. 0. 1. 1. 0. 0. ]
[ 5.485 8.103 8.264 0. 0. 0. 0. 1. 0. 0. 1. ]
[ 6.675 9.152 9.047 0. 0. 0. 0. 1. 0. 0. 1. ]
[ 6.372 8.536 11.954 0. 0. 0. 0. 0. 0. 0. 1. ]
[ 5.669 5.433 6.703 0. 0. 0. 0. 0. 1. 0. 0. ]]
,
[[5.304 4.924 6.407 0. 0. 0. 0. 0. 1. 0. 0. ]
[5.461 5.007 6.088 0. 0. 0. 0. 1. 1. 0. 0. ]
[5.265 5.057 6.41 0. 0. 0. 0. 3. 0. 0. 1. ]
[5.379 5.026 6.206 0. 0. 0. 0. 1. 1. 0. 0. ]
[5.525 5.154 6. 0. 0. 0. 0. 1. 1. 0. 0. ]]
,
[[5.403 5.173 6.102 0. 0. 0. 0. 1. 1. 0. 0. ]
[5.588 5.279 6.195 0. 0. 0. 0. 1. 1. 0. 0. ]
[5.381 5.238 6.675 0. 0. 0. 0. 1. 0. 0. 1. ]
[5.298 5.287 6.668 0. 0. 0. 0. 1. 1. 0. 0. ]
[5.704 7.411 4.926 0. 0. 0. 0. 1. 1. 0. 0. ]]
,
... ... ... ...
... ... ... ...
]
tfDataSet = tf.convert_to_tensor(data3d)
字符串
在Tensor内的每个2D阵列中,前八列是特征,其余三列是一个热编码标签。
假设,我想把这个Tensor输入CNN,为此,我需要做两件事:
- (1)将
data3d
拆分为trainData3d
、validData3d
和testData3d
- (2)将上述三个中的每一个拆分为
featureData3d
和labelData3d
。
现在,我的问题是,我应该先做上面的哪一个步骤,然后再做哪一个步骤,以使成本最低?
请解释一下原因。
如果我先执行#2,图征和标示数据如何保持其对应性?
交叉过账:SoftwareEngineering
1条答案
按热度按时间zyfwsgd61#
我会做#1 -> #2。好处是,即使你想 Shuffle 你的
trainData3d
,它将确保正确的数据和标签仍然属于一起。否则,你需要确保data
和label
以相同的顺序 Shuffle 。我认为在TF中这不是微不足道的,因为你需要打乱一批索引,然后使用tf.gather
,这有点慢。至于效率,我认为顺序并不重要。无论哪种方式,你都需要6次操作,这都是切片操作。使用 Shuffle ,我认为#1 -> #2还是更好,因为你只需要 Shuffle 一次,但这也应该没有多大关系。
如果
data3d
是TensorFlow Dataset,则可以使用shuffle
、take
和skip
像here一样对数据进行切片。或者你可以做#2,然后使用train-test-split from sklearn将数据分成训练集和测试集。这会将数据转换回numpy数组。