我对数据科学和神经网络非常陌生。我有一个unicode句子的数据集,它们被标记为“ spam”或“ not_spam”的0和1。我用于数据的模型是以下代码(不包括数据预处理):
from keras.models import Model
from keras.layers import LSTM, Activation, Dense, Dropout, Input, Embedding
def RNN():
inputs = Input(name='inputs',shape=[max_len])
layer = Embedding(max_words,50,input_length=max_len)(inputs)
layer = LSTM(64)(layer)
layer = Dense(256,name='FC1')(layer)
layer = Activation('relu')(layer)
layer = Dropout(0.5)(layer)
layer = Dense(1,name='out_layer')(layer)
layer = Activation('sigmoid')(layer)
# sigmoid aka 0 to 1 output
model = Model(inputs=inputs,outputs=layer)
return model
model.compile(loss='binary_crossentropy',optimizer=RMSprop(),metrics=['accuracy'])
到目前为止的预测很好。
但是现在我修改了数据集。我添加了6列而不是“ spam”列,因此我的数据标签变成了[1-7]之间的整数。数据集如下所示(案例1):
sentence | category
sent 1 | 1
sent 2 | 3
sent 3 | 2
sent 4 | 7
.
.
.
我知道我可以添加虚拟变量并像这样修改它(案例2):
sentence | category_1 | category_2 | category_3 | ... | category_7
sent 1 | 1 | 0 | 0 | | 0
sent 2 | 0 | 0 | 1 | | 0
sent 3 | 0 | 1 | 0 | | 0
sent 4 | 0 | 0 | 0 | | 1
.
.
.
因此,我熟悉数据集的功能工程部分。我实际上正在寻找的是修改代码以使其具有1,2,3,4,..等模型的输出(这意味着对每个类别进行预测)。
有人知道如何通过尽可能少的编辑来修改代码(keras模型)吗?
(基于NLP和神经网络领域的经验)任何其他提高准确性的建议也将受到赞赏。
答案 0 :(得分:1)
答案 1 :(得分:0)
用此layer = Dense(8,name='out_layer')(layer)
替换此行layer = Dense(8,name='out_layer')(layer)
即可完成工作。
要获取具有8个值的数组,我们必须使用以下代码:
from keras.models import Model
from keras.layers import LSTM, Activation, Dense, Dropout, Input, Embedding
def RNN():
inputs = Input(name='inputs',shape=[max_len])
layer = Embedding(max_words,50,input_length=max_len)(inputs)
layer = LSTM(64)(layer)
layer = Dense(256,name='FC1')(layer)
layer = Activation('relu')(layer)
layer = Dropout(0.5)(layer)
layer = Dense(8,name='out_layer')(layer)
layer = Activation('sigmoid')(layer)
# sigmoid aka 0 to 1 output
model = Model(inputs=inputs,outputs=layer)
return model
model.compile(loss='binary_crossentropy',optimizer=RMSprop(),metrics=['accuracy'])