Tensorflow中关于ConvLSTM的代码理解

1、首先,通过下图理解Convlstm识别手写数字的流程:

Tensorflow中关于ConvLSTM的代码理解

输入层:28*28大小的图片

将其每一行展开,形成一个1行784列的序列,符合RNN的输入模式。每一行作为一个RNN单元的输入,形成了图中28个RNN单元的计算模型。

 

2、最重要的是理解代码

Tensorflow中关于ConvLSTM的代码理解

_X: 表示的是一个batch(例如batch=5)的输入数据,此时_X是5*28*28,五张手写数字图片

对_X进行transpose操作,维度顺序更改的操作,由5*28*28变为28*5*28

对_X进行reshape操作,变为[5*28,28]

对28个隐层的数据进行计算并输出为_H(28个单元的隐藏层全部计算完成)

Tensorflow中关于ConvLSTM的代码理解Tensorflow中关于ConvLSTM的代码理解

计算完成后,需要对_X进行切片,分别输入RNN网络当中,_Hsplit是切片后的结果28份5*28的切片

 

切片完成后就可以进行RNN单元的计算了,

定义RNN单元,LSTM_Cell= tf.nn.rnn.BasicLSTMCell(dimHidden=128,forgetbias=1)

对切片进行计算,获得每一个单元的输出(_LSTM_o)以及整个网络的输出(_LSTM_s)

_LSTM_o, _LSTM_s = tf.nn.rnn(LSTM_Cell, _Hsplit)