lstm

RNN识别mnist数据集

匿名 (未验证) 提交于 2019-12-03 00:29:01
用tensorflow跑RNN实现手写体的识别,下面上两个RNN的结构图 import tensorflow as tf from tensorflow.contrib import rnn import input_data import numpy as np import matplotlib.pyplot as plt print ("Packages imported") mnist = input_data.read_data_sets("data/", one_hot=True) trainimgs, trainlabels, testimgs, testlabels \ = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels ntrain, ntest, dim, nclasses \ = trainimgs.shape[0], testimgs.shape[0], trainimgs.shape[1], trainlabels.shape[1] print ("MNIST loaded") diminput = 28 dimhidden = 128 dimoutput = nclasses nsteps = 28 weights = { 'hidden': tf

LSTM调参感悟

匿名 (未验证) 提交于 2019-12-03 00:27:02
train -= np.mean(train, axis = 0) # zero-center train /= np.std(train, axis = 0) # normalize test -= np.mean(test,axis=0) test /= np.std(test,axis=0) def init_weight(self): for name, param in self.lstm.named_parameters(): if 'bias' in name: nn.init.constant(param, 0.0) print('\nbias init done') elif 'weight' in name: nn.init.orthogonal(param) print('\nweight init done') 5.learning_rate一般取0.001 文章来源: LSTM调参感悟

Keras 笔记之Mask层

匿名 (未验证) 提交于 2019-12-03 00:25:02
keras 的Mask层 先看下官方文档的解释 Masking层 keras.layers.core.Masking(mask_value=0.0) 使用给定的值对输入的序列信号进行“屏蔽”,用以定位需要跳过的时间步 对于输入张量的时间步,即输入张量的第1维度(维度从0开始算,见例子),如果输入张量在该时间步上都等于mask_value,则该时间步将在模型接下来的所有层(只要支持masking)被跳过(屏蔽)。 如果模型接下来的一些层不支持masking,却接受到masking过的数据,则抛出异常。 例子 考虑输入数据x是一个形如(samples,timesteps,features)的张量,现将其送入LSTM层。因为你缺少时间步为3和5的信号,所以你希望将其掩盖。这时候应该: 赋值x[:,3,:] = 0.,x[:,5,:] = 0. 在LSTM层之前插入mask_value=0.的Masking层 model = Sequential() model. add (Masking(mask_value= 0. , input_shape=(timesteps, features))) model. add (LSTM( 32 )) 在用LSTM等模型处理文本数据时,因为文本是变长的,所以在处理的过程中,要先进行长度的统一。常用的方法为 X_data = sequence.pad

LSTM原理

匿名 (未验证) 提交于 2019-12-03 00:23:01
Tip: RNN结构图 LSTM结构图 ①细胞状态: 细胞状态图 ②遗忘门: h t 1 h t 1 和 x t x t ,输出一个在 0 到 1 之间的数值给每个在细胞状态 C t 1 C t 1 中的数字。1 表示“完全保留”,0 表示“完全舍弃”。 遗忘门结构图和公式 ②输入: i t i t 。另一部分使用了tanh激活函数输出为 C ~ t C ~ t 。 输入结构图和公式 ③细胞状态更新: C t 1 C t 1 和遗忘门 f t f t 相乘,丢弃一些需要丢弃的信息。然后把 C ~ t C ~ t 和 i t i t 相乘,选出新的信息。最后把这2个结果相加就是新的细胞状态。 细胞状态更新图和公式 ④输出: o t o t 。另一部分使用了tanh激活函数激活刚才求得的细胞状态 C t C t 。最后将它们相乘,就是隐藏层的输出 h t h t 了。 输出结构图和公式 ①RNN为什么不用Relu解决长期依赖问题: 知乎上的一个答案 ,感觉可以做一个解释。 ②LSTM为什么可以解决长期依赖问题: 文章来源: LSTM原理

Convolutional_LSTM论文阅读

匿名 (未验证) 提交于 2019-12-03 00:22:01
原文链接 Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting 论文 代码 代码torch 20160629-Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting 这是其他人对该篇论文的简要解读,思路较为清除。 作者Xingjian Shi (施行健) VALSE20160323-Panel-WanfGangNTU_ShiXingjianHKUST_ShiBaoguangHUST.mp4 施行健在VALSE上的演讲内容 Convolutional LSTM keras对Conv LSTM相关的讨论 conv_lstm.py keras上对Conv LSTM相关实现例子 Convolutional-LSTM-in-Tensorflow 其中提供了ConvLSTM网络的实现结构,同时包括了改进的ConvLSTM网络结构 lstms.py 提供了convlstm的相关代码 Convolution_LSTM_pytorch 使用pytorch实现的卷积lstm网络 经典LSTM网络结构 经典LSTM的公式 预测云图的Conv LSTM结构 Conv

RNN&LSTM 简介

匿名 (未验证) 提交于 2019-12-03 00:22:01
每次网络的输出只依赖当前的输入, 没有考虑不同时刻输入的相互影响 输入和输出的维度都是固定的, 没有考虑到序列结构数据长度的不固定性 循环神经网络(Recurrent Neural Network,RNN)是一类专门用于处理 时序 数据样本的神经网络,它的每一层不仅输出给下一层,同时还输出一个 隐状态 ,给当前层在处理下一个样本时使用。就像卷积神经网络可以很容易地扩展到具有很大宽度和高度的图像,而且一些卷积神经网络还可以处理不同尺寸的图像,循环神经网络可以扩展到 更长的序列数据 ,而且大多数的循环神经网络可以 处理序列长度不同的数据(for 循环,变量长度可变) 。它可以看作是带自循环反馈的 全连接神经网络 。其网络结构如下图所示。 其中 x x 是输入序列(长度为 T T ), h h 是隐藏层序列, o o 是输出序列, L L 是总体损失, y y 是目标标签序列, U U 是 输入层到隐藏层 的参数矩阵, W W 是 隐藏层到隐藏层 的自循环参数矩阵, V V 是 隐藏层到输出层 的参数矩阵。值得注意的是:图中输入节点数(不止一个)、隐藏节点数、输出节点数都是用一个小圆圈表示的,它们之前是 全连接 的,且在隐藏层之间加了一个 自循环反馈(通过权重共享) ,这也是它能够处理不同序列长度数据的原因。其具体计算流程如下: 前向传播 公式如下所示,其中,输入层到隐藏层使用

LSTM原理

匿名 (未验证) 提交于 2019-12-03 00:22:01
Tip: RNN结构图 LSTM结构图 ①细胞状态: 细胞状态图 ②遗忘门: h t 1 h t 1 和 x t x t ,输出一个在 0 到 1 之间的数值给每个在细胞状态 C t 1 C t 1 中的数字。1 表示“完全保留”,0 表示“完全舍弃”。 遗忘门结构图和公式 ②输入: i t i t 。另一部分使用了tanh激活函数输出为 C ~ t C ~ t 。 输入结构图和公式 ③细胞状态更新: C t 1 C t 1 和遗忘门 f t f t 相乘,丢弃一些需要丢弃的信息。然后把 C ~ t C ~ t 和 i t i t 相乘,选出新的信息。最后把这2个结果相加就是新的细胞状态。 细胞状态更新图和公式 ④输出: o t o t 。另一部分使用了tanh激活函数激活刚才求得的细胞状态 C t C t 。最后将它们相乘,就是隐藏层的输出 h t h t 了。 输出结构图和公式 ①RNN为什么不用Relu解决长期依赖问题: 知乎上的一个答案 ,感觉可以做一个解释。 ②LSTM为什么可以解决长期依赖问题: 文章来源: LSTM原理

对于ConvLSTM的理解

匿名 (未验证) 提交于 2019-12-03 00:22:01
ConvLSTM最早是在《Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting》论文里提出,目的是为了解决降水临近预报。这个问题可以看做是一个时序问题,于是有学者尝试使用LSTM解决这个问题。 但是其使用的事全连接长短期记忆网络(FC-LSTM),没有考虑到空间上的相关性,并且包含了大量冗余的空间数据。 针对上述问题,论文提出一种ConvLSTM结构,不仅可以向LSTM一样建立时序关系,而且可以像CNN一样刻画局部空间特征。并且作者通过实验 证明了ConvLSTM在获取时空关系上比LSTM有更好的效果。 LSTM LSTM的公式如下,其中o表示的是Hadamard乘法,表示的是矩阵对应元素相乘 对于LSTM不太理解的可以参考我前面一篇文章: LSTM原理及实现 ConvLSTM ConvLSTM核心本质还是和LSTM一样,将上一层的输出作下一层的输入。不同的地方在于加上卷积操作之后,为不仅能够得到时序关系,还能够像卷积层一样提取特征,提取空间特征。这样就能够得到时空特征。并且将状态与状态之间的切换也换成了卷积计算。其中”*”表示卷积计算。 需要注意的是这里的 X , C , H , i , f , o X,C,H,i,f,o 都是三维的tensor

深度学习框架Tensorflow学习--RNN实现识别数字

匿名 (未验证) 提交于 2019-12-03 00:22:01
本文用到的公式基本来自Alex的论文, δ L 可以看到输出层和普通的NN是完全一样的,接收隐藏层传入的数据并乘以参数求和,只是每一个计算出来的值都有个时间上标t,表示它是t时刻的那个节点。 而隐藏层的计算就是和NN不同的地方,从之前的拓扑图也看到了,隐藏层会接受来自上一时间隐藏层传入的数据,在公式里也体现出来了:第一个求和是和NN一致的,接收来自输入层的数据,第二个是接收来自上一隐藏层的数据。 参考链接: https://blog.csdn.net/Dark_Scope/article/details/47056361 LSTM(Long-Short Term Memory) 原生的RNN会遇到一个很大的问题,叫做 The vanishing gradient problem for RNNs,也就是后面时间的节点对于前面时间的节点感知力下降,也就是忘事儿,这也是NN在很长一段时间内不得志的原因,网络一深就没法训练了,深度学习那一套东西暂且不表,RNN解决这个问题用到的就叫LSTM,简单来说就是你不是忘事儿吗?我给你拿个小本子把事记上,好记性不如烂笔头嘛,所以LSTM引入一个核心元素就是Cell。 怎么这么复杂……不要怕,下文慢慢帮你缕清楚。理解LSTM最方便的就是结合上面这个图,先简单介绍下里面有几个东西: Cell,就是我们的小本子,有个叫做state的参数东西来记事儿的

LSTM

匿名 (未验证) 提交于 2019-12-03 00:22:01
LSTM层 keras.layers.recurrent.LSTM(units, activation= 'tanh' , recurrent_activation= 'hard_sigmoid' , use_bias= True , kernel_initializer= 'glorot_uniform' , recurrent_initializer= 'orthogonal' , bias_initializer= 'zeros' , unit_forget_bias= True , kernel_regularizer= None , recurrent_regularizer= None , bias_regularizer= None , activity_regularizer= None , kernel_constraint= None , recurrent_constraint= None , bias_constraint= None , dropout= 0.0 , recurrent_dropout= 0.0 ) 核心参数 units input_dim return_sequences input_length :当输入序列的长度固定时,该参数为输入序列的长度。当需要在该层后连接Flatten层,然后又要连接Dense层时,需要指定该参数