【问题标题】:Keras: Categorical vs Continuous input to a LSTMKeras:分类与连续输入到 LSTM
【发布时间】:2018-11-13 07:36:21
【问题描述】:

我是 Keras 和深度学习的新手,在阅读了有关 stackoverflow 的几个教程和答案后,我仍然不清楚输入进入网络后如何操作。

我正在使用 keras 的功能 API 来开发复杂的模型,所以我的第一层始终是输入层。 比如:

输入()

LSTM()

密集()

现在假设我有 2 个训练数据集 A 和 B。每个数据集都是相同的 10,000 x 6,000 矩阵,其中包含 200 个不同的值。即 10,000 行,每行代表训练示例和 6,000 个时间步序列。两者的值为 [[3,50,1,22,7,5,3,1,5,..], [55,32,54,21,15, ...], .... ] A 和 B 的唯一区别是 A 中的值是实数(连续变量),而 B 中的值是离散的(分类变量)。

我有以下 3 个可能的选项,我可以使用它们来区分分类输入和连续输入,并想知道其中哪些会起作用,哪些比其他更好。

1- 给定 A 是实值,B 是分类,将 A 转换为 .astype(float) 并将 B 转换为 .astype(float) 并馈送到网络,网络将相应地假设。

2- 给定 B 具有分类值,将 B 转换为一个热向量设置,即将 10,000 x 6,000 更改为 10,000 x 6,000 x 200。保持 A 不变。

3- 如果我们使用 B,则在输入后添加一个嵌入层,并使网络如下所示:

输入()

嵌入()

LSTM()

密集()

如果我们使用 A 则不要添加嵌入层。

【问题讨论】:

    标签: python keras deep-learning lstm keras-layer


    【解决方案1】:

    分类输入似乎让您感到困惑。嵌入或不嵌入:

    1. 我们在两种情况下使用嵌入层嵌入分类输入:降低空间维度并捕获输入之间的任何相似性。因此,当您在一种语言中有数十亿个单词时,将其嵌入 300 维向量以使其易于管理是有意义的。但是 one-hot 总是能提供最大的区别,所以在你的情况下,200 并不是一个很大的数字,而 one-hot 是要走的路。
    2. 对于连续输入,我们标准化通常使用简单的最大-最小值标准化,因此最大值变为 1,最小值变为 0。但根据数据集的性质,有很多方法可以做到这一点.
    3. 对于实际模型,您可以使用 2 个输入来处理连续的和分类的不同并且可能在上游共享层,否则创建 2 个不同的模型可能有意义。

    您可以找到更多关于输入编码的信息online

    【讨论】:

    • 谢谢。是的,这是有道理的。将分类输入转换为一个热点是否也适用于 keras 库?我要问的原因是,在这个 IMDB 数据集示例中,输入显然是分类的,但它没有被转换为一个热并按原样馈送到模型中。 machinelearningmastery.com/…
    • 如果您仔细观察,该模型有一个嵌入层,可将整数输入转换为固定维度的向量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2020-04-28
    • 2018-03-08
    • 1970-01-01
    • 2017-07-30
    • 2017-07-25
    • 1970-01-01
    相关资源
    最近更新 更多