def train(X, y, q=Q, activation=None): """Algoritmo de treinamento para ELM (Extreme Learning Machine) Parâmetros --------- X: Vetor de características y: Vetor de rótulos q: número de neurônios ocultos Return ------ W: pesos aleatórios da camada oculta """ # rótulos # torna vetor linha em coluna n, p = X.shape D = y.T # training # Pesos aleatórios da camada oculta W = np.random.randn(q, p + 1) # Adicionar bias X = processing.add_bias(X) # Calcular saída da camada oculta Z = W @ X.T if activation is not None: Z = activation(Z) Z = processing.add_bias(Z, axis=0) # Calcular pesos M para camada de saída (aprendizado) # M = D @ (Z.T @ (np.linalg.inv(Z @ Z.T))) M, *_ = np.linalg.lstsq(Z.T, D.T, rcond=None) return W, M.T
def predict(X, W): """Função de predição baseado na memória W da Rede Neural Perceptron. X é a matriz de features e não deve conter o bias, pois é adicionado nessa função. """ X = processing.add_bias(X) u = W.T @ X.T return processing.encode_label(u.T)
def predict(X, T, G, activation=None): """Algoritmo de predição para ELM (Extreme Learning Machine) Parâmetros ---------- T: Centróides da camada oculta G: Vetor de pesos da camada de saída para Return ------ np.array """ X = processing.add_bias(X) PHI = phi(X, T) if activation is not None: PHI = activation(PHI) PHI = processing.add_bias(PHI, axis=1) Y = G @ PHI.T return Y.T
def predict(X, W, M, activation=None): """Algoritmo de predição para ELM (Extreme Learning Machine) Parâmetros ---------- W: Vetor de pesos da camada oculta utilizados no treinamento M: Vetor de pesos da camada de saída para Return ------ np.array """ X = processing.add_bias(X) Z = W @ X.T if activation is not None: Z = activation(Z) Z = processing.add_bias(Z, axis=0) Y = M @ Z return Y.T
def train(X, y, q=Q, activation=None): """Algoritmo de treinamento para Rede Neural RBF Parâmetros --------- X: Vetor de características y: Vetor de rótulos q: número de neurônios ocultos Return ------ T: Centróides da camada oculta com tamanho q G: Matriz de pesos da camada de saída. """ # rótulos n, p = X.shape index = np.arange(0, n - 1) D = y # Adicionar bias X = processing.add_bias(X) # training # Centróides aleatórios da camada oculta T = X[np.random.choice(index, q)] # Calcular saída da camada oculta PHI = phi(X, T) if activation is not None: PHI = activation(PHI) PHI = processing.add_bias(PHI, axis=1) # Calcular pesos G para camada de saída (aprendizado) # Utiliza-se mínimos quadrados # FIXME: G = D @ (PHI.T @ (np.linalg.inv(PHI @ PHI.T))) # Singular Matrix! Usando mínimos quadrados optimizados do Numpy G, *_ = np.linalg.lstsq(PHI, D) return T, G.T
def train(X, y, learning_rate=0.01, max_iterations=100): """Função de treinamento da Rede Neural Perceptron. Função de ativação no neurônio é a sigmoid. """ X = processing.add_bias(X) n, m = X.shape _, c = y.shape W = np.zeros((m, c)) epochs = 0 while epochs <= max_iterations: deltaW_sum = 0 for xi, d in zip(X, y): x = processing.column_vector(xi) yi = processing.sigmoid(W.T @ xi) # activation e = d - yi deltaW = learning_rate * e * x W = W + deltaW deltaW_sum += abs(deltaW).sum() if deltaW_sum == 0: # convergence condition break epochs += 1 return W