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])
  • 1
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LSTM(Long Short-Term Memory)是一种循环神经网络(RNN)的变体,它在处理序列数据时具有较强的记忆能力。LSTM模型可以用于预测CPI(Consumer Price Index,消费者价格指数)。 LSTM模型通过学习历史CPI数据的模式和趋势,可以预测未来的CPI值。下面是使用LSTM模型预测CPI的一般步骤: 1. 数据准备:收集历史CPI数据,并将其分为训练集和测试集。通常,可以使用前一段时间的CPI数据作为训练集,然后使用后续时间段的CPI数据进行测试。 2. 数据预处理:对CPI数据进行标准化或归一化处理,以便在训练过程中更好地处理数据。 3. 构建LSTM模型:使用Python中的深度学习框架(如TensorFlow或PyTorch)构建LSTM模型LSTM模型由多个LSTM层组成,每个层都有一定数量的隐藏单元。 4. 模型训练:使用训练集对LSTM模型进行训练。在训练过程中,模型将学习历史CPI数据的模式和趋势。 5. 模型评估:使用测试集评估训练好的LSTM模型的性能。可以使用各种指标(如均方根误差、平均绝对误差等)来评估模型的预测准确度。 6. 模型预测:使用已训练的LSTM模型对未来的CPI进行预测。将历史CPI数据输入到模型中,模型将输出预测的CPI值。 需要注意的是,LSTM模型的预测结果可能受到多种因素的影响,如历史CPI数据的质量、模型的参数设置等。因此,在使用LSTM模型进行CPI预测时,需要谨慎选择和处理数据,以及调整模型参数,以提高预测准确度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值