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



我有以下问题:

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

  2. 一旦我训练了我的模型-我想计算输出的显著性图,而不是输入。为了做到这一点,我决定将Embedding层替换为TimeDistributedDense层。

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

您可以在训练后使用现有层创建新模型,而不会丢失训练后的信息。创建模型不会覆盖值,它只是重新安排张量的流动。例如,如果您的模型看起来像这样:

# 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

相关内容

  • 没有找到相关文章

最新更新