如何在keras程序中调用TimeDistributed包装器中的层

如何在keras程序中调用TimeDistributed包装器中的层,keras,Keras,我想在具有给定体系结构的经过训练的Keras模型的第二次分布式包装器中调用“sentEncoder”模型中的层,以创建另一个Keras模型来进行中间预测。从“docEncoder”模型调用层是相当简单的,但是在培训“docEncoder”之后如何访问sentEncoder中的层呢 l2_reg=regularizers.l2(reg_参数) 句子输入=输入(形状=(最大发送长度),数据类型='int32') 嵌入层=获取嵌入层(嵌入层=嵌入层,嵌入矩阵=嵌入矩阵, max_num_words=m

我想在具有给定体系结构的经过训练的Keras模型的第二次分布式包装器中调用“sentEncoder”模型中的层,以创建另一个Keras模型来进行中间预测。从“docEncoder”模型调用层是相当简单的,但是在培训“docEncoder”之后如何访问sentEncoder中的层呢

l2_reg=regularizers.l2(reg_参数)
句子输入=输入(形状=(最大发送长度),数据类型='int32')
嵌入层=获取嵌入层(嵌入层=嵌入层,嵌入矩阵=嵌入矩阵,
max_num_words=max_num_words,max_sent_length=max_sent_length,
reg_参数=reg_参数)
嵌入的\u序列=嵌入\u层(句子\u输入)
l_lstm=双向(GRU(GRU单位,返回序列=真))(嵌入序列)
l_稠密=时间分布(稠密(2*gru单位,使用偏差=真,
偏差\u初始值设定项='0',
kernel\u initializer='glorot\u uniform',
激活(='tanh'))(llstm)
l_att=AttLayer()(l_密集)
sentEncoder=模型(句子输入,l_att)
打印(sentcoder.summary())
文档输入=输入(形状=(最大发送,最大发送长度),数据类型='int32')
检查编码器=时间分配(sentEncoder)(文件输入)
l_lstm_sent=双向(GRU(GRU单元,返回序列=真))(查看编码器)
l_densite_sent=时间分布(密集(2*gru_单位,使用偏差=真,
偏差\u初始值设定项='0',
kernel\u initializer='glorot\u uniform',
激活(='tanh'))(l_lstm_发送)
l_att_sent=AttLayer()(l_sent)
preds=稠密(n_类,activation='sigmoid',kernel_正则化器=l2_reg)(l_att_发送)
docEncoder=模型(文档输入,preds)

可以按如下方式提取时间分布包装器中某个层的权重:

sent_att_u_weights = model.layers[4].get_weights()[0]

您可以使用类似以下内容将其设置为可再次培训:

for layer in docEncoder.layers[0].layer.layers:
layer.trainable=True
首先,在主模型中访问
TimeDistributed
wrapped
sentcoder
作为一个层,然后访问其中的层