有一个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)
答案 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
中来实现。