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
i2r = FullConnection(inp.output, rec.input) r2o = FullConnection(rec.output, out.input) rbias = Bias(rec.input) obias = Bias(out.input) tgt = InputLayer(1) obj = MSEObjective(out.output, tgt.output) i2r.randomize() r2o.randomize() rbias.randomize() obias.randomize() 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)
i2r = FullConnection(inp.output, rec.input) r2o = FullConnection(rec.output, out.input) rbias = Bias(rec.input) obias = Bias(out.input) tgt = InputLayer(1) obj = MSEObjective(out.output, tgt.output) i2r.randomize() r2o.randomize() rbias.randomize() obias.randomize() 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)