IMDB网络电影数据集与自然语言处理(二)

步骤5:Embedding层将“数字列表”转化为"向量列表"(加入嵌入层)

1.导入所需模块

from keras.models import Sequential

from keras.layers.core import Dense, Dropout, Activation,Flatten

from keras.layers.embeddings import Embedding

2.建立模型

建立一个线性堆叠模型,后续只需将各个神经网络加入模型即可

model = Sequential()

3.将嵌入层加入模型

model.add(Embedding(output_dim=32, #输出维度为32,我们希望将数字列表转化为32维的向量

                    input_dim=2000, #输入的维度是2000,因为之前建立的字典有2000单词

                    input_length=100)) #数字列表每一项有100个数字

model.add(Dropout(0.2))   #加入dropout避免过度拟合

步骤6:将向量列表送入深度学习模型进行训练

1.多层感知机

1.1 建立多层感知机模型

(1)将平坦层加入模型

model.add(Flatten())

每一项100个数字,一个数字转化为32维向量,所以转换为平坦层的神经元有3200个

(2)将隐藏层加入模型

model.add(Dense(units=256,   #共256个神经元

                activation='relu' ))    #激活函数为relu

model.add(Dropout(0.2))   #  #加入dropout避免过度拟合

(3)将输出层加入模型

model.add(Dense(units=1,    #输出层只有一个神经元

                activation='sigmoid' ))  #定义激活函数sigmoid

(4)查看模型摘要


IMDB网络电影数据集与自然语言处理(二)_第1张图片

1.2 训练模型

(1)定义训练方法

model.compile(loss='binary_crossentropy',  #损失函数

              optimizer='adam',  #定义优化器

              metrics=['accuracy']) #定义评估方式

(2)开始训练

train_history =model.fit(x_train, y_train,batch_size=100, #每批次100项

                        epochs=10,verbose=2,  #训练周期为10,显示训练过程

                        validation_split=0.2)  #训练集比例为80%(20000)训练,20%验证(25000*0.2=5000)


IMDB网络电影数据集与自然语言处理(二)_第2张图片

以上执行界面可知,共执行了10个训练周期,可以发现误差越来越小,准确率越来越高。

准确率:


IMDB网络电影数据集与自然语言处理(二)_第3张图片

损失函数:

IMDB网络电影数据集与自然语言处理(二)_第4张图片

1.3 评估模型准确率

使用test测试

scores = model.evaluate(x_test, y_test, verbose=1)

scores[1]


IMDB网络电影数据集与自然语言处理(二)_第5张图片

1.4 进行预测

(1)执行预测

predict=model.predict_classes(x_test)

(2)查看预测结果


IMDB网络电影数据集与自然语言处理(二)_第6张图片

(3)使用一维数组查看预测结果

predict_classes=predict.reshape(-1)

predict_classes[:10]

结果:

1.5 查看测试集数据预测结果

(1)创建display_test_Sentiment函数

SentimentDict={1:'正面的',0:'负面的'}

def display_test_Sentiment(i):

    print(test_text[i])

    print('标签label:',SentimentDict[y_test[i]],

          '预测结果:',SentimentDict[predict_classes[i]])

(2)显示预测结果

display_test_Sentiment(2)


IMDB网络电影数据集与自然语言处理(二)_第7张图片


IMDB网络电影数据集与自然语言处理(二)_第8张图片

1.6 使用较大字典提取更多文字

2000改为3800


IMDB网络电影数据集与自然语言处理(二)_第9张图片
IMDB网络电影数据集与自然语言处理(二)_第10张图片


2. RNN

使用simpleRNN建立16个神经元的RNN层

from keras.models import Sequential

from keras.layers.core import Dense, Dropout, Activation

from keras.layers.embeddings import Embedding

from keras.layers.recurrent import SimpleRNN

model = Sequential()

model.add(Embedding(output_dim=32,

                    input_dim=3800,

                    input_length=380))

model.add(Dropout(0.35))

model.add(SimpleRNN(units=16))

model.add(Dense(units=256,activation='relu' ))

model.add(Dropout(0.35))

model.add(Dense(units=1,activation='sigmoid' ))

model.summary()


IMDB网络电影数据集与自然语言处理(二)_第11张图片


3. LSTM

from keras.models import Sequential

from keras.layers.core import Dense, Dropout, Activation,Flatten

from keras.layers.embeddings import Embedding

from keras.layers.recurrent import LSTM



IMDB网络电影数据集与自然语言处理(二)_第12张图片

你可能感兴趣的:(IMDB网络电影数据集与自然语言处理(二))