def buildNetwork(rnn_size): """ Build an RNN with softmax output """ net = RecurrentNeuralNetwork() input_layer = InputLayer(27) # Input is 27 unit vector recurrent_layer = RecurrentLayer(rnn_size) output_layer = SoftmaxLayer(34) input_to_recurrent = FullConnection(input_layer.output, recurrent_layer.input) recurrent_to_output = FullConnection(recurrent_layer.output, output_layer.input) recurrent_bias = Bias(recurrent_layer.input) output_bias = Bias(output_layer.input) target_layer = InputLayer(34) # 34 classes! objective_layer = CrossEntropyObjective(output_layer.output, target_layer.output) net.addLayer(input_layer) net.addLayer(target_layer) net.addConnection(input_to_recurrent) net.addConnection(recurrent_bias) net.addRecurrentLayer(recurrent_layer) net.addConnection(recurrent_to_output) net.addConnection(output_bias) net.addLayer(output_layer) net.addObjective(objective_layer) net.setInputLayer(input_layer) net.setTargetLayer(target_layer) net.setOutputLayer(output_layer) net.setObjective(objective_layer) net.randomize() return net
rec.recurrentConnection.randomize() net.addLayer(inp) net.addLayer(tgt) net.addConnection(i2r) net.addConnection(rbias) net.addRecurrentLayer(rec) net.addConnection(r2o) net.addConnection(obias) net.addLayer(out) net.addObjective(obj) net.setInputLayer(inp) net.setTargetLayer(tgt) net.setOutputLayer(out) net.setObjective(obj) sgd = SGDTrainer(net, learning_rate=0.1, momentum=0.9) seq = np.array([[[1], [1], [0]], [[1], [0], [0]], [[1], [1], [0]], [[0], [0], [0]], [[0], [1], [0]], [[0], [0], [0]], [[1], [1], [0]], [[1], [0], [0]], [[1], [1], [0]], [[0], [0], [0]], [[0], [1], [0]], [[0], [0], [0]], [[1], [1], [0]], [[1], [0], [0]], [[1], [1], [0]], [[0], [0], [0]], [[0], [1], [0]], [[0], [0], [0]], [[1], [1], [0]], [[1], [0], [0]], [[1], [1], [0]], [[0], [0], [0]], [[0], [1], [0]], [[0], [0], [0]]]) tar = np.array([[[1], [1], [0]], [[0], [1], [0]], [[1], [0], [0]], [[1], [0], [0]], [[1], [1], [0]], [[1], [1], [0]], [[0], [0], [0]], [[1], [0], [0]], [[0], [1], [0]], [[0], [1], [0]], [[0], [0], [0]], [[0], [0], [0]],
rec.recurrentConnection.randomize() net.addLayer(inp) net.addLayer(tgt) net.addConnection(i2r) net.addConnection(rbias) net.addRecurrentLayer(rec) net.addConnection(r2o) net.addConnection(obias) net.addLayer(out) net.addObjective(obj) net.setInputLayer(inp) net.setTargetLayer(tgt) net.setOutputLayer(out) net.setObjective(obj) sgd = SGDTrainer(net, learning_rate=0.1, momentum=0.9) seq = np.array( [ [[1], [1], [0]], [[1], [0], [0]], [[1], [1], [0]], [[0], [0], [0]], [[0], [1], [0]], [[0], [0], [0]], [[1], [1], [0]], [[1], [0], [0]], [[1], [1], [0]],