给出一个numpy数组,其中包含从模拟持续进行的数据。基于此,我正在使用tensorflow和keras来训练神经网络,而我的问题是在我的模型中引用了以下代码行:
model.fit(X1, Y1, epochs=1000, batch_size=100, verbose=1, shuffle=True, validation_split=0.2)
阅读Keras的文档后,我发现验证数据集(在这种情况下为原始数据的20%)是从末尾切片的。我正在为持续的时间生成数据时,我显然不希望分割最后一部分,因为它不能代表验证。我希望从整个数据集中随机选择验证数据。为此,我现在要训练整个数据集(一致地用于ANN的输入和输出),然后再训练以获取随机验证数据。
我觉得我不想破坏数据中的时间部分,这就是为什么我要寻找一种解决方案,以随机选择验证集而不必重新整理整个数据集。另外,我想知道你们对不改组连续数据的看法。同样,我不是在问验证拆分的性质,我只是想知道如何修改选择验证数据的方式。
答案 0 :(得分:1)
正如您所提到的,Keras只是获取数据集的最后x个样本,因此,如果您要继续使用它,则需要提前对数据集进行洗牌。
或者,您可以简单地使用 sklearn train_test_split()方法:
x_train, x_valid, y_train, y_valid = sklearn.model_selection.train_test_split(x, y, test_size=0.2)
此方法具有一个名为“ shuffle”的参数,该参数确定是否在拆分之前对数据进行混洗(默认情况下将其设置为True)。
但是,通过使用“ stratify”参数可以更好地拆分数据,这将在验证和训练集之间提供相似的标签分布:
x_train, x_test, y_train, y_test = train_test_split(x, y,
test_size=0.2,
random_state=0,
stratify=y)