我想在具有给定架构的训练有素的sentEncoder模型中的第二个TimeDistributed包装器中调用‘Keras’模型中的层,以创建另一个用于进行中间预测的Keras模型。从'docEncoder‘模型中调用层非常简单,但是如何在训练'docEncoder’之后访问sentEncoder中的层呢?
l2_reg = regularizers.l2(reg_param)
sentence_input = Input(shape=(MAX_SENT_LENGTH,), dtype='int32')
embedding_layer = get_embedding_layer(embedding_dim=embedding_dim, embedding_matrix=embedding_matrix,
max_num_words=max_num_words, max_sent_length=max_sent_length,
reg_param=reg_param)
embedded_sequences = embedding_layer(sentence_input)
l_lstm = Bidirectional(GRU(gru_units, return_sequences=True))(embedded_sequences)
l_dense = TimeDistributed(Dense(2*gru_units, use_bias=True,
bias_initializer='zero',
kernel_initializer='glorot_uniform',
activation='tanh'))(l_lstm)
l_att = AttLayer()(l_dense)
sentEncoder = Model(sentence_input, l_att)
print(sentEncoder.summary())
doc_input = Input(shape=(max_sents, max_sent_length), dtype='int32')
review_encoder = TimeDistributed(sentEncoder)(doc_input)
l_lstm_sent = Bidirectional(GRU(gru_units, return_sequences=True))(review_encoder)
l_dense_sent = TimeDistributed(Dense(2*gru_units, use_bias=True,
bias_initializer='zero',
kernel_initializer='glorot_uniform',
activation='tanh'))(l_lstm_sent)
l_att_sent = AttLayer()(l_dense_sent)
preds = Dense(n_classes, activation='sigmoid', kernel_regularizer=l2_reg)(l_att_sent)
docEncoder = Model(doc_input, preds)发布于 2018-06-13 05:36:49
可以像这样从TimeDistributed包装器中的层提取权重:
sent_att_u_weights = model.layers[4].get_weights()[0]发布于 2018-07-03 17:34:07
您可以使用类似以下内容将其设置为可再次训练:
for layer in docEncoder.layers[0].layer.layers:
layer.trainable=True首先,您可以在主模型中将TimeDistributed包装的sentEncoder作为一个层进行访问,然后访问其中的层。
https://stackoverflow.com/questions/49914452
复制相似问题