我目前正在开发一个模型,根据产品描述预测其类别。模型的代码大致如下:
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)
…您可以找到如何为神经网络添加多个类别以及如何查看分类结果的逻辑。示例代码还将网络结构保存为图像,如下所示:
…请注意,模型的输出大小为三,根据模型定义的类别数量。包含多个类别结果的输出是一个张量,可以通过代码中示例化的过程轻松调查。