我正在尝试建立一个单词预测系统。我已经创建了一个包含所有唯一单词的查找表,并将单词转换为整数。我已将每个短语转换为时间序列格式。我将这个填充零的列表提供给lstm网络。
inp = pickle.load(open("input.pkl", "rb"))
out = pickle.load(open("output.pkl", "rb"))
inp=np.array(inp,dtype=int)
out=np.array(out,dtype=int)
a=inp.shape
a=(a[1],a[2])
model = Sequential()
model.add(LSTM(128,input_shape=a,return_sequences=True,activation='relu'))
model.add(Dropout(0.2))
model.add(LSTM(128,input_shape=a,return_sequences=True,activation='relu',
go_backwards=True))
model.add(Dropout(0.2))
model.add(LSTM(128,input_shape=a,return_sequences=True,activation='relu',
go_backwards=True))
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(loss='mse',optimizer='rmsprop',metrics=['accuracy'])
model.fit(inp,out,epochs=1000,batch_size=1000,verbose=2,
validation_split=0.25)
model.save('num1.h5')
这些是inp和out的形状以及inp和out
的第一和第二个值(249368L, 1L, 10L) #Shape of inp
(249368L, 1L, 1L) #Shape of out
[[-1 0 0 0 0 0 0 0 0 0]] #inp[0]
[[1531]] #out[0]
[[ -1 1531 0 0 0 0 0 0 0 0]] #inp[1]
[[1801]] #out[1]
在最后一个纪元之后,这就是准确性和损失
7s - loss: 325231.6975 - acc: 8.0203e-05 - val_loss: 325280.0941 - val_acc: 0.0000e+00
我尝试将激活功能更改为sigmoid和tanh,将传播设置为False,尝试使用adam,adagrad优化器,更改了网络中隐藏层的数量。此外,我尝试将softmax添加到最后一层(我删除它,因为它导致消失的渐变问题)。问题是我将数据提供给网络的方式还是其他问题?
答案 0 :(得分:0)
我通过创建所有唯一字母的查找表而不是使用唯一单词的查找表来解决此问题。然后,我预测下一个字符,直到预测与空间相对应的整数。从而预测下一个单词或完成当前单词。