我目前正在从事一个项目,例如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吗?
答案 0 :(得分:0)
解决了我的问题。我一直以“发布”的方式填充我的标记化注释,因此我附加了0以将其固定长度。在注释前面加上0(“ pre”)会完全改变结果。 LSTM可以更好地工作!
要进一步阅读,请在pad_sequences和padding下检查https://keras.io/preprocessing/sequence/