<强>函数原型强>
tf.nn.dynamic_rnn ( 细胞, 输入, sequence_length=没有 initial_state=没有 dtype=没有 parallel_iterations=没有 swap_memory=False, time_major=False, 范围=没有 )
实例讲解:
进口tensorflow特遣部队 进口numpy np n_steps=2 n_inputs=3 n_neurons=5 X=tf.placeholder (tf。float32[没有n_steps n_inputs]) basic_cell=tf.contrib.rnn.BasicRNNCell (num_units=n_neurons) seq_length=tf.placeholder (tf.int32[所有])=tf.nn输出,状态。dynamic_rnn (basic_cell X, dtype=tf.float32, sequence_length=seq_length) init=tf.global_variables_initializer () X_batch=np.array ([ 步骤1 0 #一步 [[0 1 2],[9 8 7]],1 #实例 [[3、4、5],[0,0,0]],#实例2(垫零向量) [[6 7 8],[6 5 4]],3 #实例 [[9,0,1],[3、2、1]],4 #实例 ]) seq_length_batch=np。阵列([2,1、2、2]) 与tf.Session税(): init.run () outputs_val states_val=sess.run ( (输出,状态),feed_dict={X: X_batch seq_length: seq_length_batch}) 打印(“outputs_val。形状:“outputs_val。states_val形状。”形状:“states_val.shape) print (“outputs_val outputs_val:“,“states_val:“states_val) >之前 日志信息:
outputs_val。形状:states_val (4、2、5)。形状:(4、5) outputs_val: [[(0.53073734 -0.61281306 - -0.5437517 0.7320347 - -0.6109526) [0.99996936 0.99990636 -0.9867181 0.99726075 -0.99999976]] [[0.9931584 0.5877845 -0.9100412 0.988892 -0.9982337] [0。0. 0. 0. 0。]] [[0.99992317 0.96815354 -0.985101 0.9995968 -0.9999936] [0.99948144 0.9998127 -0.57493806 0.91015154 -0.99998355]] [[0.99999255 0.9998929 0.26732785 0.36024097 -0.99991137] (0.98875254 0.9922327 0.6505734 0.4732064 -0.9957567)]] states_val: [[0.99996936 0.99990636 -0.9867181 0.99726075 -0.99999976] (0.9931584 0.5877845 - -0.9100412 0.988892 - -0.9982337) (0.99948144 0.9998127 - -0.57493806 0.91015154 - -0.99998355) [0.98875254 0.9922327 0.6505734 0.4732064 -0.9957567]]首先输入X是一个[batch_size,一步,input_size]=[4, 2, 3]的张量,注意我们这里调用的是BasicRNNCell,只有一层循环网络,输出是最后一层每个步骤的输出,它的结构是[batch_size,一步,n_neurons]=[4、2、5],州是每一层的最后那个步骤的输出,由于本例中,我们的循环网络只有一个隐藏层,所以它就代表这一层的最后那个步骤的输出,因此它和步骤的大小是没有关系的,我们的X有4个样本组成,输出神经元大小n_neurons是5,因此州的结构就是[batch_size n_neurons]=(4、5),最后我们观察数据,州的每条数据正好就是输出的最后一个步骤的输出。
<强>下面我们继续讲解多个隐藏层的情况,这里是三个隐藏层、注意我们这里仍然是调用BasicRNNCell 强>
进口tensorflow特遣部队 进口numpy np n_steps=2 n_inputs=3 n_neurons=5 n_layers=3 X=tf.placeholder (tf。float32[没有n_steps n_inputs]) seq_length=tf.placeholder (tf.int32[所有]) 层=[tf.contrib.rnn.BasicRNNCell num_units=n_neurons, 激活=tf.nn.relu) 层的范围(n_layers)) multi_layer_cell=tf.contrib.rnn.MultiRNNCell(层)=tf.nn输出,状态。dynamic_rnn (multi_layer_cell X, dtype=特遣部队。float32 sequence_length=seq_length) init=tf.global_variables_initializer () X_batch=np.array ([ 步骤1 0 #一步 [[0 1 2],[9 8 7]],1 #实例 [[3、4、5],[0,0,0]],#实例2(垫零向量) [[6 7 8],[6 5 4]],3 #实例 [[9,0,1],[3、2、1]],4 #实例 ]) seq_length_batch=np。阵列([2,1、2、2]) 与tf.Session税(): init.run () outputs_val states_val=sess.run ( (输出,状态),feed_dict={X: X_batch seq_length: seq_length_batch}) 打印(“outputs_val。形状:“输出”,states_val。形状:“州) print (“outputs_val outputs_val:“,“states_val:“states_val)日志信息:
outputs_val.shape: 张量(“rnn/transpose_1:0”,形状=(& # 63;2、5),dtype=float32) states_val.shape: (& lt; tf。张量的rnn/,/Exit_3:0 '形状=(& # 63;5)dtype=float32>, & lt; tf。张量的rnn/,/Exit_4:0 '形状=(& # 63;5)dtype=float32>, & lt; tf。张量的rnn/,/Exit_5:0 '形状=(& # 63;5)dtype=float32>) outputs_val: [[[0。0. 0. 0. 0。] [0。0.18740742 0。0.2997518 0。]] [[0。0.07222144 0。0.11551574 0。] [0。0. 0. 0. 0。]] [[0。0.13463384 0。0.21534224 0。] (0.03702604 - 0.18443246 0。0.34539366 0。]] [[0。0.54511094 0。0.8718864 0。] [0.5382122 0。0.04396425 - 0.4040263 0。]]] states_val: (数组([[0。,0.83723307,0。,0。,2.8518028), [0。,0.1996038,0。,0。,1.5456247), [0。,1.1372368,0。,0。,0.832613), [0。,0.7904129,2.4675028,0。,0.36980057]], dtype=float32), 数组([[0.6524607,0。,0。,0。,0。), [0.25143963,0。,0。,0。,0。), [0.5010576,0。,0。,0。,0。), [0。,0.3166597,0.4545995,0。,0。]], dtype=float32), 数组([[0。,0.18740742,0。,0.2997518,0。), [0。,0.07222144,0。,0.11551574,0。), (0.03702604,0.18443246,0。,0.34539366,0。), [0.5382122,0。,0.04396425,0.4040263,0。]], dtype=float32)关于tf.nn.dynamic_rnn返回值详解