将一个模型的输出与另一个模型结合

我目前正在开发一个模型,根据产品描述预测其类别。模型的代码大致如下:

deep_inputs = Input(shape=(maxlen,))embedding_layer = Embedding(vocab_size, 100, weights=[embedding_matrix], trainable=False)(deep_inputs)LSTM_Layer_1 = LSTM(128)(embedding_layer)dense_layer_1 = Dense(31, activation='softmax')(LSTM_Layer_1)L1model = Model(inputs=deep_inputs, outputs=dense_layer_1)L1model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])

数据的结构是,类别通常是层级化的,我想在模型中编码这一信息(不确定这样做是否正确)。

因此,通常会有这样的类别结构:

Category Level 1 > Category Level 2 > Category Level 3 ... 依此类推。 

上面的模型只能预测第一级。我希望将这个预测结果和原始描述文本作为输入来预测第二级。请问有人能帮我指导一下最好的做法吗?

我尝试过这样做,但不确定这是否是将两者结合的最佳方式。

from keras.models import load_modelmodel = load_model('l1classifier.h5')Y_predict = model.predict(X_train)concatenate = Concatenate()prediction = Input(shape=(Y_predict.shape))combined = concatenate([prediction, L2model.output])

回答:

通过稍微修改您的代码为以下形式:

import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layersimport numpy as npmaxlen=100vocab_size=10deep_inputs = keras.Input(shape=(maxlen,))embedding_layer = layers.Embedding(vocab_size, 100)(deep_inputs)LSTM_Layer_1 = layers.LSTM(128)(embedding_layer)#让我们添加分类层级...first_category_level_result = layers.Dense(31, activation='softmax')(LSTM_Layer_1)second_category_level_result = layers.Dense(31, activation='softmax')(first_category_level_result)third_category_level_result = layers.Dense(31, activation='softmax')(second_category_level_result)#让我们根据分类层级配置三个输出...L1model = keras.Model(inputs=deep_inputs, outputs=[first_category_level_result,second_category_level_result,third_category_level_result])L1model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])#为了评估,让我们绘制网络结构:keras.utils.plot_model(L1model,'categorical_classifier_network.png')#示范:test_input_for_network=tf.ones((1,1))output_of_the_network=L1model(test_input_for_network)first_category_prediction=np.argmax(output_of_the_network[0].numpy())second_category_prediction=np.argmax(output_of_the_network[1].numpy())third_category_prediction=np.argmax(output_of_the_network[2].numpy())print("根据AI的判断,产品总体上属于第",first_category_prediction, "类别,在该类别下属于子类别", second_category_prediction, ",在细分级别上属于此类别中的", third_category_prediction)

…您可以找到如何为神经网络添加多个类别以及如何查看分类结果的逻辑。示例代码还将网络结构保存为图像,如下所示:

enter image description here

…请注意,模型的输出大小为三,根据模型定义的类别数量。包含多个类别结果的输出是一个张量,可以通过代码中示例化的过程轻松调查。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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