Keras中的LSTM

Keras中创建LSTM模型的步骤 目录写在前面概述环境1、定义网络2、编译网络3、训练网络4、评估网络5、进行预测一个LSTM示例总结 写在前面 本文是对The 5 Step Life-Cycle for Long Short-Term Memory Models in Keras的翻译,新手博主,边学边记,以便后续温习,或者对他人有所帮助 概述 深度学习神经网络在 Python 中很容易使用 Keras 创建和评估,但您必须遵循严格的模型生命周期。 在这篇文章中,您将了解创建、训练和评估Keras中长期记忆(LSTM)循环神经网络的分步生 阅读详情

Keras中的LSTM

96 Manfestain 关注

 0.1 2018.11.11 20:39* 字数 1127 阅读 2152评论 2喜欢 3

最近做一个关于用电负荷预测的项目,想用循环神经网络试一下,具有时间特性的数据预测当然非LSTM莫属了啦,但是感觉自己对LSTM的输入和输出不是很明白,就学习顺便整理一下吧。

此处属于我个人理解,可能有不正确的地方欢迎大家指正。


Cell

说到LSTM当然先来一张cell的图了:

LSTM结构图


图中看起来是三个cell,其实是一个cell在不同时刻上的拼接,也就是说其实是一个cell在不同时刻的状态。我们就以中间那个cell为例进行说明吧。
其中,四个黄色的小矩形就是普通神经网络的隐藏层结构,其中第一、二和四的激活函数是sigmoid,第三个的激活函数是tanh。t时刻的输入X和t-1时刻的输出h(t-1)进行拼接,然后输入cell中,其实可以这样理解,我们的输入X(t)分别feed进了四个小黄矩形中,每个小黄矩形中进行的运算和正常的神经网络的计算一样(矩阵乘法),有关记忆的部分完全由各种门结构来控制(就是0和1),同时在输入时不仅仅有原始的数据集,同时还加入了上一个数据的输出结果,也就是h(t-1),那么讲来LSTM和正常的神经网络类似,只是在输入和输出上加入了一点东西。cell中可以大体分为两条横线,上面的横线用来控制长时记忆,下面的横线用来控制短时记忆。关于LSTM我通过参考画了一张图,如下:

image.png

 


输入和输出

  1. 输入
    下面我们就来说说输入问题,在Keras中,LSTM的输入shape=(samples, time_steps, input_dim),其中samples表示样本数量,time_steps表示时间步长,input_dim表示每一个时间步上的维度。我举一个例子吧,现在有一个数据集有四个属性(A,B, C, D),我们希望的预测标签式D,假设这里的样本数量为N。如果时间步长为1,那么此时的输入shape=(N, 1, 4),具体的数据是这样的[A(t-1), B(t-1), C(t-1), D(t-1)](此处表示一个数据样本),样本标签为[D(t)];如果时间步长为2,那么此时的输入shape=(N, 2, 4),具体的数据是[[A(t-2), B(t-2), C(t-2), D(t-2)], [A(t-1), B(t-1), C(t-1), D(t-1)]](此处仍表示一个样本数据)。

  2. 输出
    关于Keras中LSTM的输出问题,在搭建网络时有两个参数,一个是output_dim表示输出的维度,这个参数其实就是确定了四个小黄矩形中权重矩阵的大小。另一个可选参数return_sequence,这个参数表示LSTM返回的时一个时间序列还是最后一个,也就是说当return_sequence=True时返回的是(samples, time_steps, output_dim)的3D张量,如果return_sequence=Flase时返回的是(samples, output_dim)的2D张量。比如输入shape=(N, 2, 8),同时output_dim=32,当return_sequence=True时返回(N, 2, 32);当return_sequence=False时返回(N, 32),这里表示的时输出序列的最后一个输出。


多层LSTM

