自然语言处理-核心部分LSTM

LSTM百度百科

  • 长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。在标准RNN中,这个重复的结构模块只有一个非常简单的结构,例如一个tanh层。

学习目标:

了解LSTM在自然语言处理中的使用


代码:

from keras.datasets import imdb
# 导入模型
from keras import Sequential
from keras.layers import Embedding, LSTM, Dense, Dropout

vocalbulary_size = 5000  # 词汇量
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=vocalbulary_size)
print('Loaded dataset with {} training samples, {} test samples'.format(len(x_train), len(x_test)))
# 训练集特征值
print(x_train[6])
word2id = imdb.get_word_index()
id2word = {i: word for word, i in word2id.items()}
print('----review with words-----')
print([id2word.get(i, '') for i in x_train[6]])
# 训练集目标值
print(y_train[6])

print('Maxinum review length:{}'.format(len(max((x_train + x_test), key=len))))
print('Mininum review length:{}'.format(len(min((x_train + x_test), key=len))))

from keras.preprocessing import sequence

max_words = 500
x_train = sequence.pad_sequences(x_train, maxlen=max_words)
x_test = sequence.pad_sequences(x_test, maxlen=max_words)

embedding_size = 32
model = Sequential()
model.add(Embedding(vocalbulary_size, embedding_size, input_length=max_words))
model.add(LSTM(100))
model.add(Dense(1, activation='sigmoid'))
print(model.summary())
# 损失函数使用交叉熵,优化器使用adam,指标使用精确度
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# 1次训练所选取的样本数/1次迭代所使用的样本量
batch_size = 64
# 1个epoch表示过了1遍训练集中的所有样本
num_epochs = 3
# 验证集
x_valid, y_valid = x_train[:batch_size], y_train[:batch_size]
# 训练集
x_train2, y_train2 = x_train[batch_size:], y_train[batch_size:]
model.fit(x_train2, y_train2, validation_data=(x_valid, y_valid), batch_size=batch_size, epochs=num_epochs)

scores = model.evaluate(x_test, y_test, verbose=0)
print('Test accuracy:', scores[1])


版权声明:本文为niubiqigai原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。