如何在训练后用时间分布密集替换嵌入层?

时间:2016-09-16 13:21:25

标签: machine-learning nlp neural-network embedding keras

我有以下问题:

  1. 我想使用LSTM网络进行文本分类。为了加快培训速度并使代码更清晰,我想在Embedding上使用keras.Tokenizer图层来训练我的模型。

  2. 一旦我训练了我的模型 - 我想计算w.r.t输出的显着性图。输入。为此,我决定将Embedding图层替换为TimeDistributedDense

  3. 你知道最好的方法是什么吗?对于一个简单的模型,我能够简单地重建具有已知权重的模型 - 但我想让它尽可能通用 - 例如将模型结构替换为未来,并尽可能使我的框架成为模型不可知。

1 个答案:

答案 0 :(得分:0)

您可以在训练后使用现有图层创建新模型,而不会丢失经过训练的信息。创建模型不会覆盖值,它只是重新排列张量流。例如,如果您的模型如下所示:

# Create model for training, includes Embedding layer
in = Input(...)
em = Embedding(...)
l1 = LSTM(...)
l2 = TimeDistributed(Dense(...))

t_em = em(in)
t_l1 = l1(t_em)
t_l2 = l2(t_l1)

model_train = Model(inputs=[in], outputs=[t_l2])
model_train.compile(...)
model_train.fit(...)

# Create model for salience map, ignores Embedding layer
t_l1 = l1(in)
t_l2 = l2(in)
model_saliency = Model(inputs=[in], outputs=[t_l2])

作为旁注,TimeDistributedDense已弃用,请使用wrappers.TimeDistributed