使用LSTM搭建多层LSTM网络还是比较方便的,我们只需要使用Sequential()进行堆叠即可。
在进行多层LSTM网络时,需要注意一下几点:

  1. 需要对第一层的LSTM指定input_shape参数。

  2. 将前N-1层LSTM的return_sequence设置为True,保证每一曾都会想下一层传播所有时间步长上的预测,同时保证最后一层的return_sequence为False(如果只需要最后一个输出的话)。

  3. 其实,在第二层时,不用指定input_shape,因为根据上一层的output_dim和当前层的output_dim可以得出当前层中权重矩阵的大小。

def build_model(lstm_layers, dense_layers):
    model = Sequential()

    model.add(LSTM(output_dim=32, 
                   input_shape=(2, 3),
                   activation='relu',
                   return_sequences=True))
    for i in range(lstm_layers - 1):
        model.add(LSTM(output_dim=32 * (i+1),
                       activation='relu',
                       return_sequences=True))

    for i in range(dense_layers - 1):
        model.add(Dense(output_dim=256,
                        activation='relu'))
        model.add(Dropout(0.5))
    model.compile(loss='mae', optimizer='adam', metrics=['accuracy'])
    model.summary()
    return model

参数lstm_layers=5, dense_layers=3,结果如下:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 2, 32)             4608      
_________________________________________________________________
lstm_2 (LSTM)                (None, 2, 32)             8320      
_________________________________________________________________
lstm_3 (LSTM)                (None, 2, 64)             24832     
_________________________________________________________________
lstm_4 (LSTM)                (None, 2, 96)             61824     
_________________________________________________________________
lstm_5 (LSTM)                (None, 2, 128)            115200    
_________________________________________________________________
dense_1 (Dense)              (None, 2, 256)            33024     
_________________________________________________________________
dropout_1 (Dropout)          (None, 2, 256)            0         
_________________________________________________________________
dense_2 (Dense)              (None, 2, 256)            65792     
_________________________________________________________________
dropout_2 (Dropout)          (None, 2, 256)            0         
=================================================================
Total params: 313,600
Trainable params: 313,600
Non-trainable params: 0
_________________________________________________________________

参数量计算

前面提到了LSTM的计算其实和普通神经网络类似,那我们就来推一下参数量,看是否符合我们的预期。

1. 输入的shape=(N, 2, 3)
2. 网络结构:
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    lstm_1 (LSTM)                (None, 2, 4)              128       
    =================================================================
    Total params: 128
    Trainable params: 128
    Non-trainable params: 0
    _________________________________________________________________
3. 输出的shape=(N, 2, 4)
  1. 首先cell的输出为[2, 4],也就是输出的维度为4(其中2表示步长),输入的数据为[2, 3],所以真正输入cell中的数据维度应该是[2, 7],也就是[2, 3+4](因为要拼接t-1时刻的输出和t时刻的输入);
  2. 接下来每个cell中有四个小黄矩形,也就是四次矩阵乘法,又因为输出的维度是4,所以矩阵乘法就是[2, 7]*[7, 4]=[2, 4],所以一个小黄矩形所需的参数为7x4=28,四个也就是28x4=112;
  3. 最后加上每一个小黄矩形后的激活函数的偏置4x4=16。

最终,总共的参数值为112+16=128。和程序打印出来的结果一致。
通过上面的推导我们发现,其实实际的参数量和步长是没有关系的,这一点我也验证了一下,通过改变输入shape=(samples, time_steps, input_dim)中的time_stpes的值,参数量不会发生变化。如下(输入shape=[N, 2, 3],time_steps=10):

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 10, 4)             128       
=================================================================
Total params: 128
Trainable params: 128
Non-trainable params: 0
_________________________________________________________________

文章来源: https://www.jianshu.com/p/3edff278f021

参考

  1. keras:4)LSTM函数详解
  2. LSTM梳理,理解,和keras实现 (一)
  3. LSTM神经网络输入输出究竟是怎样的?
