如何明确机器学习中应使用的模型层?

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

我们有来自不同设备的时序电压测量数据,这些数据我知道是相互依赖的。我们成功地对大量这些数据进行了标记,使用了1和0。

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

在我们看来,似乎是经验在人们中流传,例子看起来像是随机的。

我们目前使用的是LSTM和RNN

但是,我们如何确定是否有更好的模型呢?

我们希望看到模型是否能通过预测发现我们没有注意到的某些依赖关系。


回答:

解决这个问题的最佳方法是从查看你的数据和你想要从中获得什么开始。然后,你应该先建立一个基线。使用你熟悉的最简单的建模技术,这样你至少有了一个起点。

在你的情况下,看起来每个时间步都有标签。所以,你可以对每个时间步分别使用简单的线性回归,以了解如果你完全不使用任何序列信息会得到什么结果。任何快速工作的方法都是这一步骤的良好候选。

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

对于时序数据,目前在DL4J中有两个选择,要么使用像LSTM这样的循环层,要么使用时间上的卷积。

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

关于选择这些层的宽度以及你应该使用多少层,你需要进行一些实验。

你首先要实现的目标是构建一个能在你数据的一个子集上过拟合的模型。所以,你从开始时,只反复输入一批例子。如果模型不能在这个上过拟合,你就使层更宽。如果层开始变得太宽,你就在上面添加另一层。

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

一旦你能训练一个模型在你数据的一个小子集上过拟合,你就可以开始使用你所有的数据进行训练。

在那个时候,你就可以开始寻找更好的超参数,并看看你能超越基线多少。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注