【问题标题】:LSTM after embedding of a N-dimensional sequence嵌入 N 维序列后的 LSTM
【发布时间】:2019-06-04 20:36:15
【问题描述】:

我有一个二维输入序列 train_seq,形状为 (100000, 200, 2),即 100000 个训练示例,序列长度为 200,以及 2 个特征。

序列是文本,因此每个元素是一个单词,词汇表为 5000 个单词。因此,我想在我的 LSTM 之前使用嵌入层。

MAX_SEQUENCE_LENGTH = 200
EMBEDDING_SIZE = 64
MAX_FEATURES = 5000
NUM_CATEGORIES = 5

model_input = Input(shape=(MAX_SEQUENCE_LENGTH,2))

x = Embedding(output_dim=EMBEDDING_SIZE, input_dim=MAX_FEATURES, input_length=(MAX_SEQUENCE_LENGTH,2))(model_input)

x_lstm = LSTM(64)(x)

x = Dense(128, activation='relu', name = 'lstm')(x_lstm)

output = Dense(NUM_CATEGORIES, activation='sigmoid')(x)

model = Model(inputs=[model_input], outputs=[output])

model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

但是,我无法构建模型并收到以下错误:

ValueError: Input 0 is incompatible with layer lstm: expected ndim=3, found ndim=4。通过查看没有 LSTM 的模型摘要,我可以看到我的嵌入的输出形状是 (None, 200, 2, 64)

Layer (type)                 Output Shape              Param #   
=================================================================
merged_input (InputLayer)    (None, 200, 2)            0         
_________________________________________________________________
embedding (Embedding)        (None, 200, 2, 64)        196096    
_________________________________________________________________

请注意,当输入序列是一维时,此架构有效。 LSTM 可以接收二维序列吗?如何告诉 LSTM 层输入形状是(None, 200, 2, 64)

任何帮助将不胜感激

【问题讨论】:

    标签: keras lstm dimensions embedding


    【解决方案1】:

    解决方案是将输入形状添加到LSTM层:

    x_lstm = LSTM(64, input_shape=(MAX_SEQUENCE_LENGTH,2))(x)
    

    后跟一个 Flatten 层

    x = Flatten()(x_lstm)
    

    【讨论】:

      【解决方案2】:

      首先不要定义输入层,你不需要它。一般来说,Embedding 层是这样使用的:

      model = Sequential()
      model.add(Embedding(MAX_FEATURES, EMBEDDING_SIZE , input_length=MAX_SEQUENCE_LENGTH ))
      model.add(LSTM(64))
      (...)
      

      函数式样式定义也是如此,试试看吧。

      【讨论】:

      • 函数 API 是这样吗?我不打算使用 Sequential API。
      • 是的,应该是一样的。顺便说一句,我认为您不需要功能性 API。你有单一的输入,不要重复使用层
      • 你说得对,我不需要函数式 API,但我的模型会变得更复杂,我会需要它。所以我想我会从小事做起,然后做大事
      猜你喜欢
      • 1970-01-01
      • 2016-10-20
      • 2018-01-11
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多