使用概率标签训练LSTM

时间:2018-12-10 20:39:03

标签: python tensorflow keras lstm

我目前正在从事一个项目,例如10位用户将发短信分为两个2类。我正在尝试使用发行作为培训LSTM的标签,例如如果10个用户中有8个投票赞成,则标签为0.8。

我现在正在使用以下模型:

lstm = Sequential()
lstm.add(Embedding(number_unique_words, vector_size, weights=[embedding_matrix], input_length=max_len, trainable=False))
lstm.add(LSTM(64))
lstm.add(Dense(64, activation='sigmoid'))
lstm.add(Dense(1, activation='sigmoid'))

lstm.compile(loss='mse',
             optimizer="adam",
             metrics=['acc'])

results = lstm.fit(x, 
                   y, 
                   batch_size=128, 
                   epochs=5, 
                   validation_split=0.4, 
                   shuffle=True)

embedding_matrix是由500维word2vec模型创建的,而indizes是由令牌生成器创建的。然后,该模型的输入是一个标记化注释。

我已经尝试过改变LSTM和隐藏层的大小和数量,使用了不同的优化器和lrs,batch_size,历元和激活/丢失函数。问题在于,acc总是卡在50%左右,并且模型会为所有测试用例预测一个恒定值。

有人知道这行不通吗?仅仅不可能用概率标签训练LSTM吗?

1 个答案:

答案 0 :(得分:0)

解决了我的问题。我一直以“发布”的方式填充我的标记化注释,因此我附加了0以将其固定长度。在注释前面加上0(“ pre”)会完全改变结果。 LSTM可以更好地工作!

要进一步阅读,请在pad_sequences和padding下检查https://keras.io/preprocessing/sequence/