注:本文主要是在http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 这篇文章的基础上理解写成,姑且也可以称作 The understanding of understanding LSTM network. 感谢此篇作者的无私分享和通俗精确的讲解。

一. RNN

说到LSTM,无可避免的首先要提到最简单最原始的RNN。在这一部分,我的目标只是理解“循环神经网络”中的‘循环’二字,不打算扔出任何公式,顺便一提曾经困惑过我的keras中的输入数据格式。

我们经常可以看到有人说,LSTM适合时序序列,变长序列,尤其适合自然语言处理。那么是什么赋予它可以处理变长序列的能力呢? 其实,只要仔细研究上图,相信每个人都能有一个直观的答案。

从图片左边来看,RNN有两个输入,一个是当前t时刻的输入Xt, 另一个是一个看似“本身“的输入。

这样看还不甚明了,再看图片右边: 实际上右图是左图的一个在时间序列上的展开,上一个时刻输出是这一个时刻的输入。值得注意的是,实际上,右图上的所有神经元是同一个神经元,也就是左图,它们共享同样的权值,只不过在每一个时刻接受不同的输入,再把输出给下一个时刻作为输入。这就是存储的过去的信息。

理解到“循环”的含义即达到本章的目的了,公式和细节将在LSTM中详细叙述。

keras中文文档: http://keras-cn.readthedocs.io/en/latest/layers/recurrent_layer/  (中文文档真的做的很赞,除了翻译的内容,还加了额外的内容,例如tensor, batch size的概念帮助DL新手理解)

在所有的RNN中,包括simpleRNN, LSTM, GRU等等,输入输出数据格式如下:

输入是一个三维向量。samples即为数据的条数。难以理解的是timesteps 和input_dim. Input_dim是数据的表示形式的维度,timestep则为总的时间步数。例如这样一个数据,总共100条句子,每个句子20个词,每个词都由一个80维的向量表示。在RNN中,每一个timestep的输入是一个词(当然这不一定,你也可以调成两个词或者其他),从第一张RNN的图来看,t0时刻是第一个时间步,x0则为代表一条句子中第一个词的80维向量,t1是第二个时间步,x1表示句子中第二个词的80维向量。。。所以,输入数据的大小应当是(100, 20, 80)

注:实际中句子长度不会一模一样,但从RNN的工作流程来看,它可以处理变长序列。在kera中,可以首先将句子设为最大长度,不足这个长度的句子补足0,然后在RNN层前加embedding层或者Mask层过滤掉补足的字符。具体在我的博文中

http://www.cnblogs.com/leeshum/p/6089286.html

未完待续。。(搬砖去了)

LSTM梳理,理解,和keras实现 (一)的更多相关文章

  1. Testing - 软件测试知识梳理 - 理解测试

    理解 目的 测试就是要找到关键信息,有关项目和产品的关键决策都是根据这些信息做出. 对产品质量做出总体评估. 找出并报告团队所有可能会对产品价值产生消极影响的问题(但并不意味着能发现所有问题). 重心 ...

  2. Pytorch的LSTM的理解

    class torch.nn.LSTM(*args, **kwargs) 参数列表 input_size:x的特征维度 hidden_size:隐藏层的特征维度 num_layers:lstm隐层的层 ...

  3. 自我学习与理解:keras框架下的深度学习(三)回归问题

    本文主要是使用keras对其有的波士顿房价数据集做一个回归预测,其代码架构与之前一样(都只是使用多层感知机):数据的预处理.搭建网络框架.编译.循环训练以及测试训练的网络模型.其中除了数据预处理与之前 ...

  4. 【Python】keras使用LSTM拟合曲线

    keras生成的网络结构如下图: 代码如下: from sklearn.preprocessing import MinMaxScaler from keras.models import Seque ...

  5. keras实例学习-双向LSTM进行imdb情感分类

    源码:https://github.com/keras-team/keras/blob/master/examples/imdb_bidirectional_lstm.py 及keras中文文档 1. ...

  6. 技能|三次简化一张图:一招理解LSTM/GRU门控机制

    作者 | 张皓 引言 RNN是深度学习中用于处理时序数据的关键技术, 目前已在自然语言处理, 语音识别, 视频识别等领域取得重要突破, 然而梯度消失现象制约着RNN的实际应用.LSTM和GRU是两种目 ...

  7. 【翻译】理解 LSTM 及其图示

    目录 理解 LSTM 及其图示 本文翻译自 Shi Yan 的博文 Understanding LSTM and its diagrams,原文阐释了作者对 Christopher Olah 博文 U ...

  8. 用Keras搭建神经网络 简单模版(五)——RNN LSTM Regressor 循环神经网络

    # -*- coding: utf-8 -*- import numpy as np np.random.seed(1337) import matplotlib.pyplot as plt from ...

  9. Keras:基于Theano和TensorFlow的深度学习库

    catalogue . 引言 . 一些基本概念 . Sequential模型 . 泛型模型 . 常用层 . 卷积层 . 池化层 . 递归层Recurrent . 嵌入层 Embedding 1. 引言 ...

随机推荐

  1. AudioToolKit的简单介绍及教程

    AudioToolKit的简单介绍及教程 (2013-02-21 09:29:18) 转载▼ 标签: 游戏开发 unity3d教程 unity3d unity it 分类: Unity3d之插件篇 原 ...

  2. java - day10 - uptest

    package day03; public class UpTest { public static void main(){ Aoo o = new Aoo(); o.a = 3; o.b = 3; ...

  3. 一个奇怪的EL表达式错误

    下图是在Struts2的action中写的一个方法 JSP页面代码如下: 在页面访问如下路径:http://localhost:8088/maven_ssh/cust_getCustList 目前推测 ...

  4. CF 482A(Diverse Permutation-相邻距离不同数为k的1~n全排列构造)

    A. Diverse Permutation time limit per test 1 second memory limit per test 256 megabytes input standa ...

  5. 简单介绍一下vue2.0

    Vue Vue是用于构建用户界面的渐进框架.作者尤雨熙特别强调它与其他的框架不同,Vue是渐进式的框架,可以逐步采用,不必一下就通过框架去重构项目. 另外Vue的核心库只专注于视图层,这样就更容易与其 ...

  6. 解决android studio引用远程仓库下载慢(转)

    解决android studio引用远程仓库下载慢(JCenter下载慢) 第一种方法 使用开源中国的maven库 阿里云的(速度飞快):http://maven.aliyun.com/nexus/c ...

  7. day7笔记

    一.上节回顾 字典:dic = {'name':'alex'} 1,增 dic['k'] = 'v' 有键值对,则覆盖 setdefault 有键值对,不添加 dic.setdefault('k1', ...

  8. Scrapy爬虫笔记

    Scrapy是一个优秀的Python爬虫框架,可以很方便的爬取web站点的信息供我们分析和挖掘,在这记录下最近使用的一些心得. 1.安装 通过pip或者easy_install安装: 1 sudo p ...

  9. 10道mysql查询语句面试题

    1.https://www.yanxurui.cc/posts/mysql/10-sql-interview-questions/ 2.http://mm.fancymore.com/reading/ ...

  10. 【Python】Python获取命令行參数

    有时候须要用同一个Python程序在不同的时间来处理不同的文件,此时假设老是要到Python程序中去改动输入.输出文件名称.就太麻烦了. 而通过Python获取命令行參数就方便多了.以下是我写得一个小 ...