Python 提取3个嵌入层的Keras连接层,但它';这是一张空名单

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)的连接嵌入

我正在构建一个具有多个输入(实际上是3个)的Keras分类模型,以预测单个输出。具体而言,我的3个输入是:

  • 演员
  • 情节摘要
  • 相关电影特辑
  • 输出:

  • 类型标签
  • Python代码(创建多输入kera)

    模型结构

    我的问题:

    在一些训练数据上成功地拟合和训练了模型之后,我想提取这个模型的嵌入,以供以后使用。在使用多输入keras模型之前,我的主要方法是训练3个不同的keras模型并提取shape 100的3个不同嵌入层。现在我有了多输入keras模型,我想提取带有输出形状(None,300)的连接嵌入层

    但是,当我尝试使用此python命令时:

    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>