python - LSTM num_units 大小,即 hidden_layer 的大小
问题描述
我经常看到natural language processing
任务的使用LSTM
方式是,它们首先使用 aembedding layer
后跟LSTM layer
嵌入大小的 an,即如果使用 1x300 向量表示的单词LSTM(300)
。
例如:
model = Sequential()
model.add(Embedding(vocabulary, hidden_size, input_length=num_steps))
model.add(LSTM(hidden_size, return_sequences=True))
这样做有什么特别的原因吗?想要更好地表达含义?
解决方案
我不认为有任何特殊原因/需要,坦率地说,我自己并没有看到很多这种情况(即使用LSTM
隐藏单位 ==Embedding
大小)。唯一的影响是每个嵌入向量元素都有一个存储单元(我认为这不是必需的)。
话虽如此,我想我可能会提到一些额外的东西。也就是说,Embedding
在这个设置中有一个层是有原因的。事实上,这是一个很好的理由。让我们考虑两个选项,
- 使用一种热编码进行单词表示
Embeddings
用于单词表示
选项 2 比选项 1 有几个优点。
- 当您使用嵌入层时,输入的维度要小得多(例如 300 而不是 50000)
- 您正在为模型提供灵活性来学习实际上适合您解决的任务的单词表示。换句话说,您并没有限制单词的表示在训练过程中保持不变。
- 如果您使用预训练的词嵌入层来初始化该
Embedding
层,那就更好了。您正在将单词语义带入您正在解决的任务中。这总是有助于更好地解决任务。这类似于要求一个不理解单词含义的幼儿做与文本相关的事情(例如以正确的语法顺序排列单词)与要求一个 3 岁的孩子做同样的任务。他们俩最终都可能做到这一点。但是一个人会做得更快更好。
推荐阅读
- python - 当代码在 def 中时,canvas.create_image 不起作用:
- mysql - 有没有办法获取查询结果的列名
- scala - 如何在 sbt 交叉编译平台中运行特定的 scala-test?
- c++ - Qt: How to catch QDateEdit click event?
- opencv - How to calculate radius in orb?
- hyperledger-fabric - Hyperleger Fabric 中共识的细节是什么?
- http - 从 ReadCloser 发送 HTTP Put 正文永远不会结束
- javascript - MessageChannel 上的错误:“未找到与提供的签名匹配的函数”
- php - Yii2 获取 UTC 时间
- css - CSS在移动设备上证明文本对齐