我想在将输入数据输入到我试图创建的LSTM网络之前使用嵌入层。以下是代码的相关部分:
input_step1 = Input(shape=(SEQ_LENGTH_STEP1, NR_FEATURES_STEP1),
name='input_step1')
step1_lstm = CuDNNLSTM(50,
return_sequences=True,
return_state = True,
name="step1_lstm")
out_step1, state_h_step1, state_c_step1 = step1_lstm(input_step1)
关于如何在这里添加嵌入层,我有点困惑。
以下是文档中嵌入层的描述:
keras.layers.Embedding(input_dim,
output_dim,
embeddings_initializer='uniform',
embeddings_regularizer=None,
activity_regularizer=None,
embeddings_constraint=None,
mask_zero=False,
input_length=None)
令人困惑的部分是我定义的Input
具有序列长度和定义的特征数。再写一遍:
input_step1 = Input(shape=(SEQ_LENGTH_STEP1, NR_FEATURES_STEP1),
name='input_step1')
在定义嵌入层时,我对Embedding
函数的哪些参数对应于“序列数”和“每个时间步中的特征数”感到困惑。任何人都可以指导我如何将嵌入层集成到我上面的代码中吗?
附录:
如果我尝试以下方法:
SEQ_LENGTH_STEP1 = 5
NR_FEATURES_STEP1 = 10
input_step1 = Input(shape=(SEQ_LENGTH_STEP1, NR_FEATURES_STEP1),
name='input_step1')
emb = Embedding(input_dim=NR_FEATURES_STEP1,
output_dim=15,
input_length=NR_FEATURES_STEP1)
input_step1_emb = emb(input_step1)
step1_lstm = CuDNNLSTM(50,
return_sequences=True,
return_state = True,
name="step1_lstm")
out_step1, state_h_step1, state_c_step1 = step1_lstm(input_step1_emb)
我收到以下错误:
ValueError: Input 0 of layer step1_lstm is incompatible with the layer:
expected ndim=3, found ndim=4. Full shape received: [None, 5, 10, 15]
我显然没有做正确的事情..有没有办法将Embedding
集成到我试图尝试的LSTM网络中?
来自Keras Embedding文档:
参数
- input_dim:int> 0.词汇表的大小,即最大整数索引+ 1。
- output_dim:int> = 0.密集嵌入的维度。
- input_length:输入序列的长度,当它是常量时。如果要连接Flatten然后连接上游的Dense层,则需要此参数(没有它,无法计算密集输出的形状)。
因此,根据您的描述,我假设:
input_dim
对应于数据集的词汇量大小(不同单词的数量)。例如,以下数据集的词汇量大小为5:
data = ["Come back Peter,",
"Come back Paul"]
output_dim
是一个任意的超参数,表示嵌入空间的维度。换句话说,如果你设置output_dim=x
,句子中的每个单词都将用x
特征表征。input_length
应设置为SEQ_LENGTH_STEP1
(表示每个句子长度的整数)。嵌入层的输出形状是(batch_size, input_length, output_dim)
。
关于增编的进一步说明:
team_in_step1
未定义。Embedding
层,输入张量input_step1
的预期形状是(batch_size, input_length)
:
input_step1 = Input(shape=(SEQ_LENGTH_STEP1,),
name='input_step1')
该张量中的每个整数对应一个单词。emb = Embedding(input_dim=VOCAB_SIZE,
output_dim=15,
input_length=SEQ_LENGTH_STEP1)
其中VOCAB_SIZE
是你词汇量的大小。