def euclidean(A, B): """ Euclidean distance function. See scipi.spatial.distance.cdist() :Example: >>> from neurolab import mynp as np >>> euclidean(np.array([0,0]), np.array([[0,1], [0, 5.5]])).tolist() [1.0, 5.5] """ return np.sqrt(np.sum(np.square(A-B) ,axis=1))
def initnw(layer): """ Nguyen-Widrow initialization function """ ci = layer.ci cn = layer.cn w_fix = 0.7 * cn ** (1. / ci) w_rand = np.random.rand(cn, ci) * 2 - 1 # Normalize if ci == 1: w_rand = w_rand / np.abs(w_rand) else: w_rand = w_rand * np.sqrt(1. / np.square(w_rand).sum(axis=1).reshape(cn, 1)) w = w_fix * w_rand b = np.array([0]) if cn == 1 else w_fix * np.linspace(-1, 1, cn) * np.sign(w[:, 0]) # Scaleble to inp_active amin, amax = layer.transf.inp_active amin = -1 if amin == -np.Inf else amin amax = 1 if amax == np.Inf else amax x = 0.5 * (amax - amin) y = 0.5 * (amax + amin) w = x * w b = x * b + y # Scaleble to inp_minmax minmax = layer.inp_minmax.copy() minmax[np.isneginf(minmax)] = -1 minmax[np.isinf(minmax)] = 1 x = 2. / (minmax[:, 1] - minmax[:, 0]) y = 1. - minmax[:, 1] * x w = w * x b += np.dot(w, y) layer.np['w'][:] = w layer.np['b'][:] = b return
def deriv(self, x, y): """ Derivative of transfer function TanSig """ return 1.0 - np.square(y)
def __call__(self, e): v = 0.5 * np.sum(np.square(e)) return v
def __call__(self, e): N = e.size v = np.sum(np.square(e)) / N return v