def outputs(weights, inputs): """Outputs normalized log-probabilities of each character, plus an extra one at the end.""" forget_weights = parser.get(weights, 'forget') change_weights = parser.get(weights, 'change') ingate_weights = parser.get(weights, 'ingate') outgate_weights = parser.get(weights, 'outgate') predict_weights = parser.get(weights, 'predict') num_sequences = inputs.shape[1] hiddens = np.repeat(parser.get(weights, 'init_hiddens'), num_sequences, axis=0) cells = np.repeat(parser.get(weights, 'init_cells'), num_sequences, axis=0) output = [hiddens_to_output_probs(predict_weights, hiddens)] for input in inputs: # Iterate over time steps. hiddens, cells = update_lstm(input, hiddens, cells, forget_weights, change_weights, ingate_weights, outgate_weights) output.append(hiddens_to_output_probs(predict_weights, hiddens)) return output
def outputs(weights, inputs): """Goes from right to left, updating the state.""" num_sequences = inputs.shape[1] hiddens = np.repeat(parser.get(weights, 'init_hiddens'), num_sequences, axis=0) change_weights = parser.get(weights, 'change') predict_weights = parser.get(weights, 'predict') output = [hiddens_to_output_probs(predict_weights, hiddens)] for input in inputs: # Iterate over time steps. hiddens = update(input, hiddens, change_weights) output.append(hiddens_to_output_probs(predict_weights, hiddens)) return output