tensorflow学习笔记(八):LSTM手写体(MNIST)识别



一、LSTM简介

LSTM是一种特殊的RNN,很好的解决了RNN中梯度消失的问题。LSTM的结构如下:
在这里插入图片描述
在LSTM中,有遗忘门、输入门、和输出门。LSTM在三维空间的结构如下:
在这里插入图片描述
详细的理论知识参见:循环神经网络RNN详细推导LSTM(长短时间记忆模型)的详细推导

二、主要函数

1、参数设置的理解

这里主要指输入维度,输出维度、时间步长等参数的设置,如下:

#输入图片是28*28
n_inputs=28 #输入一行,一行有28个数据
max_time=28 #一共有28行
lstm_size=100 #隐藏层单元
n_classes=10 #10个分类
batch_size=50 #每个样本50个批次
  • batch_size:这个参数其实和其他神经网络的batch_size意义相同,都指一次性输入到神经网络中的样本数。这里batch_size=50,含义是一次性将50个图像输入到LSTM中进行训练,完成一次误差反向传播和参数更新。
  • n_steps:实际上指的是构造的LSTM总共有多少个时间上的输入。在这里取n_step = 28,指的是先后依次输入28次,一次输入的个数为batch_size * n_input。在MNIST数据集中,一幅图片表示为28*28的矩阵,因此如果一次输入1行,那么要先后依次输入28行才能将一个图片的信息完全输入。那么同时input_dim(在此处为n_inputs)的含义也很清楚了,就是一次输入的数据维数,在这里就是1行的数据个数。因此,输入端的操作是,在起始0时刻输入50幅图片的第1行,1时刻输入50幅图片的第2行。以此类推直到第28时刻输入最后1行。
  • n_hidden:这个参数表示的是用于记忆和储存过去状态的节点个数。即使用n_hidden个节点表示隐含层状态。
  • n_classes:这个参数的含义是输出结果维数。在MNIST数据集中,由于做的是0~9的分类,所以输出维度自然是10。

2、张量维度的改变tf.reshape()

用于改变张量的维度,在卷积池化完成后,改变张量的维度用于全连接,定义如下:

tf.reshape(tensor, shape, name=None)

参数

  • tensor:输入的张量,即需要改变维度的张量;
  • shape:需要的形状。

返回值:返回一个新的,大小为shape的张量。

程序示例:

import tensorflow as tf

x=[[[1,2]],[[7,8]],[[4,5]],[[6,9]]]
y=tf.reshape(x,[-1,4])  #-1:表示第一维信息由系统自己确定,这里是2

with tf.Session() as sess:
    print((sess.run(y)))

#输出:
    [[1 2 7 8]
     [4 5 6 9]]

3、tf.contrib.rnn.BasicLSTMCell()

该函数是基础的LSTM循环网络单元(即:block)。将forget_bias(默认值:1)添加到忘记门的偏差(biases)中以便在训练开始时减少以往的比例(scale)。该神经元不允许单元裁剪(cell clipping),也不使用peep-hole连接,它是一个基本的LSTM神经元。想要更高级的模型可以使用:tf.nn.rnn_cell.LSTMCell。tf.contrib.rnn.BasicLSTMCell()函数定义如下:

##########当使用函数缺省参数时,函数的默认参数如下:
cell = tf.contrib.rnn.BasicLSTMCell(num_units, forget_bias=1.0, state_is_tuple=True,
                                   activation=None, reuse=None,name=None,dtype=None)  

tf.nn.rnn_cell.LSTMCell()函数定义

tf.nn.rnn_cell.BasicLSTMCell(num_units, forget_bias=1.0, state_is_tuple=True,
                                   act
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值