LSTM——基于keras 最近做一个关于用电负荷预测的项目,想用循环神经网络试一下,具有时间特性的数据预测当然非LSTM莫属了啦,但是感觉自己对LSTM的输入和输出不是很明白,就学习顺便整理一下吧。 此处属于我个人理解,可能有不正确的地方欢迎大家指正。 Cell 说到LSTM当然先来一张cell的图了: LSTM结构图 图中看起来是三个cell,其实是一个cell在不同时刻上的拼接,也就是说其实是一个c... 阅读详情

相关推荐

Keras LSTM教程

本文原登载在极客教程的深度学习专栏:http://geek-docs.com/deep-learning/rnn/keras-lstm-tutorial.html 文章目录 1 循环神经网络 2 LSTM网络 3 LSTM字嵌入和隐藏层大小 4 Keras LSTM架构 5 构建Keras LSTM模型 6 创建Keras LSTM数据生成器 7 创建Keras LSTM结构 8 编译并运行Ker...

rongchengluoye的博客 8471

LSTM函数详解(keras)

原文链接:https://www.zhihu.com/question/64470274 https://blog.youkuaiyun.com/jiangpeng59/article/details/77646186 跑试验的间隙,遇到了同样的困惑,看了一圈答案之后,想明白了。再来给大家白话解释一遍。根据Keras 官方文档的函数定义:keras.layers.LSTM(units, activation='tanh', recurrent_activation='sigmoid', ....units: Posit

qq_43703185的博客 1万+

Keras中CNN联合LSTM进行分类

原文地址:http://siligence.ai/article-444-1.html def get_model(): n_classes = 6#要分的类别 inp=Input(shape=(40, 80))#输入data的形状 reshape=Reshape((1,40,80))(inp)#开始建模,这是keras的一种方式,这种方式比较好操作,另外一种神经网络简单,但是不好拓展,推荐这种。...

luodoudoudou的博客 5922

【keras】利用LSTM进行单变量时间序列预测和多变量时间序列预测

        对于较为简单的时间序列预测问题,可以使用Exponential Smoothing和ARIMA等传统模型非常方便地求解。然而,对于复杂的时间序列预测问题,LSTM不失为一种很好的选择。因此,本文旨在探讨如何利用LSTM神经网络求解时间序列预测问题。首先,需要明白时间序列预测问题是如何转换为传统的监督学习问题的,即时间窗方法。有关时间序列预测问题转换为监督学习的过程请移步:Time ...

XYZ 3万+

基于Keras的LSTM进行电力负荷预测

    首先,在之前毫无深度学习基础的情况下,花费了近11小时(包括在火车上读了一小时代码),最终完成本次大作业。    接下来这篇文章将完整叙述一个只有linux基础的菜鸟是如何完成这项大作业任务的。    文章也不再以严谨的科技论文写作格式进行,同时代码将托管在github上,文章同时发布在优快云上,谨以此希望更多的中国学生可以将自己的成果,在不泄密的情况下,敢于分享,让更多人受益,交流,d...

weixin_42489987的博客 3万+

Keras深度学习实战(29)——长短时记忆网络详解与实现

长短时记忆网络 (Long Short Term Memory, LSTM) 解决了循环神经网络 (Recurrent neural networks, RNN) 梯度爆炸/消失的问题,是建立在循环神经网络基础上的一种新型深度学习的时间序列模型。本节中,首先介绍了传统 RNN 模型的局限性,然后详细介绍了 LSTM 的基本原理与各组成部分的计算细节,最后,使用 Keras 实现了 LSTM 模型用以加深对 LSTM 背后运行机制的理解。

盼小辉丶的博客 1万+

springboot -重定向携带数据 RedirectAttributes

