【发布时间】:2019-02-22 07:33:11
【问题描述】:
我想在将输入数据输入我尝试创建的 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 网络中?
【问题讨论】:
标签: tensorflow machine-learning keras lstm embedding