RNN LSTM 循环神经网络 (分类例子)
设置 RNN 的参数
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
tf.set_random_seed(1) # set random seed
# 导入数据
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
# hyperparameters
lr = 0.001 # learning rate
training_iters = 100000 # train step 上限
batch_size = 128
n_inputs = 28 # MNIST data input (img shape: 28*28)
n_steps = 28 # time steps
n_hidden_units = 128 # neurons in hidden layer
n_classes = 10 # MNIST classes (0-9 digits)# x y placeholder
x = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
y = tf.placeholder(tf.float32, [None, n_classes])
# 对 weights biases 初始值的定义
weights = {
# shape (28, 128)
'in': tf.Variable(tf.random_normal([n_inputs, n_hidden_units])),
# shape (128, 10)
'out': tf.Variable(tf.random_normal([n_hidden_units, n_classes]))
}
biases = {
# shape (128, )
'in': tf.Variable(tf.constant(0.1, shape=[n_hidden_units, ])),
# shape (10, )
'out': tf.Variable(tf.constant(0.1, shape=[n_classes, ]))
}定义 RNN 的主体结构
这个 RNN 总共有 3 个组成部分 ( input_layer, cell, output_layer).
首先定义 input_layer:
cell 的计算:
state_is_tuple=True 将在之后的版本中变为默认.
对于 lstm 来说, state可被分为(c_state, h_state).
使用tf.nn.dynamic_rnn(cell, inputs), 要确定 inputs 的格式.
tf.nn.dynamic_rnn 中的 time_major 参数会针对不同 inputs 格式有不同的值.
如果 inputs 为 (batches, steps, inputs) ==> time_major=False
如果 inputs 为 (steps, batches, inputs) ==> time_major=True
output_layer 和 return 的值:
方式一: 直接调用final_state 中的 h_state (final_state[1]) 来进行运算:
方式一: 调用最后一个 outputs (在这个例子中,和上面的final_state[1]是一样的):
输出 result:
计算 cost 和 train_op:
训练 RNN
Last updated
Was this helpful?