def RNN(x, weights, biases): # Prepare data shape to match `rnn` function requirements # Current data input shape: (batch_size, n_steps, n_input) # Required shape: 'n_steps' tensors list of shape (batch_size, n_input) # Permuting batch_size and n_steps x = tf.transpose(x, [1, 0, 2]) # Reshaping to (n_steps*batch_size, n_input) x = tf.reshape(tensor=x, shape=[-1, n_input]) # Split to get a list of 'n_steps' tensors of shape (batch_size, n_input) x = tf.split(value=x, num_or_size_splits=n_steps, axis=0) # Define a lstm cell with tensorflow #lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1) lstm_cell = rnn_cell.GRUCell(n_hidden) #lstm_cell = rnn_cell.LSTMCell(n_hidden,use_peepholes=True) # avoid overfitting lstm_cell = rnn_cell.DropoutWrapper(lstm_cell, output_keep_prob=0.5) # 2 layers lstm lstm_cell = rnn_cell.MultiRNNCell([lstm_cell] * 2) # Get lstm cell output outputs, states = rnn.rnn(cell=lstm_cell, inputs=x, dtype=tf.float32) # Linear activation, using rnn inner loop last output return tf.matmul(outputs[-1], weights['out']) + biases['out'], outputs[-1]
def RNN(x, weights, biases, n_input): x = tf.transpose(x, [1, 0, 2]) # Reshaping to (n_steps*batch_size, n_input) x = tf.reshape(tensor=x, shape=[-1, n_input]) # Split to get a list of 'n_steps' tensors of shape (batch_size, n_input) x = tf.split(value=x, num_or_size_splits=n_steps, axis=0) # Define a lstm cell with tensorflow #lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1) lstm_cell = rnn_cell.GRUCell(n_hidden) #lstm_cell = rnn_cell.LSTMCell(n_hidden,use_peepholes=True) # avoid overfitting lstm_cell = rnn_cell.DropoutWrapper(lstm_cell, output_keep_prob=0.5) # 2 layers lstm # num_units = [256, 256] # cells = [rnn_cell.GRUCell(num_units=n) for n in num_units] # lstm_cell = rnn_cell.MultiRNNCell(cells) lstm_cell = rnn_cell.MultiRNNCell([lstm_cell] * 2) # Get lstm cell output # print(x) outputs, states = rnn.rnn(cell=lstm_cell, inputs=x, dtype=tf.float32) return tf.matmul(outputs[-1], weights) + biases, outputs