tensorflow 为CNN拆分数据集

pdkcd3nj  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(90)

假设,我有一个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拆分为trainData3dvalidData3dtestData3d
  • (2)将上述三个中的每一个拆分为featureData3dlabelData3d

现在,我的问题是,我应该先做上面的哪一个步骤,然后再做哪一个步骤,以使成本最低?
请解释一下原因。
如果我先执行#2,图征和标示数据如何保持其对应性?
交叉过账:SoftwareEngineering

zyfwsgd6

zyfwsgd61#

我会做#1 -> #2。好处是,即使你想 Shuffle 你的trainData3d,它将确保正确的数据和标签仍然属于一起。否则,你需要确保datalabel以相同的顺序 Shuffle 。我认为在TF中这不是微不足道的,因为你需要打乱一批索引,然后使用tf.gather,这有点慢。
至于效率,我认为顺序并不重要。无论哪种方式,你都需要6次操作,这都是切片操作。使用 Shuffle ,我认为#1 -> #2还是更好,因为你只需要 Shuffle 一次,但这也应该没有多大关系。
如果data3dTensorFlow Dataset,则可以使用shuffletakeskiphere一样对数据进行切片。
或者你可以做#2,然后使用train-test-split from sklearn将数据分成训练集和测试集。这会将数据转换回numpy数组。

相关问题