Keras, Tensorflow : 将两个不同模型的输出合并为一个

我正在研究一个深度学习模型,试图将两个不同模型的输出结合起来:

整体结构如下:

enter image description here

所以第一个模型接受一个矩阵,例如 [10 x 30]

#input 1input_text          = layers.Input(shape=(1,), dtype="string")embedding           = ElmoEmbeddingLayer()(input_text)model_a             = Model(inputs = [input_text] , outputs=embedding)                      # shape : [10,50]

现在第二个模型接受两个输入矩阵:

X_in               = layers.Input(tensor=K.variable(np.random.uniform(0,9,[10,32])))M_in               = layers.Input(tensor=K.variable(np.random.uniform(1,-1,[10,10]))md_1               = New_model()([X_in, M_in]) #new_model defined somewheremodel_s            = Model(inputs = [X_in, A_in], outputs = md_1)                     # shape : [10,50]

我想让这些矩阵可以被训练,就像在TensorFlow中我可以通过以下方式做到这样:

matrix_a = tf.get_variable(name='matrix_a',                           shape=[10,10],                           dtype=tf.float32,                                 initializer=tf.constant_initializer(np.array(matrix_a)),trainable=True)

我不知道如何让matrix_a和matrix_b可以被训练,以及如何合并这两个网络的输出然后输入。

我查看了这个问题,但没有找到答案,因为他们的问题陈述与我的不同。

到目前为止,我尝试过的是:

#input 1input_text          = layers.Input(shape=(1,), dtype="string")embedding           = ElmoEmbeddingLayer()(input_text)model_a             = Model(inputs = [input_text] , outputs=embedding)                      # shape : [10,50]X_in               = layers.Input(tensor=K.variable(np.random.uniform(0,9,[10,10])))M_in               = layers.Input(tensor=K.variable(np.random.uniform(1,-1,[10,100]))md_1               = New_model()([X_in, M_in]) #new_model defined somewheremodel_s            = Model(inputs = [X_in, A_in], outputs = md_1)                    # [10,50]#tranpose second model outputtranpose          = Lambda(lambda x: K.transpose(x))agglayer          = tranpose(md_1)# concat first and second model outputdott             = Lambda(lambda x: K.dot(x[0],x[1]))kmean_layer     = dotter([embedding,agglayer])# input final_model = Model(inputs=[input_text, X_in, M_in], outputs=kmean_layer,name='Final_output')final_model.compile(loss = 'categorical_crossentropy', optimizer='adam', metrics=['accuracy'])final_model.summary() 

模型概览:

enter image description here

更新:

模型 B

X = np.random.uniform(0,9,[10,32])M = np.random.uniform(1,-1,[10,10])X_in = layers.Input(tensor=K.variable(X))M_in = layers.Input(tensor=K.variable(M))layer_one       = Model_b()([M_in, X_in])dropout2       = Dropout(dropout_rate)(layer_one)layer_two      = Model_b()([layer_one, X_in])model_b_ = Model([X_in, M_in], layer_two, name='model_b')

模型 A

length = 150dic_size = 100embed_size = 12input_text = Input(shape=(length,))embedding = Embedding(dic_size, embed_size)(input_text)embedding = LSTM(5)(embedding) embedding = Dense(10)(embedding)model_a = Model(input_text, embedding, name = 'model_a')

我像这样合并:

mult = Lambda(lambda x: tf.matmul(x[0], x[1], transpose_b=True))([embedding, model_b_.output])final_model = Model(inputs=[model_b_.input[0],model_b_.input[1],model_a.input], outputs=mult)

这种方式可以正确地将两个Keras模型进行矩阵乘法吗?

我不知道我是否正确地合并了输出,以及模型是否正确。

如果有人能友好地给我一些建议,告诉我如何使那个矩阵可训练,以及如何正确地合并模型的输出然后输入,我将非常感激。

提前感谢!


回答:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注