首页 > 解决方案 > 如何明确哪些模型层用于机器学习?

问题描述

我们目前正在使用 Deeplearning4j 进行机器学习的小实验。

我们有来自不同设备的时间序列电压测量,我知道这些设备相互依赖。我们设法用 1 和 0 标记大量这些数据。

我们的问题是弄清楚模型层的使用。

对我们来说,在人们之间使用它似乎是经验,而例子似乎是随机的。

我们目前使用 LSTM 和 RNN

但是我们如何才能澄清是否有更好的模型呢?

我们想看看模型是否可以通过我们没有注意到的预测来找出一些依赖关系。

标签: machine-learningdeep-learningdeeplearning4j

解决方案


解决此问题的最佳方法是首先查看您的数据以及您想从中获得什么。然后,您应该从设置基线开始。使用您熟悉的最简单的建模技术,这样您就可以拥有任何东西。

在您的情况下,您似乎每个时间步都有一个标签。因此,您可能只对每个时间步单独使用简单的线性回归,以了解如果您根本不包含任何序列信息会得到什么。任何快速工作的东西都是这一步的好选择。

一旦你有了这个基线,你就可以开始考虑构建一个优于这个基线的深度学习模型。

对于时间序列数据,目前在 DL4J 中有两种选择,要么使用 LSTM 之类的循环层,要么随时间使用卷积。

如果您想在每个时间步都有一个输出,那么循环层可能更适合您。如果您想在读取整个序列后只得到一个结果,那么卷积方法通常效果最好。

为了选择这些层应该有多宽,以及应该使用多少层,您必须进行一些试验。

您想要实现的第一件事是构建一个可以过度拟合数据子集的模型。所以你开始,一遍又一遍地只传递一批例子。如果模型不能对此进行过度拟合,则可以使层更宽。如果图层开始变得太宽,则在顶部添加另一个图层。

如果您使用 deeplearning4j-ui 模块,它会告诉您模型当前有多少参数。它们通常应该少于您拥有的示例总数,否则您可能会过度拟合整个数据集。

一旦您可以训练模型以过度拟合数据的一小部分,您就可以开始使用所有数据对其进行训练。

那时你可以开始寻找更好的超参数,看看你能在多大程度上超越你的基线。


推荐阅读