tensorflow - 喀拉斯。如何更改模型以使其不使用嵌入层
问题描述
有一个 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)
解决方案
我正在解释将其更改为仅以两种方式对输入序列进行训练:
您希望 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
。
推荐阅读
- pandas - Numpy 在哪里执行多个操作
- html - 如何以“折叠”类(引导程序)居中 div?
- mysql - MySQL获取前一天的数据
- excel - 是否有更优雅的公式/方法来编写宏行以重新格式化 VBA/excel 中的地址?
- javascript - 较旧的 Android 设备会使用 Cordova 运行 ES6 吗?
- machine-learning - 如何使用 SelectKBest 选择的特征训练模型?
- node.js - 全局安装时找不到节点快递模块
- android - HERE SDK Premium Android - 离线导航的奇怪行为:没有 ReRouting 并且没有 RouteGuidance Maneuvers
- r - 我想使用 R 选择组中最低的 3 个数字
- jquery - 在表格的顶部 tr 上显示标题