【问题标题】:Training a Neural Network with Multiple Datasets (Keras)使用多个数据集训练神经网络 (Keras)
【发布时间】:2020-11-02 03:43:01
【问题描述】:

我正在使用的数据集对应于各个时间序列信号。每个信号都是唯一的,具有不同的数据点总数,但每个信号代表相同的语义数据(速度以 mph 为单位)。

我正在与 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)

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

【问题讨论】:

    标签: python keras deep-learning neural-network training-data


    【解决方案1】:

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

    但是,第一个更好,因为将所有数据分配到一个矩阵中可能会有问题。所以继续你当前的实现。

    【讨论】:

    • 每个数据集的准确性会有所不同吗?例如,第一个模型经过 10 个 epoch 后,它可能会达到 ~94% 的准确度。然后对于第二个数据集,准确度从 ~65 开始。这正常吗?
    • 在 94% 之后获得 65% 就可以了。这是因为,您的第一个数据集可能没有覆盖数据的整个向量空间。因此,添加了第二个数据集,扩展了向量空间。然而,由于模型是在第一组上训练的,它可以访问有限的特征空间,它的表现会很差。一旦在这两个集合上进行了训练,就会获得所需的模型,该模型将更加稳健和准确。
    • 为了测试,您可以从每个数据集中获取一些点,然后在第一个数据集上进行训练。稍后,测试所有数据点。您会注意到第一组的数据点表现良好,而其他的则不然。
    • 太棒了。有没有办法评估模型的整体准确性?我知道 model.evaluate 只需要一个数据集,但我是否需要对我正在训练的每个数据集的 model.evaluates 进行平均?
    • 您可以执行 Holdout 交叉验证。对于每个数据集,保留一个单独的测试集。然后,在数据集上循环训练您的模型。最后,评估所有测试点。然后,您可以取所需性能指标的平均值。
    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2014-06-23
    • 2017-12-05
    • 2018-08-04
    • 2017-11-27
    • 2011-04-07
    相关资源
    最近更新 更多