使用多个数据集训练神经网络(Keras)

4

我正在处理的数据集对应于单个时间序列信号。每个信号都是独特的,数据点总数不同,尽管每个信号代表相同的语义数据(速度以英里/小时为单位)。

我正在使用Keras,并尝试适配基本神经网络到数据上,只是为了评估它。以下是Python代码:

model = Sequential()
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

基本上,我将模型适配到每个数据集,方法如下:

for file in directory:
    data = pd.read_csv(file)
    # get x_train and y_train ...
    model.fit(X_train, y_train, epochs=10)

这是在同义数据的多个数据集上训练模型的有效方法吗?

1个回答

1

是的,你可以创建一个模型然后在循环中调用数据进行训练,或者你可以使用循环将数据堆叠在单个矩阵中,然后调用拟合函数。在第一种方法中,您将调用fit()n次,但是在较小的数据块中,而在后一种方法中,您将仅调用fit()一次,但使用大型数据矩阵。

然而,第一种方法更好,因为将所有数据分配到一个矩阵中可能会有问题。因此,请继续使用您当前的实现。


1
每个数据集的准确性会有所不同吗?例如,对于第一个模型,在经过10个时期后,它可能达到约94%的准确性。然后对于第二个数据集,准确性从约65%开始。这正常吗? - user11715799
1
94%之后得到65%是可以的。这是因为你的第一个数据集可能没有覆盖整个数据向量空间。因此,添加第二个数据集来扩展向量空间。然而,由于模型是在第一个数据集上训练的,该数据集只能访问有限的特征空间,所以它的性能会很差。一旦它在两个数据集上进行了训练,就可以得到所需的更加强大和准确的模型。 - Lawhatre
为了测试,你可以从每个数据集中取一些点,然后只在第一个数据集上进行训练。稍后,测试所有数据点。你会注意到来自第一组的数据点表现良好,而其他数据点则没有。 - Lawhatre
然后继续训练第二个数据集。之后,模型在第一和第二个数据集上的表现会更好,但在第三个数据集上表现不佳。因此,请继续训练直到所有数据集都用完为止。完成后,测试每个数据集中的数据点,您会发现模型在所有数据点上的表现都很好。 - Lawhatre
1
太好了。有没有一种方法来评估模型的整体准确性?我知道model.evaluate只需要一个数据集,但是我是否需要对我正在训练的每个数据集的model.evaluate进行平均处理? - user11715799
1
你可以执行留存交叉验证。对于每个数据集,保留单独的测试集。然后,在数据集上进行循环训练模型。最后,评估所有测试点。然后,您可以计算性能指标的平均值。 - Lawhatre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接