RNN LSTM 循环神经网络 (分类例子) - Tensorflow | 莫烦Python
切换视频源:

RNN LSTM 循环神经网络 (分类例子)

作者: 莫烦 编辑: 莫烦 2016-11-03

学习资料:

设置 RNN 的参数

这次我们会使用 RNN 来进行分类的训练 (Classification). 会继续使用到手写数字 MNIST 数据集. 让 RNN 从每张图片的第一行像素读到最后一行, 然后再进行分类判断. 接下来我们导入 MNIST 数据并确定 RNN 的各种参数(hyper-parameters):

接着定义 x, yplaceholderweights, biases 的初始状况.

定义 RNN 的主体结构

接着开始定义 RNN 主体结构, 这个 RNN 总共有 3 个组成部分 ( input_layer, cell, output_layer). 首先我们先定义 input_layer:

接着是 cell 中的计算, 有两种途径:

  1. 使用 tf.nn.rnn(cell, inputs) (不推荐原因). 但是如果使用这种方法, 可以参考原因;
  2. 使用 tf.nn.dynamic_rnn(cell, inputs) (推荐). 这次的练习将使用这种方式.

因 Tensorflow 版本升级原因, state_is_tuple=True 将在之后的版本中变为默认. 对于 lstm 来说, state可被分为(c_state, h_state).

如果使用tf.nn.dynamic_rnn(cell, inputs), 我们要确定 inputs 的格式. tf.nn.dynamic_rnn 中的 time_major 参数会针对不同 inputs 格式有不同的值.

  1. 如果 inputs 为 (batches, steps, inputs) ==> time_major=False;
  2. 如果 inputs 为 (steps, batches, inputs) ==> time_major=True;

最后是 output_layerreturn 的值. 因为这个例子的特殊性, 有两种方法可以求得 results.

方式一: 直接调用final_state 中的 h_state (final_state[1]) 来进行运算:

方式二: 调用最后一个 outputs (在这个例子中,和上面的final_state[1]是一样的):

def RNN() 的最后输出 result

定义好了 RNN 主体结构后, 我们就可以来计算 costtrain_op:

训练 RNN

训练时, 不断输出 accuracy, 观看结果:

最终 accuracy 的结果如下:

0.1875
0.65625
0.726562
0.757812
0.820312
0.796875
0.859375
0.921875
0.921875
0.898438
0.828125
0.890625
0.9375
0.921875
0.9375
0.929688
0.953125
....

降低知识传递的门槛

莫烦很常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 通过 【赞助莫烦】 能让我感到认同,我也更有理由坚持下去。

    Tensorflow