减少深度学习模型的输入维度

我在学习一门关于深度学习的课程,并使用Keras构建了一个模型。在数据预处理和对分类数据进行编码后,我得到了形状为(12500,)的数组作为模型的输入。这种输入使得模型训练过程变得缓慢且卡顿。有没有办法来减少输入的维度?

输入包括分类的地理坐标、天气信息、时间、距离,我试图预测两个地理坐标之间的旅行时间。

原始数据集有8个特征,其中5个是分类特征。我使用了一热编码来处理上述分类数据。地理坐标有6000个类别,天气有15个类别,时间有96个类别。编码后,所有数据一起形成了形状为(12500,)的数组作为模型的输入。


回答:

当类别数量很大时,一热编码变得非常低效。一个极端的例子是处理自然语言中的句子:在这种任务中,词汇表通常有10万甚至更多的词。显然,将一个10词的句子转换成[10, 100000]的矩阵,其中几乎都是零,这将浪费内存。

研究人员通常使用的是嵌入层,它学习一个分类特征的密集表示。在词语的情况下,这被称为词嵌入,例如word2vec。这种表示要小得多,大约是100维,使得网络的其余部分能够高效地处理100维的输入向量,而不是100000维的向量。

在Keras中,这是通过Embedding层实现的,我认为这对你的geotime特征会非常有效,而其他特征可能仍然可以使用一热编码。这意味着你的模型不再是Sequential,而是有多个输入,其中一些通过嵌入层。主模型将使用学习到的表示的拼接进行回归推断。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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