code: def update(self, w, e):
          
          if len(w.shape) == 1:
              e = self.activation(self.y, f=self.f, der=True) * e * w
              dw = self.mu * np.outer(e, self.x)
          else:
              e = self.activation(self.y, f=self.f, der=True) * (1 - self.y) * np.dot(e, w)
              dw = self.mu * np.outer(e, self.x)
          w = self.w[:,1:]
          self.w += dw
          return w, e
docs: This function make update according provided target
          and the last used input vector.
  
          **Args:**
  
          * `d` : target (float or 1-dimensional array).
              Size depends on number of MLP outputs.
  
          **Returns:**
  
          * `w` : weights of the layers (2-dimensional layer).
              Every row represents one node.
          
          * `e` : error used for update (float or 1-diemnsional array).
              Size correspond to size of input `d`.