Tensorflow提供了3种循环神经网络:SimpleRNN、LSTM和GRU。这三种方法,SimpleRNN最简单,LSTM和GRU差不多,但是GRU的训练速度稍微占一些优势,毕竟LSTM有3个门(相当于增加了3次矩阵运算),而GRU只有两个门(相当于增加了2次矩阵运算)。
下面程序的训练时间:
循环神经网络 | 训练时长 | 准确度 |
---|---|---|
SimpleRNN | 9.259 | 0.958 |
LSTM | 24.984 | 0.973 |
GRU | 22.259 | 0.980 |
包含有4个神经元的SimpleRNN、LSTM和GRU的权重矩阵如下:
循环神经网络 | 输入值权重 | 循环神经元权重 | 偏置项 | 总计 |
---|---|---|---|---|
SimpleRNN | 32 | 16 | 4 | 52 |
LSTM | 128 | 64 | 16 | 208 |
GRU | 96 | 48 | 24 | 168 |
import tensorflow as tf
import time
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#归一化数据
x_train=x_train/255.
x_test=x_test/255.
# 数据长度 一行有28个像素
input_size = 28
# 序列的长度
time_steps = 28
# 隐藏层block的个数
cell_size = 64
#LSTM
lstm_model = tf.keras.Sequential()
lstm_model.add