LSTM模型

LSTM模型

一:简介:
LSTM模型,是循环神经网络的一种变体,可以很有效的解决简单循环神经网络的梯度爆炸或消失问题。

二:优缺点:
优点:改善了RNN中存在的长期依赖问题;LSTM的表现通常比时间递归神经网络及隐马尔科夫模型(HMM)更好;作为非线性模型,LSTM可作为复杂的非线性单元用于构造更大型深度神经网络。
缺点:一个缺点是RNN的梯度问题在LSTM及其变种里面得到了一定程度的解决,但还是不够。它可以处理100个量级的序列,而对于1000个量级,或者更长的序列则依然会显得很棘手;另一个缺点是每一个LSTM的cell里面都意味着有4个全连接层(MLP),如果LSTM的时间跨度很大,并且网络又很深,这个计算量会很大,很耗时。

三:代码实现

from keras.datasets import mnist
#加载数据
(x_train, y_train), (x_test, y_test) = mnist.load_data()
print('x_train.shape:',x_train.shape)
print('x_test.shape:',x_test.shape)
输出:
('x_train.shape:', (60000, 28, 28))
('x_test.shape:', (10000, 28, 28))
#时间序列数量
n_step = 28
#每次输入的维度
n_input = 28
#分类类别数
n_classes = 10
#将数据转为28*28的数据(n_samples,height,width)
x_train = x_train.reshape(-1, n_step, n_input)
x_test = x_test.reshape(-1, n_step, n_input)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
#标准化数据,因为像素值在0-255之间,所以除以255后数值在0-1之间
x_train /= 255
x_test /= 255
#y_train,y_test 进行 one-hot-encoding,label为0-9的数字,所以一共10类
y_train = keras.utils.to_categorical(y_train, n_classes)
y_test = keras.utils.to_categorical(y_test, n_classes)
#时间序列数量
n_step = 28
#每次输入的维度
n_input = 28
#分类类别数
n_classes = 10
#将数据转为28*28的数据(n_samples,height,width)
x_train = x_train.reshape(-1, n_step, n_input)
x_test = x_test.reshape(-1, n_step, n_input)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
#标准化数据,因为像素值在0-255之间,所以除以255后数值在0-1之间
x_train /= 255
x_test /= 255
#y_train,y_test 进行 one-hot-encoding,label为0-9的数字,所以一共10类
y_train = keras.utils.to_categorical(y_train, n_classes)
y_test = keras.utils.to_categorical(y_test, n_classes)
from keras import Sequential
from keras.layers import LSTM,Dense, Activation
from keras import optimizers
#使用Sequential,简单搭建lstm模型
model = Sequential()
#这个网络中,我们采用LSTM+Dense 层+激活层,优化函数采用Adam,
#损失函数采用交叉熵,评估采用正确率。
#学习率
learning_rate = 0.001
#每次处理的数量
batch_size = 28
#循环次数
epochs = 20
#神经元的数量
n_lstm_out = 128
#LSTM层
model.add(LSTM(
        units = n_lstm_out,
        input_shape = (n_step, n_input)))
#全连接层          
model.add(Dense(units = n_classes))
#激活层
model.add(Activation('softmax'))
#查看各层的基本信息
model.summary()
# 编译
model.compile(
    optimizer = optimizers.Adam(lr = learning_rate),
    loss = 'categorical_crossentropy',
    metrics = ['accuracy'])
#训练
model.fit(x_train, y_train, 
          epochs = epochs, 
          batch_size= batch_size, 
          verbose = 1, 
          validation_data = (x_test,y_test))
#评估
score = model.evaluate(x_test, y_test, 
                       batch_size = batch_size, 
                       verbose = 1)
print('loss:',score[0])
print('acc:',score[1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值