首页 > 解决方案 > 喀拉斯。如何更改模型以使其不使用嵌入层

问题描述

有一个 BLSTM RNN 是通过嵌入层进行训练的。我想将其更改为仅在输入序列上进行训练。我不完全确定从哪里开始进行更改。

有人有建议吗?

embedding_layer = Embedding(len(word2int) + 1,
                            EMBEDDING_DIM,
                            weights=[embedding_matrix],
                            input_length=MAX_SEQUENCE_LENGTH,
                            trainable=True)
sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH,), dtype='int32')
embedded_sequences = embedding_layer(sequence_input)

l_lstm = Bidirectional(LSTM(64, return_sequences=True))(embedded_sequences)
preds = TimeDistributed(Dense(n_tags + 1, activation='softmax'))(l_lstm)

标签: tensorflowkerasneural-network

解决方案


我正在解释将其更改为仅以两种方式对输入序列进行训练:

  • 您希望 LSTM[34, 21, 8, ...]直接在整数上实际运行,在这种情况下,您需要说每个时间步只有 1 个整数,即转换(batch_size, max_seq_len)(batch_size, max_seq_len, 1)可以使用embedded_seqs = Lambda(lambda x: K.expand_dims(x, -1))(sequence_input). 这将强制模型查看实际的整数值,但我不推荐它。

  • 另一种选择是对其进行热编码,因此没有可训练的嵌入,但每个单词都有一个大向量,对应索引处为 1。您可以通过删除weights=[embedding_matrix]和添加embeddings_initializer='eye'到您的Embedding图层设置来做到这一点trainable=False


推荐阅读