def lstm_unit(): # Define neurons read = Node(Product, input=True) remember = Node(Product, input=True) internal = Node(Sum) output = Node(Product, inout=True) # Combine and connect them read.connect(internal) remember.connect(internal) internal.connect(output, remember) return Node(read, remember, internal, output)
def test_edges_layers(self): # ->(0)->(2)->(4)-> # \/^ \/^ # /\v /\v # ->(1)->(3)->(5)-> node = Node(Constant, inout=True) layer = Node(node * 2) layers = Node(layer * 3, inout=True) connect_layers(layers) network = Network(layers) assert len(network.current) == 6 assert network.weights.getnnz() == 8 assert network.edges == [(0, 2), (0, 3), (1, 2), (1, 3), (2, 4), (2, 5), (3, 4), (3, 5)]
def fully_connected_network(input_size, hidden_size, output_size, input_func=Sigmoid, hidden_func=Sigmoid, output_func=Sigmoid): # Define layers input_ = Node(Node(input_func) * input_size, input=True) hidden = Node(Node(hidden_func, inout=True) * hidden_size) output = Node(Node(output_func) * output_size, output=True) # Combine and connect them network = Node(input_, hidden, output) network.children.connect(network.children) return network
def lstm_network(input_size, hidden_size, output_size, hidden_count, input_func=Constant, output_func=Sigmoid): # Define layers input_ = Node(Node(input_func) * input_size, input=True) hidden = Node(Node(lstm_unit(), inout=True) * hidden_size) output = Node(Node(output_func) * output_size, output=True) # Combine and connect them network = Node(input_, hidden * hidden_count, output) for last, current in pairwise(network): last.connect(current) return network
def test_edges_cell(self): # -> ((0)->(1)->(2)) -> ((3)->(4)->(5)) -> input_ = Node(Constant, input=True) hidden = Node(Constant) output = Node(Constant, output=True) input_.connect(hidden) hidden.connect(output) cell = Node(input_, hidden, output, inout=True) cells = Node(cell * 2) cells[0].input = True cells[1].output = True cells[0].connect(cells[1]) network = Network(cells) assert len(network.current) == 6 assert network.weights.getnnz() == 5 assert network.edges == [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
def layers(request): node = Node(Constant, inout=True) layer = Node(node * request.param) layers = Node(layer * request.param) layers.amount = request.param * request.param return layers