No presente texto, busca-se demonstrar o teorema de convergência do perceptron. Em primeiro, fazendo um rápido passeio aleatório pelo arcabouço conceitual das Redes Neurais Artificiais (RNA’s) de camada única até a exposição do teorema de convergência; em seguida, aplicando RNA’s na famigerada base de dados Iris com o package Neuralnet e, por fim, aplicando o perceptron de camada única manualmente encontrando a convergência.
A pedra angular das RNA’s é a otimização de pesos. Os pesos representam o ponto axial nas respostas geradas por um algoritmo de RNA – seja em problemas de classificação ou em problemas de predição. Fazendo um paralelismo com a neurociência, os pesos funcionam como as sinapses da estrutura cerebral – óbvio, como um modelo lúdico que busca simplificar a estrura neural de forma algébrica. Normalmente, pode-se atribuir um peso por variável de entrada, isto é, para cada \(x_{i}\) um \(w_{i}\). No qual busca-se sucessivamente pesos que atualizam em cada estágio de iteração a minimização dos erros de saída. De grosso modo, inicia-se com os pesos \(w(t)\), atualizando sucessivamente \(\Delta w\) encontrando nos estágios posteriores \(w(t+1) = w(t)+\Delta w\) um melhor ajustamento que os pesos iniciais \(w(t)\), assim, minimizando os erros de saída. Como sintetiza Braga, Carvalho & Ludermir (2000, p. 36): […] os algoritmos de aprendizado em RNAs visam ao desenvolvimento de técnicas para a obtenção do valor de \(\Delta w\) mais apropriado para a obtenção da solução do problema em questão.
O perceptron de única camada – sinônimo para Rede Neural Artifical de uma ou única camada – é estritamente um classificador linear; reservado para resolver apenas problemas linearmente separáveis. Com esse background, portanto, dado um problema de classificação binária, na qual a saída retorna 1 ou 0, pode-se iniciar a formalização do perceptron simples definindo a função de ativação:
\[ f_{\Phi}(x) = \begin{cases} 1 \space \space \space \space se & \ b + x_{i}w_{i} > 0 \\ 0 & \space Caso \space \space Contrário \\ \end{cases} \]
Passando a notação para uma formalização mais apropriada:
\[ f_{\Phi} = b+ \sum_{i=1}^n x_{i}w_{i} \]
Observe que, como mencionado anteriormente, as entradas passam conectadas na multiplicação com seus respectivos pesos. Por usa vez, \(b\) representa o viés. A qual como bem define Pallavi Bharadwaj, 2020: […] the bias ‘b’ is like the intercept in the linear equation. It’s a constant that helps the model adjust in a way that best fits the data. The bias term assumes an imaginary input feature coefficient \(x_{0}=1\).
Por outro lado, a função de ativação representa o bloco do algoritmo após a aplicação da somatória das entradas com seus respectivos pesos – a qual é utilizada para ativação do nodo ou, em outros termos, para classificação binária. A função de ativação nesse caso do perceptron simples, pode ser definida pela Step Function binária ou, para os íntimos, “tudo ou nada”. É a formulação mais simples e justamente por isso pouco aplicada em RNA’s multicamadas com topologias mais complexas. A step function no caso 0 e 1, após passada o resultado das conexões somadas, classifica como 1 caso for maior que zero; caso contrário, classifica como zero. Ou seja, uma função de ativação “tudo ou nada”.Para funções de ativação mais complexas e mais utilizadas, recomendo forte o texto de Aditya Sharma, 2017. Dito isso, a seguir pode-se visualizar a arquitetura básica do perceptron:
Observe que, como mencionado exaustivamente anteriormente, as entradas passam multiplicando com os pesos até a soma, posteriormente, passando para a função de ativação até a saída. Com essa estrutura simples, com multiplicações e adições, Rosemblatt (1958) inundou os centros de pesquisa em Inteligência Artificial (IA) com emplogação. Bem, apenas até os trabalhos de Minsky & Papert (1969): a linearidade, isto é, necessidade da separação de duas regiões num plano bidimensional por uma reta ou num hiperplano para casos n-dimensionais era e permanece sendo uma grande fraqueza do perceptron de uma camada. Assim, jogando a IA no seu primeiro inverno. Restanto os discidentes, como Sejnowski (2019) gosta de salientar.
Nem mesmo posteriormente ao trabalho de Rosemblatt (1960) mostrando a convergência do perceptron – o algoritmo atualiza os pesos nos casos de problemas linearmente separáveis atá a exaustão, isto é, até convergir com os erros para zero – não tirou as redes neurais do “período de inverno”. Bem os erros de forma simplificada podem ser formulados como a diferença das saídas desejadas \(d\) menos as saídas calculadas \(y\). Assim, os erros podem ser definidos como segue:
\[ e(t)=d(t)-y(t) \] No caso de atualização, os pesos com as entradas para o neurônio \(i\) no tempo \(t+1\) é atualizado da seguinte forma:
\[ w(t+1) = w(t)+ \lambda ex(t) \] Aqui entra outro bloco do algoritmo, taxa de aprendizagem representada por \(\lambda\). A qual de grosso modo é uma medida de velocidade com que o vetor de pesos é atualizado. Foge do escopo do presente trabalho os promenores da taxa de aprendizagem, principalmente, dado o foco no perceptron com única camada. Pois bem, então, a atualização dos pesos ocorre dado os pesos no instante \(t\) mais a taxa de aprendizagem (número que varia de 0 a 1) multiplicado pelos erros e pelas entradas. Na próxima secção explora-se de forma mais detalhada os erros com o teorema da convergência.
Como mencionado anteriormente, Rosemblatt (1960) demonstrou que há convergência no algoritmo perceptron quando o problema é linearmente separável. Busca-se a seguir fazer uma exposição do teorema e posteriomente, nas próximas secções, verificar como os erros se comportam em problemas dessa natureza. Diga-se de passagem, a presente demontração segue a demonstração de Braga, Carvalho & Ludermir (2000, p. 38-41). Apenas com algumas modificações na notação quando oportuno e com comentários adicionais, portanto, cabendo o crédito aos outores referenciados. A prova para tal teorema pode ser encontrado também em Novikoff (1960).
Dado um conjunto de treinamento para um neurônio qualquer da camada de reposta com duas classes linearmente separáveis \(C_{1}\) e \(C_{2}\), digamos, para classificação, o conjunto de treinamento com \(n\) elementos \(\Gamma = {[(x^i, y^i_d)]^n_{i=1}}\) pode ser dividido em dois subconjuntos:
\[ \Gamma_{1} = {[(x^i, 1)]^n_{i=1}} \in C_{1} \] \[ \Gamma_{2} = {[(x^i,0)]^n_{i=1}} \in C_{2} \] Observe que aqui temos um problema binário. Como mencionado, digamos, de classificação. As respostas nesse caso, com as entradas \(x_{i}\) podem ser 0 ou 1 na saída. Uma clássica e básica classificação binária. Tal que \(\Gamma\) = \(\Gamma_{1}\) \(\cup\) \(\Gamma_{2}\) e \(n_{1} + n_{2} = n\). Assim, admite-se então que existe solução \(w_{0}\) tal que:
\[ W_{0}^T x^i \ge 0 \space \space \space \space \forall x_{i} \in C_{1} \] \[ W_{0}^T x^i < 0 \space \space \space \space \forall x_{i} \in C_{2} \]
Portanto, o problema do treinamento se resume então a achar \(w_0\) que seja solução para a separação das duas classes \(C_1\) e \(C_2\) (Braga, Carvalho & Ludermir, 2000, p. 39). Na notação anterior, simplesmente foi exposto essa condição de “separabilidade”: se for maior ou igual a zero, pertence a \(C_1\), caso for menor que zero, pertence a \(C_2\). Ah! Sim, para todo \(x_{i}\) conectado aos seus respectivos pesos \(w_0^T\).
Caso não ocorra a classificação com 100% de acurácia com a primeira rodada de pesos, durante o treinamento pode-se aplicar atualização dos pesos para minimizar os erros e encontrar a convergência. Os pesos serão atualizados da seguinte forma seguindo as condições:
\[ w(t+1) = w(t)+ \lambda x(t) \space \space \space \space \space se \space \space \space \space w^T(t)x(t)< 0 \space \space \space \space \space e \space \space \space \space \space x(t) \in C_1 \]
\[ w(t+1) = w(t) - \lambda x(t) \space \space \space \space \space se \space \space \space \space w^T(t)x(t) \ge 0 \space \space \space \space \space e \space \space \space \space \space x(t) \in C_2 \]
Ou seja, o processo de atualização \(w(t+1) = w(t)+ \lambda x(t)\) ocorre, no primeiro caso, quando o retorno da multiplicação das entradas com seus respectivos pesos for menor que 0; e, no segundo caso, atualiza caso a mutiplicação retornar maior ou igual a 0 (em ambos os casos representando erro de classificação). Lembrando que a taxa de aprendizagem \((\lambda)\) tem influência apenas no tempo de convergência. Até aqui imagino que já tenha ficado claro o processo de atualização. Agora caso classifique incorretamente, digamos, \(t_{1}\) vetores da classe \(C_{1}\) e \(t_{2}\) vetores para \(C_{2}\) na qual \(t =t_{1} + t_{2}\) representa as classificações incorretas no instante \(t\), como atualizar os pesos? Bem, com classes linearmente separáveis pode-se afirmar que existe uma solução \(w_{0}\). Considerando as duas equações anteriores e \(\lambda = 1\) podemos chegar na equação seguinte com \(w_{0}\):
\[ w_{0}^T w(t+1) = w_{0}^T \sum_{i=1}^{t_1}x(t_{1}^i) - w_{0}^T \sum_{j=1}^{t_2}x(t_{2}^i) \] \[ w_{0}^T w(t+1) = w_{0}^T \sum_{i=1}^{t}x(t) \]
Note os sinais de adição e subtração na primeira e segunda equação anterior. Assim, facilmente chega-se na última formulação. Para uma solução fixa de \(w_{0}\) podemos buscar uma minimização:
\[ \alpha = min [w_{0}^Tx(t)] \]
Com a inequação de Cauchy-Schwarz pode-se concluir para os vetores \(w_{0}\) e \(w(t+1)\) que a inequação a seguir é válida:
\[ \parallel w_{0}\parallel^2 \space \|w(t+1)\|^2 \ge (w_{0}^T w(t+1))^2 \] Nos levando:
\[ \|w_{0}\|^2 \|w(t+1)\|^2 \ge t^2 \alpha^2 \] \[ \|w(t+1)\|^2 \ge \frac{t^2\alpha^2}{\|w_{0}\|} \] Caso desconheça a inequação de Cauchy recomendo, ver Desigualdade de Cauchy-Schwarz. Assim, para ocorrer convergência é necessário que a norma \(w(t+1)\) seja limitada. Esse é o próximo bloco da demonstração. Com \(\lambda = 1\) pode-se escrever aquela equação de atualização dos pesos anterior como segue:
\[ w(t+1) = w(t) + ex(t) \] Obtendo a norma dos dois lados e elevando ambos os lados ao quadrado:
\[ \|w(t+1)\|^2 = \|w(t) + ex(t)\|^2 \] Expandido:
\[ \|w(t+1)||^2 = [w_{1}(t)^2+w_{2}(t)^2 +....+w_n(t)^2]+e[x_{1}(t)^2+x(t)^2+....+x_n(t)^2]+2e[w_{1}(t)x_{1}(t)+w_{2}(t)x_{2}(t)+...+w_n(t)x_n(t)] \] \[ \|w(t+1)\|^2 = \|w(t)\|^2 + e\|x(t)\|^2 + 2ew^{T}(t)x(t) \]
Com essa últiam formulação, obtendo erro igual a 1, isto é, \(e = 1\) dado \(d = 1\) e \(y= 0\), lembre-se de \(e(t)=d(t)-y(t)\), tem-se que:
\[ w^T(t)x(t)<0 \] O que implica: \[ \|w(t)\|^2 + \|x\|^2 \ge \|w(t)||^2 + e\|x(t)\|^2 + 2ew^T(t)x(t) \] O que é verdade para \(e=-1\) também. Portanto: \[ \|w(t+1)||^2 \le \|w(t)\|^2 + \|x(t)\|^2 \] \[ \|w(t+1)\|^2 - \|w(t)\|^2 \le \|x(t)\|^2 \] Somando os \(t\) primeiros termos da equação anterior:
\[ \|w(t+1)\|^2 \le \sum_{i=1}^t \|x(i)\|^2 \] Definindo \(\beta = \begin{matrix} max \\i=1,2...,t\\\end{matrix}\) \(\|x(i)\|^2\), pode-se escrever outra condição de limite para o vetor \(\|w(t+1)\|\):
\[ \|w(t+1)\|^2 \le \beta t \] Portanto, tanto a formulação anterior quando \(\|w(t+1)\|^2 \ge \frac{t^2\alpha^2}{\|w_{0}\|}\) implicam na existência de um limite \(t\) para as operações de ajuste, ja que:
\[ 0 \le t \le \frac{\beta \|w_{o}\|^2}{\alpha^2} \] Assim, \(t = \frac{\beta \|w_{0}\|^2}{\alpha^2}\), limita o número de interações. Implicando sempre na convergência em tempo finito.
Apesar de buscar um aplicação “manual” do perceptron, utilizou-se de alguns pacotes/bibliotecas para facilitar na codificação. Os packages utilizados podem ser visualizados a seguir. Por sua vez, a base de dados utilizada é a famigerada Iris – disponível na base do R. Tratando-se de uma RNA’s com uma camada utilizou-se apenas duas entradas, isto é, duas variáveis independentes da base de dados e duas espécies de flores (saídas). As quais foram Sepal.Width e Petal.Width, na entrada; e, por sua vez, setosa e versicolor como saída. Há uma explicação teórica-estatística do porquê a escolha de apenas de duas saídas (no caso, setosa e versicolor). Antes de entrada nesses detalhes vamos visualizar os dados
rm(list=ls()) # Limpando
# Packages
library(tidyverse)
library(GGally)
library(cluster)
library(factoextra)
library(caret)
library(caTools)
library(knitr)
library(rmarkdown)
library(neuralnet)
library(NeuralNetTools)
# Database
data_base <- iris # Dataset Iris
## Filtrando e selecionando as variáveis
data_base <- data_base %>% filter(Species %in% c("setosa", "versicolor")) %>%
select(Sepal.Width,Petal.Width, Species)
data_base %>%
head() %>%
DT::datatable() # Plotando a base em uma table
O porquê da seleção das variáveis da base de dados é explicada justamente pelo ponto fraco do perceptron de uma camada: o problema precisa ser linearmente separável. A exemplificação e aplicação aqui parte de um problema de classificação supervisionada, ou seja, na qual sabe-se das classificações de saída, porém, no caso da RNA de uma camada, necessariamente, precisa-se de classificações linearmente separáveis para a encontrar convergência. Diga-se de passagem, Pallavi Bharadwaj, 2020 fez uma aplicação semelhante, porém em linguagem Python. Dito isso, vamos visualizar esses dados de forma mais minuciosa. Inicia-se observando a relação em um gráfico de dispersão com ajustamento local e, posteriomente, com uma correlação de Pearson entre as entradas:
## Visualizando a variável de entrada
ggplot(data_base, aes(y = Petal.Width,
x = Sepal.Width, colour = Species))+
geom_point(pch=19, size= 4)+
geom_smooth(method = "loess", fill="black", col="red")+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Sepal.Width vs Petal.Width",
subtitle = "Elaboração de Luiz Paulo T. Gonçalves") # Gráfico de Dispersão
ggpairs(data_base[, 1:2], lower = list(continuos="smooth"))+
ggtitle("Correlação de Pearson entre Sepal.Width & Petal.Width",
subtitle = "Elaboração de Luiz Paulo T. Gonçalves")+
theme_bw() # Correlação de Pearson
É visível que escolhendo Sepal.Width e Petal.Width encontra-se uma problema que é linearmente separável. Assim, abrindo espaço para testar a convergência posteriormente. Pois bem, não satisfeito, vamos visualizar mais de perto essas duas nuvens de dados formadas na dispersão – as quais podem ser separadas facilmente. Aplicando uma simples clusterização – em primeiro com distância Euclidiana e depois com Manhattan – dado o número de espécies na saída (\(k=2\)), temos:
# Clustering CLARA
cluster_euclidean <- clara(x = data_base[, 1:2], k=2,
metric = "euclidean", stand = T, pamLike = T) # Com Distância Euclidiana
fviz_cluster(object = cluster_euclidean,
ellipse.type = "t", geom = "point", pointsize = 4.0)+
ggtitle("Clustering CLARA - Distância Euclidiana",
subtitle = "Elaboração de Luiz Paulo T. Gonçalves")+
theme_bw()+
theme(legend.position = "bottom")
cluster_manhattan <- clara(x = data_base[, 1:2], k=2,
metric = "manhattan", stand = T, pamLike = T) # Com Distância de Manhattan
fviz_cluster(object = cluster_euclidean,
ellipse.type = "t", geom = "point", pointsize = 4.0)+
ggtitle("Clustering CLARA - Distância de Manhattan",
subtitle = "Elaboração de Luiz Paulo T. Gonçalves")+
theme_bw()+
theme(legend.position = "bottom")
Com a linearidade separável explicítada, passo agora ao pré processamento e organização dos dados para finalmente aplicar a rede neural de uma camada. Primeiro, vou passar as saídas (setoda e versicolor) para binárias – na qual setosa vai ser 1 e versicolor 2 (portanto, a função de ativação nesse caso vai centrar em 1 e 2). Em segundo, vou padronizar as duas entradas. E, em terceiro e último, apenas por questão de protocolo, vou subdividir a base de dados em treino e teste. Feito isso, vamos visualizar novamente a base de dados completa (sem a separação treino e teste):
# Organizando e pre-processando a base de dados
data_base$Species = as.numeric(data_base[, 3]) # Passando para numérico a variável de saída: 1 para setosa; 2 para versicolor
data_base[, 1:2] <- scale(data_base[, 1:2])
## Dividindo a base em treino e teste
set.seed(123) # Semente geradora
division <- sample.split(data_base$Sepal.Width, SplitRatio = 0.85)
base_treino = subset(data_base, division == T)
base_teste = subset(data_base, division == F )
data_base %>%
head() %>%
DT::datatable() # Plotando a base em uma table
Antes de prosseguir para a aplicação manual do perceptron, vou fazer uma pequena pausa para visualizar a estrutura da rede neural usando o pacote Neuralnet (package popular na comunidade R, principalmente, dado suas funcionalidade para visualizações). O objetivo com Neuralnet aqui é apenas de visualização mesmo. Diga-se de passagem, nesse caso vou configurar a RNA com a função de ativação logística. Dito isso, vamos as visualizações:
classificador_neural <- neuralnet(Species~ Sepal.Width + Petal.Width,
data = base_treino, hidden = 1,
act.fct = "logistic")
plot(classificador_neural)
plotnet(classificador_neural, pos_col = "red", neg_col = "blue",
alpha_val = 0.5)
Como meu objetivo era visual, não alterei em muito as configurações de processamento da RNA. Conservei a função de ativação como logística (a qual é mais refinada estatisticamente do que a step function binária) e configurei hidden = 1.
Finalmente vou iniciar a codificação do perceptron manualmente. Vou fazer passo a passo por bloco – o código poderia ser facilmente resumido em menos linhas de forma mais limpa.
# Usar apenas a base de treino - Subdividir em entrada e saida para facilitar no manuseio posterior
entrada <- select(base_treino, Sepal.Width, Petal.Width)
saida <- select(base_treino, Species)
# Passando para o formato matriz
entradas <- as.matrix(entrada)
saidas <- as.matrix(saida)
## Montando o Perceptron
pesos = matrix(c(0.0, 0.0)) # Pesos iniciais
learning_r = 0.1 # Taxa de Aprendizagem
# Step Function
stepFunction = function(soma) {
if (soma >= 2) {
return (2)
}
return (1)
}
# Saída
calculaSaida = function(registro) {
soma = registro %*% pesos
return (stepFunction(soma))}
Observe que configurei os pesos iniciais iguais a zero, isto é, as duas entradas vão iniciar com pesos zeros (retornando zero nas primeiras multiplicações). Em segundo de forma arbitrária ou por princípio de prudência, configurei a taxa de apredinzagem para \(0.1\). Posteriormente programei a saída e uma simples step function: caso for maior ou igual a 2, retorna 2; caso contrário, retorna classificado como 1 (como setosa). Passo agora ao último passo. Jogar tudo dentro de while e for numa estrutura de repetição para a atualização dos pesos até convergir como demonstrado na parte teórica anteriormente. Ou seja, aplicar uma estrutura de repetição! Daqui pra frente não tenho muito o que dizer, ou melhor, segue o código:
total_error = 1
processo_aprendizado <- while(total_error != 0){
total_error = 0
for(i in 1:length(saidas)){
saidas_computadas = calculaSaida(c(entradas[i,]))
erro = abs(saidas[i] - saidas_computadas)
total_error = total_error + erro
for(j in 1:length(pesos)){
pesos[j] = pesos[j] + (learning_r * entradas[i,j] * erro)
print(paste("Atualizando os pesos:", pesos[j]))
}
}
print(paste("Erro Total:", total_error))
}
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0"
## [1] "Atualizando os pesos: 0.0210970960518793"
## [1] "Atualizando os pesos: 0.108643134901172"
## [1] "Atualizando os pesos: 0.0421941921037586"
## [1] "Atualizando os pesos: 0.234980591447485"
## [1] "Atualizando os pesos: 0.0424030742428861"
## [1] "Atualizando os pesos: 0.361318047993799"
## [1] "Atualizando os pesos: -0.124493754920001"
## [1] "Atualizando os pesos: 0.452266861249829"
## [1] "Atualizando os pesos: -0.186949514519129"
## [1] "Atualizando os pesos: 0.578604317796142"
## [1] "Atualizando os pesos: -0.249405274118256"
## [1] "Atualizando os pesos: 0.669553131052172"
## [1] "Atualizando os pesos: -0.207419964153625"
## [1] "Atualizando os pesos: 0.813584909243628"
## [1] "Atualizando os pesos: -0.35342857940376"
## [1] "Atualizando os pesos: 0.851450757564232"
## [1] "Atualizando os pesos: -0.394996125090136"
## [1] "Atualizando os pesos: 0.942399570820261"
## [1] "Atualizando os pesos: -0.478340098602016"
## [1] "Atualizando os pesos: 1.05104270572143"
## [1] "Atualizando os pesos: -0.707901569503158"
## [1] "Atualizando os pesos: 1.08890855404204"
## [1] "Atualizando os pesos: -0.728580901276782"
## [1] "Atualizando os pesos: 1.21524601058835"
## [1] "Atualizando os pesos: -0.91636594435242"
## [1] "Atualizando os pesos: 1.25311185890895"
## [1] "Atualizando os pesos: -0.957933490038797"
## [1] "Atualizando os pesos: 1.34406067216498"
## [1] "Atualizando os pesos: -0.957724607899669"
## [1] "Atualizando os pesos: 1.45270380706616"
## [1] "Atualizando os pesos: -0.957724607899669"
## [1] "Atualizando os pesos: 1.45270380706616"
## [1] "Atualizando os pesos: -0.957724607899669"
## [1] "Atualizando os pesos: 1.45270380706616"
## [1] "Atualizando os pesos: -0.957724607899669"
## [1] "Atualizando os pesos: 1.45270380706616"
## [1] "Atualizando os pesos: -0.957724607899669"
## [1] "Atualizando os pesos: 1.45270380706616"
## [1] "Atualizando os pesos: -1.0201803674988"
## [1] "Atualizando os pesos: 1.54365262032219"
## [1] "Atualizando os pesos: -1.0201803674988"
## [1] "Atualizando os pesos: 1.54365262032219"
## [1] "Atualizando os pesos: -1.08263612709793"
## [1] "Atualizando os pesos: 1.61690711193307"
## [1] "Atualizando os pesos: -1.1242036727843"
## [1] "Atualizando os pesos: 1.7078559251891"
## [1] "Atualizando os pesos: -1.1242036727843"
## [1] "Atualizando os pesos: 1.7078559251891"
## [1] "Atualizando os pesos: -1.1242036727843"
## [1] "Atualizando os pesos: 1.7078559251891"
## [1] "Atualizando os pesos: -1.1242036727843"
## [1] "Atualizando os pesos: 1.7078559251891"
## [1] "Atualizando os pesos: -1.1242036727843"
## [1] "Atualizando os pesos: 1.7078559251891"
## [1] "Atualizando os pesos: -1.22843586020893"
## [1] "Atualizando os pesos: 1.74572177350971"
## [1] "Atualizando os pesos: -1.22843586020893"
## [1] "Atualizando os pesos: 1.74572177350971"
## [1] "Atualizando os pesos: -1.22843586020893"
## [1] "Atualizando os pesos: 1.74572177350971"
## [1] "Atualizando os pesos: -1.22843586020893"
## [1] "Atualizando os pesos: 1.74572177350971"
## [1] "Atualizando os pesos: -1.22843586020893"
## [1] "Atualizando os pesos: 1.74572177350971"
## [1] "Atualizando os pesos: -1.22843586020893"
## [1] "Atualizando os pesos: 1.74572177350971"
## [1] "Atualizando os pesos: -1.22843586020893"
## [1] "Atualizando os pesos: 1.74572177350971"
## [1] "Atualizando os pesos: -1.22843586020893"
## [1] "Atualizando os pesos: 1.74572177350971"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Erro Total: 20"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.24911519198256"
## [1] "Atualizando os pesos: 1.83667058676574"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Erro Total: 1"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.22801809593068"
## [1] "Atualizando os pesos: 1.94531372166691"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Erro Total: 1"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.2069209998788"
## [1] "Atualizando os pesos: 2.05395685656808"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Erro Total: 1"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Atualizando os pesos: -1.18582390382692"
## [1] "Atualizando os pesos: 2.16259999146925"
## [1] "Erro Total: 0"
Como pode ser visualizado, a estrutura de repetição rodou com a atualização de pesos até convergir