繁体   English   中英

Keras LSTM可以从“文本分类”中的一个输入中预测出两个功能?

[英]Keras LSTM predict two features from one input in Text classification?

我有X作为文本,带有两个要训练的标签(列)。

--input.csv--
content, category, rate
text test, 1, 3
new test, 2, 2

在这里,我的输入X将是内容。 我已经将其转换为序列矩阵。 我需要类别和费率以及内容一起进行培训。 我不知道如何在层内部传递它。

def RNN():
    num_categories = 2
    num_rates = 3
    inputs = Input(name='inputs',shape=[max_len])

    layer = Embedding(max_words,150,input_length=max_len)(inputs)
    layer = LSTM(100)(layer)

    shared_layer = Dense(256, activation='relu', name='FC1')(layer)
    shared_layer = Dropout(0.5)(shared_layer)

    cat_out = Dense(num_categories, activation='softmax', name='cat_out')(shared_layer)
    rate_out = Dense(num_rates, activation='softmax', name='rate_out')(shared_layer)

    model = Model(inputs=inputs,outputs=[cat_out, rate_out])
    return model

model = RNN()
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])  
model.fit(sequences_matrix,[Y_train, Z_train])

Y_train仅包含类别。 我想增加训练的速度。 有人知道吗? 我想要两个结果。 一个应该与类别有关,另一个应该与比率有关。 当前仅返回标签。 不与率。 我不知道为“速率”列添加层的方法。

您可以使用功能性API来实现这一点,只需让网络从共享要素层获得2个输出即可:

shared_layer = Dense(256, activation='relu', name='FC1')(layer)
shared_layer = Dropout(0.5)(shared_layer)
cat_out = Dense(num_categories, activation='softmax', name='cat_out')(shared_layer)
rate_out = Dense(num_rates, activation='softmax', name='rate_out')(shared_layer)

model = Model(inputs=inputs,outputs=[cat_out, rate_out])
return model

现在,您将使用两个目标y_train_caty_train_rate ,并将它们作为model.fit(X_train, [y_train_cat, y_train_rate])的列表提供model.fit(X_train, [y_train_cat, y_train_rate])并且模型将做出两个不同的预测。

查看有关如何处理多输入/多输出模型的功能性API 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM