Python 提取3个嵌入层的Keras连接层,但它';这是一张空名单
我正在构建一个具有多个输入(实际上是3个)的Keras分类模型,以预测单个输出。具体而言,我的3个输入是:Python 提取3个嵌入层的Keras连接层,但它';这是一张空名单,python,tensorflow,keras,nlp,word-embedding,Python,Tensorflow,Keras,Nlp,Word Embedding,我正在构建一个具有多个输入(实际上是3个)的Keras分类模型,以预测单个输出。具体而言,我的3个输入是: 演员 情节摘要 相关电影特辑 输出: 类型标签 Python代码(创建多输入kera) 模型结构 我的问题: 在一些训练数据上成功地拟合和训练了模型之后,我想提取这个模型的嵌入,以供以后使用。在使用多输入keras模型之前,我的主要方法是训练3个不同的keras模型并提取shape 100的3个不同嵌入层。现在我有了多输入keras模型,我想提取带有输出形状(None,300)的连接嵌入
embeddings = model_4.layers[9].get_weights()
print(embeddings)
或
我得到一个空列表(第一个代码示例)或一个索引错误:列表索引超出范围(第二个代码示例)
提前感谢您对此事的任何建议或帮助。请随时在评论中询问我可能遗漏的任何其他信息,以使此问题更加完整
注意:Python代码和模型的结构也已经呈现给了前面回答的这个问题,连接层没有任何权重(从模型摘要中可以看到,它没有可训练的参数),因此您的
get_weights()
输出为空。串联是一种操作。
对于您的情况,您可以在训练后获得各个嵌入层的权重
model.layers[3].get_weights() # similarly for layer 4 and 5
或者,如果要将嵌入存储在(None,300)中,可以使用numpy来连接权重。out_concat = np.concatenate([mdoel.layers[3].get_weights()[0], mdoel.layers[4].get_weights()[0], mdoel.layers[5].get_weights()[0]], axis=-1)
虽然可以获得连接层的输出张量:
out_tensor = model.layers[9].output
# <tf.Tensor 'concatenate_3_1/concat:0' shape=(?, 300) dtype=float32>
out\u tensor=model.layers[9]。输出
#
非常感谢您的回答。事实上今天早上,我想的和你给我的完全一样。提取第3、4、5层并使用np.concatenate或np.stack合并它们。
out_concat = np.concatenate([mdoel.layers[3].get_weights()[0], mdoel.layers[4].get_weights()[0], mdoel.layers[5].get_weights()[0]], axis=-1)
out_tensor = model.layers[9].output
# <tf.Tensor 'concatenate_3_1/concat:0' shape=(?, 300) dtype=float32>