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

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

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

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


回答:

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

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

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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