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 仅包含类别。我想增加训练的速度。有人知道吗?
我想要两个结果。一个应该是关于类别的,另一个是关于费率的。
目前它只返回标签。不随率。不知道怎么给Rate栏加层
您可以使用函数 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_cat
和 y_train_rate
,并将它们作为列表提供给 model.fit(X_train, [y_train_cat, y_train_rate])
,模型将做出两个不同的预测。
查看有关如何处理多输入/多输出模型的功能 API documentation。
我有 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 仅包含类别。我想增加训练的速度。有人知道吗? 我想要两个结果。一个应该是关于类别的,另一个是关于费率的。 目前它只返回标签。不随率。不知道怎么给Rate栏加层
您可以使用函数 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_cat
和 y_train_rate
,并将它们作为列表提供给 model.fit(X_train, [y_train_cat, y_train_rate])
,模型将做出两个不同的预测。
查看有关如何处理多输入/多输出模型的功能 API documentation。