我有以下问题:
-
我想使用LSTM网络进行文本分类。为了加快训练速度和使代码更清晰,我想在
keras.Tokenizer
上使用Embedding
层来训练我的模型。 -
一旦我训练了我的模型-我想计算输出的显著性图,而不是输入。为了做到这一点,我决定将
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
。