Tensorflow中关于ConvLSTM的代码理解
1、首先,通过下图理解Convlstm识别手写数字的流程:
输入层:28*28大小的图片
将其每一行展开,形成一个1行784列的序列,符合RNN的输入模式。每一行作为一个RNN单元的输入,形成了图中28个RNN单元的计算模型。
2、最重要的是理解代码
_X: 表示的是一个batch(例如batch=5)的输入数据,此时_X是5*28*28,五张手写数字图片
对_X进行transpose操作,维度顺序更改的操作,由5*28*28变为28*5*28
对_X进行reshape操作,变为[5*28,28]
对28个隐层的数据进行计算并输出为_H(28个单元的隐藏层全部计算完成)
计算完成后,需要对_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)