Deeplearning4j有支持将数据集拆分为测试和训练的功能,以及用于洗牌数据集的机制,但据我所知,它们要么不起作用,要么我做错了什么。
示例:
DataSetIterator iter = new IrisDataSetIterator(150, 150);
DataSet next = iter.next();
// next.shuffle();
SplitTestAndTrain testAndTrain = next.splitTestAndTrain(120, new Random(seed));
DataSet train = testAndTrain.getTrain();
DataSet test = testAndTrain.getTest();
for (int i = 0; i < 30; i++) {
String features = test.getFeatures().getRow(i).toString();
String actual = test.getLabels().getRow(i).toString().trim();
log.info("features " + features + " -> " + actual );
}
在输入数据集的最后30行中返回的结果显示,splitTestAndTrain的随机种子参数Random(seed)似乎完全被忽略了。
如果不是将随机种子传递给splitTestAndTrain函数而是取消注释下面的shuffle()行,则第三个和第四个特征会混排,同时保持第一个和第二个特征以及测试标签的现有顺序,这比根本不排序还要糟糕。
所以问题是,我使用方法错误还是Deeplearning4j本身就存在问题?
附加问题:如果Deeplearning4j甚至不能处理生成测试和样本数据集这样简单的任务,那么它能够被信任处理其他任务吗?或者我最好使用其他库来代替Deeplearning4j?