springboot -重定向携带数据 RedirectAttributes 当controller层需要重定向到指定页面时,如何携带数据? 传统使用session 使用RedirectAttributes. (利用session原理) 优点: 提供了addFlashAttribute 等方法.确保数据只能被使用一次后删除 RedirectAttributes的使用 public interface RedirectAttributes extends Model { RedirectAt

NeverGiveUp 7804

宏基因组功能注释实战:从CAZyme到VFDB的完整流程(含数据库下载与脚本优化)

本文详细介绍了宏基因组功能注释的完整流程,涵盖CAZyme、eggNOG、CARD和VFDB四大核心数据库的实战应用。从环境配置、数据库下载与预处理到注释流程执行与优化,提供了全面的操作指南和脚本优化建议,帮助研究人员高效完成宏基因组数据分析。特别针对CAZyme注释等关键步骤给出了参数优化方案和常见问题排查方法。

weixin_29289821的博客 295

Keras LSTM序列预测实战:四种模型从单步到双向堆叠

时间序列预测是机器学习中的经典问题,其核心在于利用历史观测值推测未来趋势。LSTM凭借门控机制能有效捕捉长距离依赖,成为序列建模的重要基线。在Keras框架下,通过调整units、return_sequences等参数,可构建单变量单步、多变量单步、多步滚动及双向堆叠等不同复杂度的预测模型。这些模型广泛应用于股票价格、气象数据、设备传感器等场景。理解滑动窗口切分、归一化及过拟合处理等工程细节,是提升预测效果的关键。本文围绕Keras实现,系统拆解四种LSTM序列预测模型的代码与调参经验。

weixin_29061465的博客 129

数字图像处理基础实验(二):直方图均衡化

一、实验内容及原理 1、计算灰度图像的归一化直方图 具体内容:利用 OpenCV 对图像像素进行操作,计算归一化直方图.并在 窗口中以图形的方式显示出来 步骤: (1)初始化一个256大小的数组,存放图像中每级灰度值的像素点的个数 (2)遍历整张图像 (3)归一化数组 2、灰度图像直方图均衡处理 具体内容:通过计算归一化直方图,设计算法实现直方图均衡化处理。 步骤: (1)读取该像素点的灰度值 (...

lyd1995的博客 4525

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 324

keras lstm参数 中_重新调整Keras中LSTM长短期记忆网络的输入数据

你可能很难理解如何为LSTM模型的输入准备序列数据。你可能经常会对如何定义LSTM模型的输入层感到困惑。也可能对如何将数字的1D或2D矩阵序列数据转换为LSTM输入层所需的3D格式存在一些困惑。在本教程中,你将了解如何定义LSTM模型的输入层,以及如何重新调整LSTM模型加载的输入数据。完成本教程后,你将知道:如何定义一个LSTM输入层。如何对一个LSTM模型的一维序列数据进行重新调整,并定义输入...

weixin_39884877的博客 694

从Delphi 7到Delphi 10.4.1的代码迁移:关键挑战与实用解决方案

本文详细探讨了从Delphi 7升级到Delphi 10.4.1进行代码迁移的关键挑战与实用解决方案。核心内容包括应对Unicode字符串处理、64位数据类型变化、VCL/FMX界面框架选择、第三方组件迁移以及数据库层现代化改造(如从BDE迁移至FireDAC)。文章为开发者提供了系统的迁移前准备、核心问题攻克策略及测试落地指南,旨在帮助团队高效、平稳地完成系统现代化升级。

weixin_29250403的博客 531

神经网络学习小记录36——Keras实现LSTM与LSTM参数量详解

神经网络学习小记录36——Keras实现LSTM学习前言什么是LSTM1、LSTM的结构2、LSTM独特的门结构3、LSTM参数量计算a、遗忘门b、输入门c、输出门d、全部参数量在Keras中实现LSTM实现代码 学习前言 我死了我死了我死了! 什么是LSTM 1、LSTM的结构 我们可以看出,在n时刻,LSTM的输入有三个: 当前时刻网络的输入值Xt; 上一时刻LSTM的输出值ht-1; ...

Bubbliiiing的学习小课堂 2万+

python 抖音采集_python爬取抖音视频的实例详解

import requestsimport jsonimport reimport osfrom pprint import pprint as ppimport queueclass DouYin:header = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*...

weixin_35795675的博客 1864

YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

全网最详细的YOLOv5项目源码解读之训练部分train. py。全文近5万字!代码逐行注释,逐段讲解,小白入门必备!

路人贾的博客 3万+

LSTM 在tensorflow.keras中的实现

lstm的weights形式不合直觉的原因及lstm在keras中的两种实现方式

weixin_43842032的博客 1488

基于 STM32 的全自动洗车监控系统设计与实现

本文提出一种基于 STM32F103RCT6 芯片的全自动洗车监控系统方案,通过多传感器融合与智能控制算法,实现车辆检测、洗车流程自动化及状态远程监控。系统集成硬件选型、电路设计、软件流程及通信功能,可广泛应用于智能洗车场景。

weixin_42300449的博客 964

基于Keras构建LSTM

前言: 之前构建LSTM网络是通过Tensorflow,虽然也不错,可是接触到keras后觉得Keras真香!(虽然Tensorflow为默认后端) Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras: 简易和快速的...

fff2zrx的博客 6975

S7-1500 PLC与多台S7-200SMART PLC进行PROFINET通信的快捷方法

S7-1500 PLC与多台S7-200SMART PLC进行PROFINET通信的快捷方法

Robot_PLC_HMI_Automation 5687

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LSTM原理详解及keras代码实现

LSTM原理及实现 RNN LSTM 实现 RNN基本原理 前言 当我们处理与事件发生的时间轴有关系的问题时,比如自然语言处理,文本处理,文字的上下文是有一定的关联性的;时间序列数据,如连续几天的天气状况,当日的天气情况与过去的几天有某些联系;又比如语音识别,机器翻译等。在考虑这些和时间轴相关的问题时,传统的神经网络就无能为力了,因此就有了RNN(recurrent neural network,循环神经网络),了解RNN先了解DNN基本原理。同样这里介绍RNN基本原理,也是为了铺垫我们的重点LSTM网络

weixin_42046792的博客 5796

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Keras + LSTM 做回归demo

学习神经网络 想拿lstm 做回归, 网上找demo 基本三种: sin拟合cos 那个, 比特币价格预测(我用相同的代码和数据没有跑成功, 我太菜了)和keras 的一个例子 我基于keras 那个实现了一个, 这里贴一下我的代码. import numpy as np np.random.seed(1337) from sklearn.model_selection import...

weixin_30443731的博客 3279

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LSTM原理、参数介绍、Keras实现

@创建于:20210316 @修改于:20210316 LSTM原理及Keras中实现:20191207 LSTM原理及Keras中实现:20200714 人人都能看懂的LSTM:20171216 人人都能看懂的GRU:20180102

chenhepg的博客 3502

Keras_LSTM

最近做一个关于用命名实体识别NER的项目,想用循环神经网络试一下,具有时间特性的数据预测当然非LSTM莫属了啦,但是感觉自己对LSTM的输入和输出不是很明白,就学习顺便整理一下吧。 Cell 说到LSTM当然先来一张cell的图了: 图中看起来是三个cell,其实是一个cell在不同时刻上的拼接,也就是说其实是一个cell在不同时刻的状态。我们就以中间那个cell为例进行说明吧。 其中,四个黄色的小矩形就是普通神经网络的隐藏层结构,其中第一、二和四的激活函数是sigmoid,第三个的激活函数是tanh。t

pochy的博客 767

Keras: 怎样使用LSTM

LSTM(10, input_length=shape[1], input_dim=shape[2],return_sequences=True) model.add(LSTM(32, input_shape=(10, 64))) 这里的 input_length, input_dim , input_shape是什么意思?怎样使用LSTM? 通过help(LSTM)查看 class LS...

u011279649的专栏 1186

LSTM 02:使用Keras编写LSTM

本文介绍了使用TensorFlow Keras开发LSTM模型,以进行时间序列预测任务。

全性保真,不以物累形。 1万+
上一篇: 深入浅出--梯度下降法及其实现
下一篇: 基于Keras用LSTM进行时间序列预测(一)
Poo_Chai
博客等级 码龄9年 178粉丝 117原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值