def buildLSTMNetwork(self): # create network and modules net = RecurrentNetwork() inp = LinearLayer(self.n_input, name="Input") h1 = LSTMLayer(3, name='LSTM') h2 = SigmoidLayer(10, name='sigm') outp = LinearLayer(self.numActions, name='output') # add modules net.addOutputModule(outp) net.addInputModule(inp) net.addModule(h1) net.addModule(h2) # create connections from input net.addConnection(FullConnection(inp, h1, name="input_LSTM")) net.addConnection(FullConnection(inp, h2, name="input_sigm")) # create connections from LSTM net.addConnection(FullConnection(h1, h2, name="LSTM_sigm")) # add whichever recurrent connections net.addRecurrentConnection(FullConnection(h1, h1, name='LSTM_rec')) net.addRecurrentConnection(FullConnection(h2, h1, name='sigm_LSTM_rec')) # create connections to output net.addConnection(FullConnection(h1, outp, name="LSTM_outp")) net.addConnection(FullConnection(h2, outp, name="sigm_outp")) # finish up net.sortModules() net.randomize() self.printModules(net) self.e = [0 for param in range(len(net.params))] # for each action, need to accumulate the gradient self.accumulated_gradients = [[0 for param in range(len(net.params))] for i in range(self.numActions)] return net
def buildSimpleLSTMNetwork(peepholes=False): N = RecurrentNetwork('simpleLstmNet') i = LinearLayer(1, name='i') h = LSTMLayer(1, peepholes=peepholes, name='lstm') o = LinearLayer(1, name='o') b = BiasUnit('bias') N.addModule(b) N.addOutputModule(o) N.addInputModule(i) N.addModule(h) N.addConnection(FullConnection(i, h, name='f1')) N.addConnection(FullConnection(b, h, name='f2')) N.addRecurrentConnection(FullConnection(h, h, name='r1')) N.addConnection(FullConnection(h, o, name='r1')) N.sortModules() return N
def buildSimpleMDLSTMNetwork(peepholes=False): N = RecurrentNetwork('simpleMDLstmNet') i = LinearLayer(1, name='i') dim = 1 h = MDLSTMLayer(dim, peepholes=peepholes, name='MDlstm') o = LinearLayer(1, name='o') b = BiasUnit('bias') N.addModule(b) N.addOutputModule(o) N.addInputModule(i) N.addModule(h) N.addConnection(FullConnection(i, h, outSliceTo=4 * dim, name='f1')) N.addConnection(FullConnection(b, h, outSliceTo=4 * dim, name='f2')) N.addRecurrentConnection( FullConnection(h, h, inSliceTo=dim, outSliceTo=4 * dim, name='r1')) N.addRecurrentConnection( IdentityConnection(h, h, inSliceFrom=dim, outSliceFrom=4 * dim, name='rstate')) N.addConnection(FullConnection(h, o, inSliceTo=dim, name='f3')) N.sortModules() return N
def __init__(self, outdim, hiddim=15): """ Create an EvolinoNetwork with for sequences of dimension outdim and hiddim dimension of the RNN Layer.""" indim = 0 Module.__init__(self, indim, outdim) self._network = RecurrentNetwork() self._in_layer = LinearLayer(indim + outdim) self._hid_layer = LSTMLayer(hiddim) self._out_layer = LinearLayer(outdim) self._bias = BiasUnit() self._network.addInputModule(self._in_layer) self._network.addModule(self._hid_layer) self._network.addModule(self._bias) self._network.addOutputModule(self._out_layer) self._in_to_hid_connection = FullConnection(self._in_layer, self._hid_layer) self._bias_to_hid_connection = FullConnection(self._bias, self._hid_layer) self._hid_to_out_connection = FullConnection(self._hid_layer, self._out_layer) self._network.addConnection(self._in_to_hid_connection) self._network.addConnection(self._bias_to_hid_connection) self._network.addConnection(self._hid_to_out_connection) self._recurrent_connection = FullConnection(self._hid_layer, self._hid_layer) self._network.addRecurrentConnection(self._recurrent_connection) self._network.sortModules() self._network.reset() self.offset = self._network.offset self.backprojectionFactor = 0.01
print(identifier, net.activate((0, 0)), net.activate((0, 1)), net.activate((1, 0)), net.activate((1, 1))) ds = SupervisedDataSet(2, 1) ds.addSample((0, 0), (0, )) ds.addSample((0, 1), (1, )) ds.addSample((1, 0), (1, )) ds.addSample((1, 1), (0, )) for input, target in ds: print(input, target) #define net net = RecurrentNetwork() net.addInputModule(LinearLayer(2, name="il")) net.addModule(SigmoidLayer(4, name="h1")) net.addModule(SigmoidLayer(4, name="h2")) net.addOutputModule(LinearLayer(1, name="ol")) c1 = FullConnection(net["il"], net["h1"]) c2 = FullConnection(net["h1"], net["h2"]) c3 = FullConnection(net["h2"], net["ol"]) cr1 = FullConnection(net["h1"], net["h1"]) net.addConnection(c1) net.addConnection(c2) net.addConnection(c3) net.addRecurrentConnection(cr1) net.sortModules() print(net)