pythonneural-networkpybrain

Creating custom connectivity in PyBrain neural networks


I want to create an artificial neural network (in PyBrain) that follows the following layout:

layout

However, I cannot find the proper way to achieve this. The only option that I see in the documentation is the way to create fully connected layers, which is not what I want: I want some of my input nodes to be connected to the second hidden layer and not to the first one.


Solution

  • The solution is to use the connection type of your choice, but with slicing parameters: inSliceFrom, inSliceTo, outSliceFrom and outSliceTo. I agree the documentation should mention this, so far it's only in the Connection class' comments.

    Here is example code for your case:

    #create network and modules
    net = FeedForwardNetwork()
    inp = LinearLayer(9)
    h1 = SigmoidLayer(2)
    h2 = TanhLayer(2)
    outp = LinearLayer(1)
    # add modules
    net.addOutputModule(outp)
    net.addInputModule(inp)
    net.addModule(h1)
    net.addModule(h2)
    # create connections
    net.addConnection(FullConnection(inp, h1, inSliceTo=6))
    net.addConnection(FullConnection(inp, h2, inSliceFrom=6))
    net.addConnection(FullConnection(h1, h2))
    net.addConnection(FullConnection(h2, outp))
    # finish up
    net.sortModules()