AKS*_*HAN 6 python deep-learning keras
是什么input_dim,output_dim并input_length意味着:
Embedding(input_dim, output_dim, input_length)
Run Code Online (Sandbox Code Playgroud)
从我理解的文档:
input_dim:int> 0.词汇量的大小output_dim:int> = 0.密集嵌入的维度.input_length:输入序列的长度因此,当我的输入是一个单词时,google.com每个字符由一个整数表示[5, 2, 2, 5, 8, 3, 4, 1, 2, 9],最大字长可能是75.可能的最大字符是38.我应该如何决定input_dim,output_dim和input_length?
小智 7
为了使用单词进行自然语言处理或机器学习任务,有必要首先将它们映射到连续向量空间,从而创建单词向量或单词嵌入.Keras嵌入层对于构造这样的单词向量很有用.
input_dim:词汇量大小.这是您的语料库中表示的唯一单词数.
output_dim:单词向量的所需维度.例如,如果output_dim = 100,那么每个单词将被映射到具有100个元素的向量,而如果output_dim = 300,则每个单词将被映射到具有300个元素的向量上.
input_length:序列的长度.例如,如果您的数据由句子组成,则此变量表示句子中有多少单词.由于不同的句子通常包含不同数量的单词,因此通常需要填充序列以使所有句子具有相同的长度.keras.preprocessing.pad_sequence方法可以用于此(https://keras.io/preprocessing/sequence/).
在Keras中,可以1)使用预训练的单词向量,例如GloVe或word2vec表示,或2)学习单词向量作为训练过程的一部分.此博客文章(https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html)提供了有关如何使用GloVe预训练单词向量的教程.对于选项2,Keras将随机初始化向量作为默认选项,然后在训练过程中学习最佳单词向量.
如用示例解释:嵌入层如何在 keras 中工作,您可以将句子转换为整数列表(向量或张量)。具有 input_length 的向量示例(句子的最大长度为 6,以防您的句子更长,剩余的单词将被修剪)
'This is a text' --> [0 0 1 2 3 4]
'This is a very long text, my friends' --> [1 2 3 5 6 4]
Run Code Online (Sandbox Code Playgroud)
然后使用 keras 的嵌入层,您可以将这些向量转换为 output_dim 深度的嵌入向量。例如 output_dim = 3:
[0 0 1 2 3 4] -->
array([[ 0.00251105, 0.00724941, -0.01146401],
[ 0.00251105, 0.00724941, -0.01146401],
[ 0.03071865, 0.00953215, -0.01349484],
[ 0.02962008, 0.04860269, -0.04597988],
[-0.01875228, 0.03349927, -0.03210936],
[-0.02512982, 0.04811014, 0.03172458]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)
最后一个参数 input_dim 是映射到嵌入向量的词汇表的大小。你可以通过运行看到它
model.layers[0].get_weights()
Run Code Online (Sandbox Code Playgroud)
因为嵌入层通常是模型的第一层。如果是 10,嵌入层包含 10 个大小为 output_dim 的向量。请注意,第一个元素对应于输入向量中 0 的映射(0 --> [ 0.00251105, 0.00724941, -0.01146401]),第二个 1 等。
[array([[ 0.00251105, 0.00724941, -0.01146401],
[ 0.03071865, 0.00953215, -0.01349484],
[ 0.02962008, 0.04860269, -0.04597988],
[-0.01875228, 0.03349927, -0.03210936],
[-0.02512982, 0.04811014, 0.03172458],
[-0.00569617, -0.02348857, -0.00098624],
[ 0.01327456, 0.02390958, 0.00754261],
[-0.04041355, 0.03457253, -0.02879228],
[-0.02695872, 0.02807242, 0.03338097],
[-0.02057508, 0.00174383, 0.00792078]], dtype=float32)]
Run Code Online (Sandbox Code Playgroud)
增加 input_dim 可以让你映射更大的词汇量,但也增加了嵌入层的参数数量。参数数量为 input_dim x output_dim。
据我所知,这些向量是随机启动的,并像使用优化器算法的任何其他层一样进行训练。但是,您可以使用不同的算法,如 word2vec 或预训练的向量,如手套 ( https://nlp.stanford.edu/projects/glove/ )。想法是每个单词将代表空间中的一个独特位置(由它的向量描述),您可以对单词的语义(含义)应用一些向量数学。例如 W('cheesburger') - W('cheese') = W('hamburger') 或 W('prince') - W('man') + W('woman') = W('princess') 见更多例如在https://www.oreilly.com/learning/capturing-semantic-meanings-using-deep-learning
| 归档时间: |
|
| 查看次数: |
3620 次 |
| 最近记录: |