"""
LSTM-长短期记忆网络
Datetime:2020-9-8
purpose:预测20世纪70年代中期波士顿郊区房屋价格的中位数。使用boston_housing数据集
Data:404个训练样本和102个测试样本,包含地区的犯罪率、当地房产税率等13个特征量
Author:kris.wang
"""
from keras.models import Sequential
from keras.layers import Dense,Dropout,Activation
from keras.layers import Embedding
from keras.layers import SimpleRNN,LSTM,GRU
from keras.optimizers import SGD,Nadam,Adam,RMSprop
from keras.callbacks import TensorBoard
from keras.utils import np_utils
import scipy.io as si
import os
import numpy as np
import matplotlib.pyplot as plt
#1,导入数据
# path=os.getcwd().replace('smallprojectsummary\LSTMproject','')
data=si.loadmat('sp1s_aa_1000Hz.mat')
# y_test=np.loadtxt(path+r'BCI_II_data\')
#预处理数据
#316个样本,28个电极通道,500毫秒数据。
data_train=data['x_train'].reshape((316,500,28))
data_train/=200
data_train=data_train.astype('float32')
data_test=data['x_test'].reshape((100,500,28))
data_test/=200
data_test=data_test.astype('float32')
data_label=data['y_train'].reshape((316,1))
tmp_train = []
for i in data_label:
if i == 1:
tmp_train.append(1)
elif i == 0:
tmp_train.append(-1)
data_label = np.array(tmp_train)
data_label = np_utils.to_categorical(data_label, 2)
data_label = data_label.astype('float32')
# print(data_label.shape)
#训练模型
def build_model():
model=Sequential()
model.add(LSTM(10,return_sequences=True,input_shape=(500,28)))
model.add(LSTM(10,return_sequences=True))
model.add(LSTM(5))
model.add(Dense(2,activation='softmax'))
model.summary()
model.compile(
optimizer=Nadam(lr=0.001),
loss='categorical_crossentropy',
metrics=['acc']
)
# model.summary()#显示模型结构。
return model
# score,acc=model.evaluate()
# k折交叉验证
k=4
num_samples=len(data_train)//k
all_acc_histories=[]
for i in range(k):
print('processing fold #',i)
#准备验证数据
val_data=data_train[i*num_samples:(i+1)*num_samples]
val_targets=data_label[i*num_samples:(i+1)*num_samples]
#准备训练数据
partial_train_data=np.concatenate(
[data_train[:i*num_samples],
data_train[(i+1)*num_samples:]],
axis=0
)
partial_train_targets=np.concatenate(
[data_label[:i*num_samples],
data_label[(i+1)*num_samples:]],
axis=0
)
#构建模型
model=build_model()
history=model.fit(partial_train_data,partial_train_targets,validation_data=(val_data,val_targets),epochs=80,batch_size=20)#verbose静默模式
val_los,val_acc=model.evaluate(val_data,val_targets,verbose=0)#给出损失值和目标值
#记录每个轮次中所有折mae
acc_history=history.history['val_acc']
all_acc_histories.append(acc_history)#验证分数,即mae
#计算所有轮次中的K折验证分数平均值
average_acc_history=[np.mean([x[i] for x in all_acc_histories]) for i in range(80)]
#绘制验证分数
def smooth_curve(points,factor=0.9):
smoothed_points=[]
for point in points:
if smoothed_points:
previous=smoothed_points[-1]
smoothed_points.append(previous*factor+point*(1-factor))
else:
smoothed_points.append(point)
return smoothed_points
if __name__=="__main__":
smooth_mae_history = smooth_curve(average_acc_history[10:]) # 因为前10个数据点的取值范围和其它点不同,所以删除它们。
plt.plot(range(1, len(smooth_mae_history) + 1), smooth_mae_history)
plt.xlabel('Epochs')
plt.ylabel('Validation MAE')
plt.show() # -从图中能明显发现模型在80轮次后出现了过拟合。
朔漠君
- 粉丝: 184
- 资源: 14
最新资源
- 白色简洁的汽车零件制造商企业网站模板下载.zip
- 白色简洁的旅行运动装备企业网站模板下载.zip
- 白色简洁的商务信息企业网页模板下载.zip
- 白色简洁的设计整站网站模板下载.zip
- 白色简洁的设计院网页整站网站模板下载.zip
- 白色简洁的文化传媒网页企业模板下载.zip
- 白色简洁的数码相机商城整站网站模板下载.zip
- 白色简洁的摄影杂志网站模板下载.zip
- 白色简洁风的IT科技企业网站模板下载.zip
- 白色简洁的作品展媒体整站网站模板下载.zip
- 白色简洁的艺术展示网页模板下载.zip
- 白色简洁风的个性网站模板下载.rar
- 白色简洁风的博客网站模板下载.zip
- 白色简洁风的个性企业网站模板下载.zip
- 白色简洁风的家居企业网站模板下载.rar
- 白色简洁风的商务网站模板下载.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