多层感知机、循环神经网络、卷积神经网络、循环神经网络、时间序列预测二元分类

在这里插入图片描述

#多层感知器神经网络模型
# 0. 调用要使用的包
from keras.datasets import imdb
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding
from keras.layers import Flatten
max_features = 25000
text_max_words = 200
# 1. 生成数据集
# 调用训练集和测试集
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
# 分离训练集和验证集
x_val = x_train[20000:]
y_val = y_train[20000:]
x_train = x_train[:20000]
y_train = y_train[:20000]

# 数据集预处理:统一句子长度
x_train = sequence.pad_sequences(x_train, maxlen=text_max_words)
x_val = sequence.pad_sequences(x_val, maxlen=text_max_words)
x_test = sequence.pad_sequences(x_test, maxlen=text_max_words)

from keras import backend as K #转换为张量
x_train  = K.cast_to_floatx(x_train)
y_train = K.cast_to_floatx(y_train)

x_train = x_train.astype("float64")
y_train = y_train.astype("float64")
x_val = x_val.astype("float64")
y_val = y_val.astype("float64")

# 2. 搭建模型
model = Sequential()
model.add(Embedding(max_features, 128, input_length=text_max_words))     #128代表用128维的语义几何空间表现单词   5、6意思相近,词义不同
model.add(Flatten())        #展开成一维数据
model.add(Dense(256, activation='relu'))    
model.add(Dense(1, activation='sigmoid'))
# 3. 设置模型训练过程
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 4. 训练模型
hist = model.fit(x_train, y_train, epochs=40, batch_size=64, validation_data=(x_val, y_val))

# 5. 查看训练过程
%matplotlib inline
import matplotlib.pyplot as plt
fig, loss_ax = plt.subplots()
acc_ax = loss_ax.twinx()
loss_ax.plot(hist.history['loss'], 'b', label='train loss')
loss_ax.plot(hist.history['val_loss'], 'r', label='val loss')
loss_ax.set_ylim([-0.2, 1.5])
acc_ax.plot(hist.history['accuracy'], 'black', label='train acc')
acc_ax.plot(hist.history['val_accuracy'], 'g', label='val acc')
acc_ax.set_ylim([-0.2, 1.5])
loss_ax.set_xlabel('epoch')
loss_ax.set_ylabel('loss')
acc_ax.set_ylabel('accuracy')
loss_ax.legend(loc='upper left')
acc_ax.legend(loc='upper right')
plt.show()
# 6. 评价模型
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=64)
print('## evaluation loss and_metrics ##')
print(loss_and_metrics)


#循环神经网络模型
model = Sequential()
model.add(Embedding(max_features, 128))
model.add(LSTM(128))        #句子长度为200 ,所以想像为由200个LSTM模块连接
model.add(Dense(1, activation='sigmoid'))


#卷积神经网络
model = Sequential()
model.add(Embedding(max_features, 128, input_length=text_max_words))
model.add(Dropout(0.2))
model.add(Conv1D(256, 3, padding='valid', activation='relu', strides=1))
#Conv1D卷积层解析句子,可以很好的抓去区域特征,不受单词位置的影响,
#使用卷积层处理句子时,无论句子位于开头还是结尾,都不会有遗漏,可以根据前后文章的脉络抓取特征。
#GlobalMaxPooling1D从卷积层处理过的句子特定向量中选取最大向量值并返回,突出文中主要特征,并选取最突出特征
model.add(GlobalMaxPooling1D())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))

# 循环卷积神经网络
model = Sequential()
model.add(Embedding(max_features, 128, input_length=text_max_words))
model.add(Dropout(0.2))
model.add(Conv1D(256,3, padding='valid',activation='relu',strides=1)) #200个单词通过卷积过后 生成198个大小为256个特征向量
model.add(MaxPooling1D(pool_size=4))  
#卷积层中输出的特征向量通过最大池化层减少为4分之1 ,从198个中选49个,最大池化层不是减少特征的长度 而是减少特征的数量  
model.add(LSTM(128))    #LSTM层是时间步数为49 ,输入维度是256
model.add(Dense(1, activation='sigmoid'))


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值