凯拉斯。如何不使用嵌入层更改模型

时间:2018-11-27 18:20:53

标签: tensorflow keras neural-network

有一个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)

1 个答案:

答案 0 :(得分:1)

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

  • 您要么希望LSTM直接直接在整数[34, 21, 8, ...]上运行,在这种情况下,您需要说每个时间步长只有1个整数,即将(batch_size, max_seq_len)转换为{{1} },可以使用(batch_size, max_seq_len, 1)来实现。这将迫使模型查看实际的整数值,但我不建议这样做。

  • 另一种选择是对其进行热编码,因此没有可训练的嵌入,但是每个单词的大向量在对应的索引处带有1。您可以通过删除embedded_seqs = Lambda(lambda x: K.expand_dims(x, -1))(sequence_input)并将weights=[embedding_matrix]添加到embeddings_initializer='eye'图层设置Embedding中来实现。