我正在学习深度学习课程,我有一个用keras建立的模型。在对分类数据进行数据预处理和编码之后,我得到一个形状(12500,)
的数组作为模型的输入。此输入使模型训练过程变得更慢且滞后。有没有一种方法可以最小化输入的维数?
输入是地理坐标,天气信息,时间,距离的分类,我试图预测两个地理坐标之间的旅行时间。
原始数据集有8个功能,其中5个是绝对的。我使用onehot编码来编码上面的分类数据。地理坐标有6000个类别,天气15个类别时间有96个类别。同样,在使用onehot编码进行编码后,我得到了一个形状(12500,)
的数组作为模型的输入。
答案 0 :(得分:3)
当类别数量很大时,单热编码变得效率太低。这种情况的一个极端例子是用自然语言处理句子:在这个任务中,词汇通常有100k甚至更多的单词。显然,将10个单词的句子翻译成set concealcursor=n
set conceallevel=3
hi AsteriskBold ctermfg=Green cterm=bold
syn match Asterisks contained "**" conceal
syn match AsteriskBold "\*\*[^*]\+\*\*" contains=Asterisks
矩阵,几乎全部都是零,将浪费内存。
研究使用的是嵌入层,它可以学习分类特征的密集表示。在单词的情况下,它被称为单词嵌入,例如word2vec。这种表示要小得多,类似于100维,并使网络的其余部分能够有效地使用100-d输入向量,而不是100000-d向量。
在keras中,它是由Embedding
图层实现的,我认为它可以完美地适用于您的[10, 100000]
和geo
功能,而其他图层则可能正常工作 - 编码。这意味着您的模型不再是time
,而是有几个输入,其中一些输入穿过嵌入层。主模型将采用学习表示的连接并进行回归推理。
答案 1 :(得分:1)