code: def addLayerNode(self, layerName, bias = None, weights = {}):
          
          self.changeLayerSize(layerName, self[layerName].size + 1)
          if bias != None:
              self[layerName].weight[-1] = bias
          for name in list(weights.keys()):
              for c in self.connections:
                  if c.fromLayer.name == name and c.toLayer.name == layerName:
                      for i in range(self[name].size):
                          self[name, layerName].weight[i][-1] = weights[name][i]
                  elif c.toLayer.name == name and c.fromLayer.name == layerName:
                      for j in range(self[name].size):
                          self[layerName, name].weight[-1][j] = weights[name][j]
docs: Adds a new node to a layer, and puts in new weights. Adds node on the end.
          Weights will be random, unless specified.
  
          bias    = the new node's bias weight
          weights = dict of {connectedLayerName: [weights], ...}
  
          Example:
          >>> net = Network() # doctest: +ELLIPSIS
          Conx using seed: ...
          >>> net.addLayers(2, 5, 1)
          >>> net.addLayerNode("hidden", bias = -0.12, weights = {"input": [1, 0], "output": [0]})