Implementação de rede neural do zero

Tamanho: px
Começar a partir da página:

Download "Implementação de rede neural do zero"

Transcrição

1 Implementação de rede neural do zero Nesta apostila, vamos implementar uma rede neural desde o início, sem usar uma implementação pronta. Os exemplos utilizando as funções de rede neural de OpenCV estão nas apostilas "aprendizagem" e "mle_avancada". Vamos utilizar o material de dois sites: 1) Introdutória: 2) Avançada: Para acompanhar esta apostila, devem olhar ao mesmo tempo o material correspondente desses dois sites. 1

2 O site: [haewin/goodreader/algoritmos/deep/stepbystep.pdf] apresenta a simulação numérica de uma rede neural muito simples. Vamos compreender como funciona, fazendo a implementação em C++. Pesos iniciais da rede [mattmazur.com] Numa rede neural "normal", cada neurônio tem um bias. No exemplo do site, há um único "bias" para todos os neurônios de uma camada de rede. Os nós i1 e i2 (input) não fazem nada. Só pegam as entradas e passam para os nós da camada escondida (h1 e h2). Os nós h1, h2 (hidden), o1 e o2 (output) calculam a média ponderada das entradas pelos pesos wi, mais o bias. Depois, aplicam a função de ativação sigmóide. Considere o nó h1: net h1 = w1*i1 + w2*i2 + b1*1 out h1 = sigmoid(net h1 ) Funções "logistic" e "sigmoid" são a mesma coisa: f(x)= 1 / ( 1 + exp(-x) ) Logistic sigmoid function [extraído da Wikipedia]. 2

3 Outra função de ativação bastante usada é tangente hiperbólico: A função custo ou função erro é calculada: C=E total = 1 2 (target output)2 Vamos calcular a saída de rede neural para entrada (0.05, 0.10). A saída desejada para essa entrada é (0.01, 0.99). Vamos também calcular os erros. net_h1 = w1*i1+w2*i2+b1*1; net_h1 = 0.15* * *1 = out_h1 = logistic(net_h1); out_h1 = ; out_h2 = ; net_o1 = w5*out_h1+w6*out_h2+b2*1; net_o1 = 0.4* * *1 = ; out_o1 = logistic(net_o1); out_o1 = out_o2 = err_o1 = 0.5 * elev2(target_o1-out_o1); err_o1 = 0.5 * elev2( ) = ; err_o2 = err_total = err_o1+err_o2; err_total =

4 //step01.cpp #include <cekeikon.h> double i1=0.05, i2=0.10; double w1=0.15, w2=0.20, w3=0.25, w4=0.30, b1=0.35; double net_h1, net_h2, out_h1, out_h2; double w5=0.40, w6=0.45, w7=0.50, w8=0.55, b2=0.60; double net_o1, net_o2, out_o1, out_o2; double target_o1=0.01, target_o2=0.99; // saida desejada double err_o1,err_o2,err_total; double logistic(double x) { return 1 / ( 1 + exp(-x) ); void forward() { net_h1=w1*i1+w2*i2+b1*1; xprint(net_h1); out_h1=logistic(net_h1); xprint(out_h1); net_h2=w3*i1+w4*i2+b1*1; xprint(net_h2); out_h2=logistic(net_h2); xprint(out_h2); net_o1=w5*out_h1+w6*out_h2+b2*1; xprint(net_o1); out_o1=logistic(net_o1); xprint(out_o1); net_o2=w7*out_h1+w8*out_h2+b2*1; xprint(net_o2); out_o2=logistic(net_o2); xprint(out_o2); err_o1 = 0.5 * elev2(target_o1-out_o1); xprint(err_o1); err_o2 = 0.5 * elev2(target_o2-out_o2); xprint(err_o2); err_total = err_o1+err_o2; xprint(err_total); int main() { forward(); ~/haepi/deep/redeneural/stepbystep $ step01 net_h1 = out_h1 = net_h2 = out_h2 = net_o1 = out_o1 = net_o2 = out_o2 = err_o1 = err_o2 = err_total = Como era de se esperar, a saída bate perfeitamente com a simulação do site. 4

5 backpropagation [mattmazur.com] No backpropagation, queremos diminuir o erro ou o custo (diferença entre a saída da rede e a saída desejada). Para isso, devemos calcular as derivadas parciais da função custo C (ou erro E) em relação a cada peso e cada bias. Depois, movemos "um pouco" cada peso e cada bias no sentido contrário à sua derivada parcial para diminuir o erro. Para especificar "um pouco", utiliza-se a taxa de aprendizagem (learning rate) η. Learning rate é denotada por α no tiny_dnn. Backpropagation: De [ w k w' k =w k η C w k b l b' l =b l η C b l O próximo programa faz backpropagation dos neurônios da camada de saída (output). 5

6 //step02.cpp #include <cekeikon.h> double i1=0.05, i2=0.10; double w1=0.15, w2=0.20, w3=0.25, w4=0.30, b1=0.35; double net_h1, net_h2, out_h1, out_h2; double w5=0.40, w6=0.45, w7=0.50, w8=0.55, b2=0.60; double net_o1, net_o2, out_o1, out_o2; double target_o1=0.01, target_o2=0.99; // saida desejada double err_o1, err_o2, err_total; double w1p, w2p, w3p, w4p, w5p, w6p, w7p, w8p; double logistic(double x) { return 1 / ( 1 + exp(-x) ); void forward() { net_h1=w1*i1+w2*i2+b1*1; xprint(net_h1); out_h1=logistic(net_h1); xprint(out_h1); net_h2=w3*i1+w4*i2+b1*1; xprint(net_h2); out_h2=logistic(net_h2); xprint(out_h2); net_o1=w5*out_h1+w6*out_h2+b2*1; xprint(net_o1); out_o1=logistic(net_o1); xprint(out_o1); net_o2=w7*out_h1+w8*out_h2+b2*1; xprint(net_o2); out_o2=logistic(net_o2); xprint(out_o2); err_o1 = 0.5 * elev2(target_o1-out_o1); xprint(err_o1); err_o2 = 0.5 * elev2(target_o2-out_o2); xprint(err_o2); err_total = err_o1+err_o2; xprint(err_total); void backward() { double eta=0.5; double derr_dw5=-(target_o1-out_o1)*out_o1*(1-out_o1)*out_h1; xprint(derr_dw5); w5p = w5 - eta*derr_dw5; xprint(w5p); double derr_dw6=-(target_o1-out_o1)*out_o1*(1-out_o1)*out_h2; xprint(derr_dw6); w6p = w6 - eta*derr_dw6; xprint(w6p); double derr_dw7=-(target_o2-out_o2)*out_o2*(1-out_o2)*out_h1; xprint(derr_dw7); w7p = w7 - eta*derr_dw7; xprint(w7p); double derr_dw8=-(target_o2-out_o2)*out_o2*(1-out_o2)*out_h2; xprint(derr_dw8); w8p = w8 - eta*derr_dw8; xprint(w8p); int main() { forward(); backward(); Saída: ~/haepi/deep/redeneural/stepbystep $ step02 net_h1 = out_h1 = net_h2 = out_h2 = net_o1 = out_o1 = net_o2 = out_o2 = err_o1 = err_o2 = err_total = derr_dw5 = w5p = derr_dw6 = w6p = derr_dw7 = w7p = derr_dw8 = w8p = Não vamos fazer simulação para a camada escondida, mas os cálculos são semelhantes. 6

7 Livro online sobre rede neural e deep learning: [haewin/goodreader/algoritmos/deep/neural_network_and_deep_learning.pdf] traz uma descrição mais detalhada de como funciona uma rede neural. Esse livro traz os exemplos em Python. Vamos traduzir esses programas para C++ e verificar que os resultados são praticamente iguais aos das implementações em Python. Isto certificará que aprendemos corretamente os conceitos apresentados no livro. Os exemplos abaixo seguirão esse livro. O programa rede1 abaixo treina rede neural de 3 camadas com número de neurônios (2,2,2) para que a saída P=(P1, P2) para a entrada X=(0.05, 0.1) fique cada vez mais semelhante à saída ideal Y=(0.01, 0.99) - é o mesmo exemplo que estávamos tentando implementar antes. Inicializa pesos w e biases b com função gaussiana de média zero e desvio-padrão um. Repete 40 vezes: 1) Feed-forward. 2) Calcula erro. 3) Feed-backward. 4) Update weights and biases (gradient descent) Diferentemente do exemplo anterior, aqui cada neurônio tem um bias. Cada aresta tem um weight. Cada neurônio que não seja de entrada possui função de ativação sigmoide na saída. Quando tem somente uma amostra de treinamento, função custo ou função erro é: C(w,b)= y(x) a 2 x = amostra de entrada y = saída ideal a = saída gerada pelo algoritmo C(w 1,...,w K,b 1,...,b L )= ( C,..., C, C..., C T, w 1 w K b 1 b L ) w k w' k =w k η C w k b l b' l =b l η C b l 7

8 //rede1.cpp //Treina rede para que quando a entrada for X=(0.05, 0.1) //a saida seja Y=(0.01, 0.99) #include <cekeikon.h> float logistic(float x) { // Funcao logistic return 1 / ( 1 + exp(-x) ); Mat_<float> logistic(mat_<float> x) { // Calcula funcao logistic de cada elemento da matriz Mat_<float> y(x.size()); for (unsigned i=0; i<x.total(); i++) y(i)=logistic(x(i)); return y; float Dlogistic(float x) { // Derivada da funcao logistic float z=logistic(x); return z*(1-z); Mat_<float> Dlogistic(Mat_<float> x) { // Calcula derivada da funcao logistic para cada elemento da matriz Mat_<float> y(x.size()); for (unsigned i=0; i<x.total(); i++) y(i)=dlogistic(x(i)); return y; class RedeNeural { Mat_<int> nneuronio; vector< Mat_<float> > w; // pesos - um para cada aresta vector< Mat_<float> > b; // bias - um para cada neurônio exceto entrada public: RedeNeural(Mat_<int> _nneuronio); void train(mat_<float> x, Mat_<float> y); ; RedeNeural::RedeNeural(Mat_<int> _nneuronio) { // Cria redeneural com o numero de neuronios em cada camada // especificada pelo vetor _nneuronio // _nneuronio deve ter uma linha // e numero de colunas igual a numero de camadas da rede RNG r(7); r.next(); nneuronio=_nneuronio.clone(); w.resize(nneuronio.total()); // nao existe w[0] for (unsigned i=1; i<w.size(); i++) { w[i].create(nneuronio(i),nneuronio(i-1)); r.fill(w[i],rng::normal,0.0,1.0); b.resize(nneuronio.total()); // nao existe b[0] for (unsigned i=1; i<b.size(); i++) { b[i].create(nneuronio(i),1); r.fill(b[i],rng::normal,0.0,1.0); void RedeNeural::train(Mat_<float> x, Mat_<float> y) { // Treina rede neural para que a saida de x concorde com y vector< Mat_<float> > a(nneuronio.total()); // valores dos neurônios antes de sigmoide // a[0] = x vector< Mat_<float> > z(nneuronio.total()); // valores dos neurônios depois de sigmoide // Nao existe z[0] vector< Mat_<float> > delta(nneuronio.total()); for (unsigned passo=0; passo<40; passo++) { //======== feed forward ================= a[0]=x.clone(); for (unsigned i=1; i<a.size(); i++) { z[i]=w[i]*a[i-1]+b[i]; a[i]=logistic(z[i]); //========= calcula erro ======================== int L=a.size()-1; printf("passo=%-5d erro=%9.6f\n",passo,norm(a[l]-y)); //cout << "Erro: " << norm(a[l]-y) << endl; //========== feed backward (cap 2, BP1 e BP2) ====================== 8

9 multiply( a[l]-y, Dlogistic(z[L]), delta[l]); // (BP1) for (unsigned i=l-1; i>0; i--) multiply( w[i+1].t()*delta[i+1], Dlogistic(z[i]), delta[i]); // (BP2) //============== update weights and biases (cap 2, BP3 e BP4) ================== float eta=3.0; for (unsigned i=l; i>0; i--) { w[i] = w[i] - eta * delta[i]*a[i-1].t(); // (BP4) b[i] = b[i] - eta * delta[i]; // (BP3) int main() { Mat_<float> x = ( Mat_<float>(2,1) << 0.05, 0.1 ); Mat_<float> y = ( Mat_<float>(2,1) << 0.01, 0.99 ); Mat_<int> v = (Mat_<int>(1,3) << 2,2,2); RedeNeural ind(v); ind.train(x,y); O vetor de matrizes w armazena os pesos das arestas. O vetor de vetores b armazena os bias dos neurônios. Os elementos w[0] e b[0] não existem (começam a ser usados a partir do índice 1). O vetor de vetores z armazena os valores de saída dos neurônios, antes de calcular a função de ativação sigmóide. O vetor de vetores a armazena os valores de saída dos neurônios, após calcular a função de ativação sigmóide. a[0] contém os valores de entrada da rede neural. A função multiply efetua multiplicação de Hadamard (elemento a elemento). 9

10 Os erros L2 obtidos são: passo=0 erro= passo=1 erro= passo=2 erro= passo=3 erro= passo=4 erro= passo=32 erro= passo=33 erro= passo=34 erro= passo=35 erro= passo=36 erro= passo=37 erro= passo=38 erro= passo=39 erro= Note que o erro diminui com o número de iterações. Backpropagation: Equações do livro: Equações adaptadas para o programa: De [neuralnetworksanddeeplearning.com]. δ L =(a L y) σ ' (z L ) (BP1) L é a última camada. Multiplicação de Hadamard (elemento a elemento). σ é a derivada do sigmoide. δ l =((w l 1 ) T δ l +1 ) σ ' (z l ) (BP2) l é camada interior de rede neural (exceto a última). w l =w l ηδ l (a l 1 ) T (BP4) η é a taxa de aprendizagem b l =b l ηδ l (BP3) 10

11 Cada amostra de treinamento gera um erro. É possível calcular as derivadas parciais dessa função erro em relação à cada peso e bias. Backpropagation minimiza o erro fazendo pesos e bias andar no sentido contrário às derivadas parciais. Quando tem duas ou mais amostras de treinamento, é necessário calcular média da função custo para todas as amostras. E calcular as derivadas parciais (em relação à w e b) dessa média da função custo. C(w,b)= 1 2n x y(x) a 2 x = amostra de entrada y = saída ideal a = saída gerada pelo algoritmo n = número de amostras Dw[l] é a somatória para todas as amostras de treinamento: (D w ) l = (x, y) δ l (a l 1 ) T (BP5) Db[l] é a somatória para todas as amostras de treinamento: (D b ) l = (x, y) δ l (BP6) O programa rede3 abaixo treina rede neural de 3 camadas com número de neurônios (2,2,2) para que a saída P=(P1, P2) para a entrada X=(0.9, 0.1) seja Y=(0.1, 0.9) e a saída para entrada X=(0.1, 0.9) seja Y=(0.9, 0.1). Repete 200 vezes: Repete para cada uma das duas amostras: 1) Feed-forward. 2) Calcula erro. 3) Feed-backward. 4) Update weights and biases (gradient descent), tirando a média dos dois gradientes (para as duas amostras de treinamento). Para a entrada: 0.9, 0.1, 0.1, 0.9, 0.8, 0.0, 0.2, 0.9 A saída obtida é: [ , ; , ; , ; , ] 11

12 //rede3.cpp //Treina rede neural de 3 camadas com número de neurônios (2,2,2) //para que a saída para a entrada X=(0.9, 0.1) seja Y=(0.1, 0.9) //e a saída para entrada X=(0.1, 0.9) seja Y=(0.9, 0.1). #include <cekeikon.h> float logistic(float x) { return 1 / ( 1 + exp(-x) ); Mat_<float> logistic(mat_<float> x) { Mat_<float> y(x.size()); for (unsigned i=0; i<x.total(); i++) y(i)=logistic(x(i)); return y; float Dlogistic(float x) { float z=logistic(x); return z*(1-z); Mat_<float> Dlogistic(Mat_<float> x) { Mat_<float> y(x.size()); for (unsigned i=0; i<x.total(); i++) y(i)=dlogistic(x(i)); return y; class RedeNeural { Mat_<int> nneuronio; vector< Mat_<float> > w; vector< Mat_<float> > b; public: RedeNeural(Mat_<int> _nneuronio); void train(mat_<float> ax, Mat_<float> ay); Mat_<float> predict(mat_<float> qx); ; RedeNeural::RedeNeural(Mat_<int> _nneuronio) { RNG r(18); r.next(); nneuronio=_nneuronio.clone(); w.resize(nneuronio.total()); // nao existe w[0] for (unsigned i=1; i<w.size(); i++) { w[i].create(nneuronio(i),nneuronio(i-1)); r.fill(w[i],rng::normal,0.0,1.0); b.resize(nneuronio.total()); // nao existe b[0] for (unsigned i=1; i<b.size(); i++) { b[i].create(nneuronio(i),1); r.fill(b[i],rng::normal,0.0,1.0); void RedeNeural::train(Mat_<float> ax, Mat_<float> ay) { int L=nNeuronio.total()-1; // Indice da ultima camada da rede if (ax.cols!=nneuronio(0)) erro("erro: Dimensao entrada"); if (ay.cols!=nneuronio(l)) erro("erro: Dimensao saida"); if (ax.rows!=ay.rows) erro("erro: Amostras ax!= amostras ay"); int N=ax.rows; // Numero de amostras vector< Mat_<float> > a(nneuronio.total()); vector< Mat_<float> > z(nneuronio.total()); vector< Mat_<float> > delta(nneuronio.total()); vector< Mat_<float> > Dw(nNeuronio.total()); vector< Mat_<float> > Db(nNeuronio.total()); for (unsigned passo=0; passo<200; passo++) { for (unsigned s=0; s<n; s++) { //======== feed forward ================= a[0]=ax.row(s).t(); for (unsigned i=1; i<a.size(); i++) { z[i]=w[i]*a[i-1]+b[i]; a[i]=logistic(z[i]); //========== feed backward ====================== multiply( a[l]-ay.row(s).t(), Dlogistic(z[L]), delta[l]); // (BP1) for (unsigned i=l-1; i>0; i--) { multiply( Mat_<float>(w[i+1].t()*delta[i+1]), Dlogistic(z[i]), delta[i]); // (BP2) 12

13 for (unsigned i=l; i>0; i--) { // (BP5) (BP6) if (s==0) { Dw[i] = delta[i]*a[i-1].t(); Db[i] = delta[i]; else { Dw[i] += delta[i]*a[i-1].t(); Db[i] += delta[i]; //============== update weights and biases ================== float eta=3.0; for (unsigned i=l; i>0; i--) { w[i] = w[i] - (eta/n) * Dw[i]; // (BP4) b[i] = b[i] - (eta/n) * Db[i]; // (BP3) Mat_<float> RedeNeural::predict(Mat_<float> qx) { if (qx.cols!=nneuronio(0)) erro("erro: Dimensao entrada"); int L=nNeuronio.total()-1; // Indice da ultima camada da rede int N=qx.rows; // Numero de amostras Mat_<float> qp(n,nneuronio(l)); vector< Mat_<float> > a(nneuronio.total()); vector< Mat_<float> > z(nneuronio.total()); for (unsigned s=0; s<n; s++) { a[0]=qx.row(s).t(); for (unsigned i=1; i<a.size(); i++) { z[i]=w[i]*a[i-1]+b[i]; a[i]=logistic(z[i]); qp.row(s)=a[l].t(); return qp; int main() { Mat_<float> ax = ( Mat_<float>(2,2) << 0.9, 0.1, 0.1, 0.9 ); Mat_<float> ay = ( Mat_<float>(2,2) << 0.1, 0.9, 0.9, 0.1 ); Mat_<int> v = (Mat_<int>(1,3) << 2,2,2); RedeNeural ind(v); ind.train(ax,ay); Mat_<float> qx = ( Mat_<float>(4,2) << 0.9, 0.1, 0.1, 0.9, 0.8, 0.0, 0.2, 0.9 ); Mat_<float> qp=ind.predict(qx); cout << qp << endl; 13

14 Stochastic gradient descent (SGD): Algoritmo de backpropagation faz: w k w' k =w k η C w k b l b' l =b l η C b l onde o custo C é o erro médio L2 para todas as amostras de treinamento. Para calcular gradiente C, é necessário calcular o gradiente C x com respeito a cada amostra de treinamento x e tirar média delas: C= 1 n ( x C x ). Quando a quantidade de amostras de treinamento é grande, demora muito tempo para calcular e fazer uma única descida de gradiente. No stochastic gradient descent, estima-se o gradiente C calculando C x para um pequeno número de amostras de treinamento x escolhidos aleatoriamente. Estas amostras de treinamento escolhidos aleatoriamente são chamados de mini-batch. Um epoch de treinamento é quando usamos todas as amostras de treinamento (divididos em minibatches) para fazer descida de gradiente. Exemplo: Suponha que queiramos treinar uma rede neural para reconhecer dígitos manuscritos usando o banco de imagens MNIST que possui amostras de treinamento. Treinar 30 epochs com mini-batch m=10 significa: 1) Dividir aleatoriamente amostras em 6000 mini-batches com 10 amostras cada. 2) Aplicar descida de gradiente estocástico usando cada mini-batch de 10 amostras, até usar todos os 6000 mini-batches. 3) Repetir 30 vezes (o número de epochs) os passos 1 e 2. No site: há boa explicação dada por Pankaj Malhotra sobre estes conceitos. Copio abaixo: "Gradient descent is an iterative algorithm which computes the gradient of a function and uses it to update the parameters of the function in order to find a maximum or minimum value of the function. In case of Neural Networks, the function to be optimized (minimized) is the loss function, and the parameters are the weights and biases in the network. Number of iterations (n): The number of times the gradient is estimated and the parameters of the neural network are updated using a batch of training instances. The batch size B is the number of training instances used in one iteration. When the total number of training instances (N) is large, a small number of training instances (B<<N) which constitute a mini-batch can be used in one iteration to estimate the gradient of the loss function and update the parameters of the neural network. It takes n (=N/B) iterations to use the entire training data once. This constitutes an epoch. So, the total number of times the parameters get updated is (N/B)*E, where E is the number of epochs. Three modes of gradient descent: 14

15 Batch mode: N=B, one epoch is same as one iteration. Mini-batch mode: 1<B<N, one epoch consists of N/B iterations. Stochastic mode: B=1, one epoch takes N iterations." AdaGrad (adaptive gradient algorithm) é um stochastic gradient descent modificado com taxa de aprendizagem η adaptativo. Também há Adam (adaptive moment estimation) [Kingma 2015]. 15

16 O programa rede7 abaixo treina rede neural de 3 camadas com número de neurônios (nlado*nlado, 30, 10) para reconhecer os dígitos do banco de dados MNIST. Usa mini-batches de tamanho m=10, P=30 epochs e taxa de aprendizagem η=3. Obtém taxa de erro 4.04% usando nlado=12 e erro 4.58% usando nlado=28. Não inverte as cores do MNIST (fundo=preto letras=branco). Usa bounding-box: MNIST mnist(nlado,false,true); //rede7.cpp //Classifica MNIST usando mini-batch m=10 e P=30 epochs //Obtem taxa de erro 4.04% usando nlado=12 #include <cekeikon.h> class RedeNeural { float logistic(float x); // Funcao logistic Mat_<float> logistic(mat_<float> x); // Calcula funcao logistic de cada elemento da matriz float Dlogistic(float x); // Derivada da funcao logistic Mat_<float> Dlogistic(Mat_<float> x); // Calcula derivada da logistic para cada elemento da matriz void trocalinhas(mat_<float>& a, int i, int j); void embaralhalinhas(mat_<float>& ax, Mat_<float>& ay, int semente); Mat_<int> nneuronio; // Numero de neuronios em cada camada vector< Mat_<float> > w; // weight vector< Mat_<float> > b; // bias public: RedeNeural(Mat_<int> _nneuronio); // construtor void train(mat_<float> ax, Mat_<float> ay); // treina Mat_<float> predict(mat_<float> qx); // faz previsao ; float RedeNeural::logistic(float x) { return 1 / ( 1 + exp(-x) ); Mat_<float> RedeNeural::logistic(Mat_<float> x) { Mat_<float> y(x.size()); for (unsigned i=0; i<x.total(); i++) y(i)=logistic(x(i)); return y; float RedeNeural::Dlogistic(float x) { float z=logistic(x); return z*(1-z); Mat_<float> RedeNeural::Dlogistic(Mat_<float> x) { Mat_<float> y(x.size()); for (unsigned i=0; i<x.total(); i++) y(i)=dlogistic(x(i)); return y; void RedeNeural::trocaLinhas(Mat_<float>& a, int i, int j) { for (unsigned c=0; c<a.cols; c++) { swap(a(i,c),a(j,c)); void RedeNeural::embaralhaLinhas(Mat_<float>& ax, Mat_<float>& ay, int semente) { if (ax.rows!=ay.rows) erro("erro: Amostras ax!= amostras ay"); RNG rng(semente); rng.next(); for (unsigned i=0; i<teto(ax.rows,2); i++) { unsigned j=rng.uniform(i+1,ax.rows); trocalinhas(ax,i,j); trocalinhas(ay,i,j); RedeNeural::RedeNeural(Mat_<int> _nneuronio) { RNG r(18); r.next(); 16

17 nneuronio=_nneuronio.clone(); w.resize(nneuronio.total()); // nao existe w[0] for (unsigned i=1; i<w.size(); i++) { w[i].create(nneuronio(i),nneuronio(i-1)); r.fill(w[i],rng::normal,0.0,1.0); b.resize(nneuronio.total()); // nao existe b[0] for (unsigned i=1; i<b.size(); i++) { b[i].create(nneuronio(i),1); r.fill(b[i],rng::normal,0.0,1.0); void RedeNeural::train(Mat_<float> ax, Mat_<float> ay) { int L=nNeuronio.total(); // Numero de camadas da rede if (ax.cols!=nneuronio(0)) erro("erro: Dimensao entrada"); if (ay.cols!=nneuronio(l-1)) erro("erro: Dimensao saida"); if (ax.rows!=ay.rows) erro("erro: Amostras ax!= amostras ay"); int N=ax.rows; // Numero de amostras int M=10; // tamanho dos mini-batches int K=N/M; // numero de mini-batches 60000/10=6000 int P=30; // numero de epochs vector< Mat_<float> > a(l); vector< Mat_<float> > z(l); vector< Mat_<float> > delta(l); vector< Mat_<float> > Dw(L); vector< Mat_<float> > Db(L); for (unsigned p=0; p<p; p++) { // para cada um dos 30 epochs printf("epoch %d\n",p); embaralhalinhas(ax,ay,p+7); for (unsigned k=0; k<k; k++) { // para cada um dos 6000 mini-batches for (unsigned m=0; m<m; m++) { // para cada uma das 10 amostras do mini-batch int s=k*m+m; //======== feed forward ================= a[0]=ax.row(s).t(); for (unsigned i=1; i<a.size(); i++) { z[i]=w[i]*a[i-1]+b[i]; a[i]=logistic(z[i]); //========== feed backward ====================== multiply( a[l-1]-ay.row(s).t(), Dlogistic(z[L-1]), delta[l-1]); for (unsigned i=l-2; i>0; i--) { multiply( Mat_<float>(w[i+1].t()*delta[i+1]), Dlogistic(z[i]), delta[i]); for (unsigned i=l-1; i>0; i--) { if (m==0) { //epoch 0, sample 0 Dw[i] = delta[i]*a[i-1].t(); Db[i] = delta[i]; else { Dw[i] += delta[i]*a[i-1].t(); Db[i] += delta[i]; // cada sample //============== update weights and biases (para cada mini-batch) ================== float eta=3.0; for (unsigned i=l-1; i>0; i--) { w[i] = w[i] - (eta/m) * Dw[i]; b[i] = b[i] - (eta/m) * Db[i]; // cada um dos 6000 mini-batches // cada um dos 10 epochs Mat_<float> RedeNeural::predict(Mat_<float> qx) { if (qx.cols!=nneuronio(0)) erro("erro: Dimensao entrada"); int L=nNeuronio.total(); // Numero de camadas da rede int N=qx.rows; // Numero de amostras Mat_<float> qp(n,nneuronio(l-1)); vector< Mat_<float> > a(l); vector< Mat_<float> > z(l); 17

18 for (unsigned s=0; s<n; s++) { a[0]=qx.row(s).t(); for (unsigned i=1; i<a.size(); i++) { z[i]=w[i]*a[i-1]+b[i]; a[i]=logistic(z[i]); qp.row(s)=a[l-1].t(); return qp; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< int main(int argc, char** argv) { if (argc!=2) erro("ann nlado"); int nlado; convarg(nlado,argv[1]); if (nlado<2) erro("erro: nlado fora do intervalo valido"); MNIST mnist(nlado,false,true); mnist.le("c:/haebase/mnist"); // Converte ay com rotulos 0..9 para ay2 com 10 saidas Mat_<float> ay2(mnist.na,10); ay2.setto(0.0); for (unsigned i=0; i<mnist.ay.rows; i++) { int j=int(mnist.ay(i)); assert(0<=j && j<10); ay2(i,j)=1.0; Mat_<int> v = (Mat_<int>(1,3) << nlado*nlado, 30, 10); RedeNeural ind(v); ind.train(mnist.ax,ay2); Mat_<float> saida=ind.predict(mnist.qx); for (int l=0; l<mnist.nq; l++) { mnist.qp(l)=argmax(saida.row(l)); printf("erros=%10.2f\%\n",100.0*mnist.contaerros()/mnist.nq); 18

19 O programa rede-ocv abaixo treina a classe rede neural do OpenCV 2.X de 3 camadas com número de neurônios (nlado*nlado, 30, 10) para reconhecer os dígitos do banco de dados MNIST. Obtém taxa de erro 8.65% usando nlado=12. Note que a nossa implementação obtém taxa de erro bem menor (4.04%) nas mesmas condições. Podemos concluir que a implementação de rede neural do OpenCV não é muito boa. Não inverte as cores do MNIST (fundo=preto letras=branco). Usa bounding-box. MNIST mnist(nlado,false,true); //rede-ocv.cpp //Classifica MNIST usando rede neural do opencv 2.X //Obtem taxa de erro 8.65% usando nlado=12 e leva 25s #include <cekeikon.h> //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< int main(int argc, char** argv) { if (argc!=2) erro("ann nlado"); int nlado; convarg(nlado,argv[1]); if (nlado<2) erro("erro: nlado fora do intervalo valido"); MNIST mnist(nlado,false,true); mnist.le("c:/haebase/mnist"); // Converte ay com rotulos 0..9 para ay2 com 10 saidas Mat_<float> ay2(mnist.na,10); ay2.setto(0.0); for (unsigned i=0; i<mnist.ay.rows; i++) { int j=int(mnist.ay(i)); assert(0<=j && j<10); ay2(i,j)=1.0; Mat_<int> v = (Mat_<int>(1,3) << nlado*nlado, 30, 10); CvANN_MLP ind(v); ind.train(mnist.ax,ay2,mat()); Mat_<float> saida; ind.predict(mnist.qx,saida); for (int l=0; l<mnist.nq; l++) { mnist.qp(l)=argmax(saida.row(l)); printf("erros=%10.2f\%\n",100.0*mnist.contaerros()/mnist.nq); 19

20 Taxas de erros obtidos. Os dois constantes booleanos indicam inverte_cores / bounding-box. Erro true/false true/true false/true false/false rede7 nlado=12 epochs=10 rede7 nlado=10 epochs=30 rede7 nlado=12 epochs=30 rede7 nlado=16 epochs=30 rede7 nlado=20 epochs=30 rede-ocv nlado=12 rede-ocv nlado= % 5.91% 4.62% 68s 8.26% 22.86s 4.42% 26s 4.12% 4.04% 68s 4.21% 4.13% 120s 8.65% 25s 8.71% 65s 4.49% Rede7 é a minha implementação. Usa mini-batches m=10. Rede-ocv usa a implementação de rede neural do opencv 2.X. A minha implementação comete bem menos erros que a implementação do opencv e tem velocidade semelhante (usando 10 epochs). Meu programa usando 30 neurônios na camada escondida (rede7) e 30 epochs: nlado erro 6.47% 4.49% 4.17% 4.12% 4.04% 4.50% 4.21% 4.13% 4.58% tempo (treino+teste) 41s 48s 53s 61s 68s 79s 90s 119s 200s Meu programa usando 100 neurônios na camada escondida e 30 epochs: nlado erro 2.71% 12.16% tempo (treino+teste)?? 700 Observação: Aumentando o número de neurônios da camada escondida de 30 para 100 neurônios, o erro cai para nlado=12 mas aumenta para nlado=28. Provavelmente, temos um "overfitting". Resolveremos este problema com regularização. 20

21 Regularização L2 cria penalidade para pesos grandes. A função custo torna-se: C=C o + λ w 2 2n onde C o é a função custo original (função de erro), λ é o parâmtro de regularização, n é o número de amostras de treinamento e w são os pesos da redes. Intuitivamente, o efeito de regularização é fazer com que rede com pesos pequenos tenha menor custo. Backpropagation vai tentar minimizar o erro e ao mesmo tempo a soma dos pesos. Para fazer regularização, o livro faz a seguinte modificação em Python: network.py (sem regularização): self.weights = [w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)] network2.py (com regularização): self.weights = [(1-eta*(lmbda/n))*w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)] Faremos a mesma modificação em C++: rede7.cpp (sem regularização): M é tamanho de mini-batch w[i] = w[i] - (eta/m) * Dw[i]; rede8.cpp (com regularização): M é tamanho de mini-batch w[i] = (1-(eta*lmbda/N))*w[i] - (eta/m) * Dw[i]; lmbda (λ) é parâmetro de regularização. Meu programa (rede8) usando 100 neurônios na camada escondida e 30 epochs com regularização: Lmbda=5, eta=0.5. nlado erro 3.53% 2.55% tempo (treino+teste) 189s 747s Repare que o erro diminuiu substancialmente para nlado=28 (de 12% para 2,5%). A minha implementação C++ comete erro semelhante ao relatado no livro para implementação em Python. 21

22 Erros obtidos para diferentes parâmetros com regularização: nlado=28 eta=0.5 hidden neurons=100 inicialização=g(0,1) rede8 lmbda erro 2.55% 2.26% 2.34% tempo 747s 734s?? nlado=12 eta=0.5 hidden neurons=100 inicialização=g(0,1) rede8 lmbda erro 3.53% 3.13% 2.49% 2.30% tempo 189s 191s?? nlado=12 hidden neurons=100 inicialização=g(0,1) lmbda=1 rede8 eta erro 13.89% 2.35% 2.30% 2.04% 2.24% 2.41% nlado=12 eta=0.5 hidden neurons=100 inicialização de pesos=g(0,1/n) rede9 lmbda erro 3.38% 2.82% tempo Esta inicialização de pesos não diminui o erro. Com stochastic gradient descent e regularização, chegamos ao erro da ordem de 2%, usando rede neural com 3 camadas (uma camada escondida). 22

23 //rede8.cpp //Classifica MNIST usando mini-batch m=10 e P=30 epochs //Usa rede neural com 100 neuronios na camada escondida. //Usa regularizacao com lmbda=1 //Usando eta=1, chega-se a 2.04% de erro. #include <cekeikon.h> class RedeNeural { float logistic(float x); // Funcao logistic Mat_<float> logistic(mat_<float> x); // Calcula funcao logistic de cada elemento da matriz float Dlogistic(float x); // Derivada da funcao logistic Mat_<float> Dlogistic(Mat_<float> x); // Calcula derivada da funcao logistic para cada elemento da matriz void trocalinhas(mat_<float>& a, int i, int j); void embaralhalinhas(mat_<float>& ax, Mat_<float>& ay, int semente); Mat_<int> nneuronio; // Numero de neuronios em cada camada vector< Mat_<float> > w; // weight vector< Mat_<float> > b; // bias public: RedeNeural(Mat_<int> _nneuronio); // construtor void train(mat_<float> ax, Mat_<float> ay); // treina Mat_<float> predict(mat_<float> qx); // faz previsao ; float RedeNeural::logistic(float x) { return 1 / ( 1 + exp(-x) ); Mat_<float> RedeNeural::logistic(Mat_<float> x) { Mat_<float> y(x.size()); for (unsigned i=0; i<x.total(); i++) y(i)=logistic(x(i)); return y; float RedeNeural::Dlogistic(float x) { float z=logistic(x); return z*(1-z); Mat_<float> RedeNeural::Dlogistic(Mat_<float> x) { Mat_<float> y(x.size()); for (unsigned i=0; i<x.total(); i++) y(i)=dlogistic(x(i)); return y; void RedeNeural::trocaLinhas(Mat_<float>& a, int i, int j) { for (unsigned c=0; c<a.cols; c++) { swap(a(i,c),a(j,c)); void RedeNeural::embaralhaLinhas(Mat_<float>& ax, Mat_<float>& ay, int semente) { if (ax.rows!=ay.rows) erro("erro: Amostras ax!= amostras ay"); RNG rng(semente); rng.next(); for (unsigned i=0; i<teto(ax.rows,2); i++) { unsigned j=rng.uniform(i+1,ax.rows); trocalinhas(ax,i,j); trocalinhas(ay,i,j); RedeNeural::RedeNeural(Mat_<int> _nneuronio) { RNG r(18); r.next(); nneuronio=_nneuronio.clone(); w.resize(nneuronio.total()); // nao existe w[0] for (unsigned i=1; i<w.size(); i++) { w[i].create(nneuronio(i),nneuronio(i-1)); r.fill(w[i],rng::normal,0.0,1.0); b.resize(nneuronio.total()); // nao existe b[0] for (unsigned i=1; i<b.size(); i++) { b[i].create(nneuronio(i),1); 23

24 r.fill(b[i],rng::normal,0.0,1.0); void RedeNeural::train(Mat_<float> ax, Mat_<float> ay) { int L=nNeuronio.total(); // Numero de camadas da rede if (ax.cols!=nneuronio(0)) erro("erro: Dimensao entrada"); if (ay.cols!=nneuronio(l-1)) erro("erro: Dimensao saida"); if (ax.rows!=ay.rows) erro("erro: Amostras ax!= amostras ay"); int N=ax.rows; // Numero de amostras int M=10; // tamanho dos mini-batches int K=N/M; // numero de mini-batches 60000/10=6000 int P=30; // numero de epochs //int P=10; // numero de epochs vector< Mat_<float> > a(l); vector< Mat_<float> > z(l); vector< Mat_<float> > delta(l); vector< Mat_<float> > Dw(L); vector< Mat_<float> > Db(L); for (unsigned p=0; p<p; p++) { // para cada um dos 10 ou 30 epochs printf("epoch %d\n",p); embaralhalinhas(ax,ay,p+7); for (unsigned k=0; k<k; k++) { // para cada um dos 6000 mini-batches for (unsigned m=0; m<m; m++) { // para cada uma das 10 amostras do mini-batch int s=k*m+m; //======== feed forward ================= a[0]=ax.row(s).t(); for (unsigned i=1; i<a.size(); i++) { z[i]=w[i]*a[i-1]+b[i]; a[i]=logistic(z[i]); //========= calcula erro ======================== // cout << "Sample " << s << " erro: " << norm(a[l-1]-ay.row(s).t()) << endl; //========== feed backward ====================== multiply( a[l-1]-ay.row(s).t(), Dlogistic(z[L-1]), delta[l-1]); for (unsigned i=l-2; i>0; i--) { multiply( Mat_<float>(w[i+1].t()*delta[i+1]), Dlogistic(z[i]), delta[i]); for (unsigned i=l-1; i>0; i--) { if (m==0) { //epoch 0, sample 0 Dw[i] = delta[i]*a[i-1].t(); Db[i] = delta[i]; else { Dw[i] += delta[i]*a[i-1].t(); Db[i] += delta[i]; // cada sample //============== update weights and biases ================== //float eta=3.0; float eta=1.0; float lmbda=1.0; for (unsigned i=l-1; i>0; i--) { //w[i] = w[i] - (eta/m) * Dw[i]; w[i] = (1-(eta*lmbda/N))*w[i] - (eta/m)*dw[i]; b[i] = b[i] - (eta/m) * Db[i]; // cada um dos 6000 mini-batches // cada um dos 10 epochs Mat_<float> RedeNeural::predict(Mat_<float> qx) { if (qx.cols!=nneuronio(0)) erro("erro: Dimensao entrada"); int L=nNeuronio.total(); // Numero de camadas da rede int N=qx.rows; // Numero de amostras Mat_<float> qp(n,nneuronio(l-1)); vector< Mat_<float> > a(l); vector< Mat_<float> > z(l); for (unsigned s=0; s<n; s++) { a[0]=qx.row(s).t(); 24

25 for (unsigned i=1; i<a.size(); i++) { z[i]=w[i]*a[i-1]+b[i]; a[i]=logistic(z[i]); qp.row(s)=a[l-1].t(); return qp; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< int main(int argc, char** argv) { if (argc!=2) erro("ann nlado"); int nlado; convarg(nlado,argv[1]); if (nlado<2) erro("erro: nlado fora do intervalo valido"); MNIST mnist(nlado,false,true); mnist.le("c:/haebase/mnist"); // Converte ay com rotulos 0..9 para ay2 com 10 saidas Mat_<float> ay2(mnist.na,10); ay2.setto(0.0); for (unsigned i=0; i<mnist.ay.rows; i++) { int j=int(mnist.ay(i)); assert(0<=j && j<10); ay2(i,j)=1.0; Mat_<int> v = (Mat_<int>(1,3) << nlado*nlado, 100, 10); RedeNeural ind(v); ind.train(mnist.ax,ay2); Mat_<float> saida=ind.predict(mnist.qx); for (int l=0; l<mnist.nq; l++) { mnist.qp(l)=argmax(saida.row(l)); printf("erros=%10.2f\%\n",100.0*mnist.contaerros()/mnist.nq); 25

Redes Neurais Artificiais

Redes Neurais Artificiais Redes Neurais Artificiais Fabrício Olivetti de França Universidade Federal do ABC Tópicos 1. Redes Neurais Biológicas 2. Neurônio Artificial 3. Rede Neural Artificial 4. Keras 1 Redes Neurais Biológicas

Leia mais

Redes Neurais Artificiais - Introdução. Visão Computacional

Redes Neurais Artificiais - Introdução. Visão Computacional Redes Neurais Artificiais - Introdução Visão Computacional Inspiração 2 Inspiração 3 Inspiração Atividade seletivanas conexões Soma os impulsos e passa a diante 4 Inspiração As conexões entre os dendritos

Leia mais

Algoritmos de Aprendizado. Formas de Aprendizado. Aprendizado Batch x Incremental. Aprendizado Batch x Incremental

Algoritmos de Aprendizado. Formas de Aprendizado. Aprendizado Batch x Incremental. Aprendizado Batch x Incremental Algoritmos de Aprendizado Regra de Hebb Perceptron Delta Rule (Least Mean Square Multi-Layer Perceptrons (Back Propagation Radial Basis Functions (RBFs Competitive Learning Hopfield Formas de Aprendizado

Leia mais

Algoritmos de Aprendizado. Formas de Aprendizado. Aprendizado Batch x Incremental. Aprendizado Batch x Incremental

Algoritmos de Aprendizado. Formas de Aprendizado. Aprendizado Batch x Incremental. Aprendizado Batch x Incremental Algoritmos de Aprendizado Regra de Hebb Perceptron Delta Rule (Least Mean Square Back Propagation Formas de Aprendizado Existe dois métodos básicos de aplicação do algoritmo Back Propagation: Aprendizado

Leia mais

Imagem f

Imagem f Imagem integral (ou integral da imagem) Imagem f. 8 3 9 7 1 8 5 2 8 7 3 6 5 2 9 3 s: Integral da imagem f (imagem integral) 8 11 20 27 9 20 34 43 17 35 52 67 22 42 68 86 s(u,v) = f(u,v)+s(u-1,v)+s(u,v-1)-s(u-1,v-1)

Leia mais

Redes Neurais Artificiais

Redes Neurais Artificiais Redes Neurais Artificiais Marcelo K. Albertini 24 de Julho de 2014 2/34 Conteúdo Perceptron Gradiente descendente Redes multicamadas Retropropagação de erros 3/34 Modelos conexionistas Humanos Tempo de

Leia mais

Regra de Hebb Perceptron Delta Rule (Least Mean Square) Multi-Layer Perceptrons (Back Propagation) Hopfield Competitive Learning Radial Basis Function

Regra de Hebb Perceptron Delta Rule (Least Mean Square) Multi-Layer Perceptrons (Back Propagation) Hopfield Competitive Learning Radial Basis Function Algoritmos de Aprendizado Regra de Hebb Perceptron Delta Rule (Least Mean Square) Multi-Layer Perceptrons (Back Propagation) Hopfield Competitive Learning Radial Basis Function Formas de Aprendizado Existe

Leia mais

JAI 6 - Deep Learning Teoria e Prática

JAI 6 - Deep Learning Teoria e Prática JAI 6 - Deep Learning Teoria e Prática Esteban Clua e Cristina Nader Vasconcelos Universidade Federal Fluminense Fundamentos Computação baseada em modelos crisnv@ic.uff.br 2 Computação baseada em aprendizado

Leia mais

Introdução às Redes Neurais Artificiais

Introdução às Redes Neurais Artificiais Introdução às Redes Neurais Artificiais Perceptrons de Múltiplas Camadas I Prof. João Marcos Meirelles da Silva www.professores.uff.br/jmarcos Departamento de Engenharia de Telecomunicações Escola de Engenharia

Leia mais

INF 1771 Inteligência Artificial

INF 1771 Inteligência Artificial INF 1771 Inteligência Artificial Aula 22 Redes Neurais Edirlei Soares de Lima Formas de Aprendizado Aprendizado Supervisionado Árvores de decisão. K-Nearest Neighbor (KNN). Support

Leia mais

Redes Neurais Artificial. Prática. Inteligência Artificial

Redes Neurais Artificial. Prática. Inteligência Artificial Redes Neurais Artificial Prática Inteligência Artificial Professor: Rosalvo Ferreira de Oliveira Neto Estrutura 1. Introdução a MLP 2. Base de dados e Pré-Processamento 3. Prática MLP - Introdução Redes

Leia mais

Reconhecimento de Padrões/Objetos

Reconhecimento de Padrões/Objetos Reconhecimento de Padrões/Objetos André Tavares da Silva andre.silva@udesc.br Capítulo 2 de Gonzales Classificação Linear Introdução Para utilizar uma função discriminante linear (Linear Discriminant Function)

Leia mais

Multi-Layer. Perceptrons. Algoritmos de Aprendizado. Perceptrons. Perceptrons

Multi-Layer. Perceptrons. Algoritmos de Aprendizado. Perceptrons. Perceptrons Algoritmos de Aprendizado Regra de Hebb Perceptron Delta Rule (Least Mean Square) Multi-Layer Perceptrons (Back Propagation) Radial Basis Functions (RBFs) Competitive Learning Hopfield Multi-Layer Perceptrons

Leia mais

Redes Neurais Artificiais

Redes Neurais Artificiais Redes Neurais Artificiais Multi-layer Perceptrons e Backpropagation Marcílio Souto DIMAp/UFRN Redes de várias camadas MLP - Multi-Layer Perceptron (Adaline?!) Backpropagation network Superar as limitações

Leia mais

Nota 1: Baixei Tiny-DNN em 28/7/2017 a última versão. https://github.com/tiny-dnn/tiny-dnn

Nota 1: Baixei Tiny-DNN em 28/7/2017 a última versão. https://github.com/tiny-dnn/tiny-dnn Rede neural convolutional (convolutional deep learning) Nesta apostila, vamos estudar rede neural convolucional, usando o material disponível no livro (disponibilizado gratuitamente pelo autor): http://neuralnetworksanddeeplearning.com/

Leia mais

Redes neurais artificiais

Redes neurais artificiais Redes neurais artificiais Conceitos em redes neuronais Redes neuronais artificiais (RNA): uma metáfora cerebral para processamento de informações Computação neuronal Muitos usos de RNA para Reconhecimento

Leia mais

Número: Nome:

Número: Nome: Número: Nome: 1 -------------------------------------------------------------------------------------------------------------- INSTITUTO SUPERIOR TÉCNICO Sistemas de Apoio à Decisão Exame 1 20 junho 2006

Leia mais

Explicação simplificada de template matching (casamento de máscara, ou casamento de modelo)

Explicação simplificada de template matching (casamento de máscara, ou casamento de modelo) Explicação simplificada de template matching (casamento de máscara, ou casamento de modelo) T R(x,y) I Template matching percorre a imagem I comparando template T com cada posição (x,y) de I. O resultado

Leia mais

Multi-Layer. Perceptrons. Algoritmos de Aprendizado. Perceptrons. Perceptrons

Multi-Layer. Perceptrons. Algoritmos de Aprendizado. Perceptrons. Perceptrons Algoritmos de Aprendizado Regra de Hebb Perceptron Delta Rule (Least Mean Square) Back Propagation Multi-Layer Perceptrons Redes de apenas uma camada só representam funções linearmente separáveis Redes

Leia mais

PCA: Principal Component Analysis

PCA: Principal Component Analysis PCA: Principal Component Analysis PCA é muito usado para diminuir a dimensionalidade das características (features). Na internet há muitos textos bons sobre PCA: [1] Um exemplo numérico muito bom está

Leia mais

Redes Neurais e Sistemas Fuzzy

Redes Neurais e Sistemas Fuzzy Redes Neurais e Sistemas Fuzzy O ADALINE e o algoritmo LMS O ADALINE No contexto de classificação, o ADALINE [B. Widrow 1960] pode ser visto como um perceptron com algoritmo de treinamento baseado em minimização

Leia mais

Ambiente MATLAB. Redes Neurais. Tela Principal do MATLAB MATLAB 6.5. MATLAB MATrix LABoratory. Programação baseada em Matrizes

Ambiente MATLAB. Redes Neurais. Tela Principal do MATLAB MATLAB 6.5. MATLAB MATrix LABoratory. Programação baseada em Matrizes Redes Neurais MATLAB 6.5 Ambiente MATLAB MATLAB MATrix LABoratory Programação baseada em Matrizes Vetores e escalares também podem ser considerados matrizes, xn, Nx, x Tela Principal do MATLAB Tela Principal

Leia mais

Regressão. Prof. Fabrício Olivetti de França Universidade Federal do ABC

Regressão. Prof. Fabrício Olivetti de França Universidade Federal do ABC Regressão Prof. Fabrício Olivetti de França Universidade Federal do ABC Aprendendo com Exemplos Uma das formas de aprendizado de máquina é definido como: Dado um conjunto de exemplos X, com cada x sendo

Leia mais

Regra de Hebb Perceptron Delta Rule (Least Mean Square) Multi-Layer Perceptrons (Back Propagation) Hopfield Competitive Learning Radial Basis Function

Regra de Hebb Perceptron Delta Rule (Least Mean Square) Multi-Layer Perceptrons (Back Propagation) Hopfield Competitive Learning Radial Basis Function Algoritmos de Aprendizado Regra de Hebb Perceptron Delta Rule (Least Mean Square) Multi-Layer Perceptrons (Back Propagation) Hopfield Competitive Learning Radial Basis Function Multi-Layer Perceptrons

Leia mais

GT-JeDi - Curso de Desenv. de Jogos IA para Jogos

GT-JeDi - Curso de Desenv. de Jogos IA para Jogos GT-JeDi - Curso de Desenv. de Jogos IA para Jogos Gustavo Pessin 2006/2 - A07 Cronograma Conceitos Neurônio artificial Redes: Perceptron e Multi Layer Perceptron (MLP), Exemplos Separando cores Prevendo

Leia mais

INF1005: Programação 1. Vetores. 02/05/10 (c) Paula Rodrigues 1

INF1005: Programação 1. Vetores. 02/05/10 (c) Paula Rodrigues 1 INF1005: Programação 1 Vetores 02/05/10 (c) Paula Rodrigues 1 Tópicos Principais Declaração e inicialização de vetores Exemplos de manipulação de vetores Vetores passados para funções Exemplos de funções

Leia mais

Aprendizado de Máquinas. Multi-Layer Perceptron (MLP)

Aprendizado de Máquinas. Multi-Layer Perceptron (MLP) Universidade Federal do Paraná (UFPR) Departamento de Informática (DInf) Aprendizado de Máquinas Multi-Layer Perceptron (MLP) David Menotti, Ph.D. web.inf.ufpr.br/menotti Redes Neuronais Cérebro humano.

Leia mais

Mini-projeto: Reconhecimento de Digitos com MLPs. Germano C. Vasconcelos Centro de Informática - UFPE

Mini-projeto: Reconhecimento de Digitos com MLPs. Germano C. Vasconcelos Centro de Informática - UFPE Mini-projeto: Reconhecimento de Digitos com MLPs Germano C. Vasconcelos Centro de Informática - UFPE 1 Link do Material http://neuralnetworksanddeeplearning.com/chap1.html 2 Objetivo: Treinar uma Rede

Leia mais

Redes Neurais. Prof. Aurora Pozo. Obs: slides baseados em Prof. Marcílio Souto e Prof. Marley Vellasco

Redes Neurais. Prof. Aurora Pozo. Obs: slides baseados em Prof. Marcílio Souto e Prof. Marley Vellasco Redes Neurais Prof. Aurora Pozo Obs: slides baseados em Prof. Marcílio Souto e Prof. Marley Vellasco CONTEÚDO Introdução Motivação, Objetivo, Definição, Características Básicas e Histórico Conceitos Básicos

Leia mais

Introdução às Redes Neurais Artificiais

Introdução às Redes Neurais Artificiais Introdução às Redes Neurais Artificiais Perceptrons de Múltiplas Camadas II Prof. João Marcos Meirelles da Silva www.professores.uff.br/jmarcos Departamento de Engenharia de Telecomunicações Escola de

Leia mais

( ) Aula de Hoje. Introdução a Sistemas Inteligentes. Modelo RBF (revisão) Modelo RBF (revisão)

( ) Aula de Hoje. Introdução a Sistemas Inteligentes. Modelo RBF (revisão) Modelo RBF (revisão) Introdução a Sistemas Inteligentes ópicos em Redes Neurais III: Redes Neurais RBF ª Parte Prof. Ricardo J. G. B. Campello ICMC / USP Aula de Hoje Revisão de Modelos RBF reinamento de Modelos RBF Estimação

Leia mais

Algoritmos de Regressão

Algoritmos de Regressão Algoritmos de Regressão com Big Data Fabrício Olivetti de França Universidade Federal do ABC Tópicos 1. Regressão Linear 2. Ordinary Least Square 3. Gradiente Descendente 4. Overfitting 5. Variáveis Não-Lineares

Leia mais

O Algoritmo de Treinamento: Máquina de Aprendizado Extremo (Extreme Learning Machine - ELM)

O Algoritmo de Treinamento: Máquina de Aprendizado Extremo (Extreme Learning Machine - ELM) O Algoritmo de Treinamento: Máquina de Aprendizado Extremo (Extreme Learning Machine - ELM) Thiago Henrique Cupertino SCE5809 - Redes Neurais 23 de Novembro de 2010 Conteúdo Introdução Desvantagens do

Leia mais

Classificadores Lineares

Classificadores Lineares Universidade Federal do Paraná (UFPR) Bacharelado em Informática Biomédica Classificadores Lineares David Menotti www.inf.ufpr.br/menotti/ci171-182 Hoje Funções Discriminantes Lineares Perceptron Support

Leia mais

Introdução à linguagem C++

Introdução à linguagem C++ Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução à linguagem C++ Introdução à linguagem C++ Conceitos básicos: variáveis, tipos de dados, constantes, I/O, etc. Estruturas

Leia mais

3 Redes Neurais Artificiais

3 Redes Neurais Artificiais 3 Redes Neurais Artificiais 3.1. Introdução A capacidade de implementar computacionalmente versões simplificadas de neurônios biológicos deu origem a uma subespecialidade da inteligência artificial, conhecida

Leia mais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Entrada e saída: escrevendo na tela Veja uma comparação entre um programa Portugol e seu equivalente em C: Inicio Inteiro

Leia mais

INSTITUTO SUPERIOR TÉCNICO Sistemas de Apoio à Decisão

INSTITUTO SUPERIOR TÉCNICO Sistemas de Apoio à Decisão Número: Nome: -------------------------------------------------------------------------------------------------------------- INSTITUTO SUPERIOR TÉCNICO Sistemas de Apoio à Decisão Exame: 6 January 207

Leia mais

Redes Neurais MLP: Exemplos e Características

Redes Neurais MLP: Exemplos e Características Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Redes Neurais MLP: Exemplos e Características DCA0121 Inteligência Artificial Aplicada Heitor Medeiros 1

Leia mais

Sistema de Inferência Fuzzy baseado em Redes Adaptativas (ANFIS) Sistema de Inferência Fuzzy

Sistema de Inferência Fuzzy baseado em Redes Adaptativas (ANFIS) Sistema de Inferência Fuzzy Redes Neurais Sistema de Inferência Fuzzy baseado em Redes Adaptativas (ANFIS) Sistema de Inferência Fuzzy Um Sistema de Inferência Fuzzy (SIF) é um tipo especial de Sistema Baseado em Conhecimento (SBC).

Leia mais

Considerações de Desempenho

Considerações de Desempenho Back Propagation Considerações de Desempenho Dicas para o BP O uso da função de ativação simétrica geralmente acelera o treinamento TANH +1 logistic linear 0 tanh -1-4 +4 1 Dicas para o BP Os pesos devem

Leia mais

ESTRUTURA COM DECISÃO COMPOSTA

ESTRUTURA COM DECISÃO COMPOSTA LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA ESTRUTURA COM DECISÃO COMPOSTA Prof. Dr. Daniel Caetano 2018-1 Objetivos Entender o que são decisões compostas Compreender como implementar decisões compostas Capacitar

Leia mais

Aplicação de Redes Neuronais Artificiais no Comportamento da Precipitação em Portugal Continental.

Aplicação de Redes Neuronais Artificiais no Comportamento da Precipitação em Portugal Continental. 2º ENCONTRO DE PÓS-GRADUAÇÃO EM INVESTIGAÇÃO E ENSINO DAS CIÊNCIAS FÍSICAS E DA TERRA DA UNIVERSIDADE DE ÉVORA Aplicação de Redes Neuronais Artificiais no Comportamento da Precipitação em Portugal Continental.

Leia mais

PCS Laboratório de Programação Orientada a Objetos 1a. Prova. 02 de Setembro de 2015

PCS Laboratório de Programação Orientada a Objetos 1a. Prova. 02 de Setembro de 2015 PCS - 3111 Laboratório de Programação Orientada a Objetos 1a. Prova 02 de Setembro de 2015 Questão 1 (2,6) Deseja-se implementar um programa que recebe um mês e um dia atual de um ano e o mês e o dia de

Leia mais

Redes Neurais Artificiais. Sistemas de Informação/Ciências da Computação UNISUL Aran Bey Tcholakian Morales, Dr. Eng. (Apostila 9)

Redes Neurais Artificiais. Sistemas de Informação/Ciências da Computação UNISUL Aran Bey Tcholakian Morales, Dr. Eng. (Apostila 9) Redes Neurais Artificiais Sistemas de Informação/Ciências da Computação UNISUL Aran Bey Tcholakian Morales, Dr. Eng. (Apostila 9) Conceitos 2 Redes Neurais As Redes Neurais Artificias são modelos computacionais

Leia mais

Aula 8 Comandos de Seleção

Aula 8 Comandos de Seleção Aula 8 Comandos de Seleção Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira ronaldo.co@ufu.br Anilton Joaquim da Silva anilton@ufu.br 1 Introdução Até agora não aprendemos a dizer

Leia mais

Back Propagation. Dicas para o BP

Back Propagation. Dicas para o BP Back Propagation Considerações de Desempenho Dicas para o BP O uso da função de ativação simétrica geralmente acelera o treinamento TANH +1 logistic linear 0 tanh -1-4 +4 11 Dicas para o BP Os pesos devem

Leia mais

Rede RBF (Radial Basis Function)

Rede RBF (Radial Basis Function) Rede RBF (Radial Basis Function) André Tavares da Silva andre.silva@udesc.br Roteiro Introdução à rede neural artificial RBF Teorema de Cover da separabilidade de padrões RBF x MLP RBF Função de ativação

Leia mais

UNIVERSIDADE DO ESTADO DE MATO GROSSO - UNEMAT. Faculdade de Ciências Exatas e Tecnológicas FACET / Sinop Curso de Bacharelado em Engenharia Elétrica

UNIVERSIDADE DO ESTADO DE MATO GROSSO - UNEMAT. Faculdade de Ciências Exatas e Tecnológicas FACET / Sinop Curso de Bacharelado em Engenharia Elétrica REDES NEURAIS ARTIFICIAIS PERCEPTRON MULTICAMADAS Prof. Dr. André A. P. Biscaro 1º Semestre de 2018 Arquitetura Redes Perceptron de Múltiplas Camadas (PMC), também conhecidas como redes MLP (Multiple Layer

Leia mais

Aplicações de Álgebra Linear. Lista de Exercícios Humberto José Bortolossi Ainda sobre Matrizes e Aplicações

Aplicações de Álgebra Linear. Lista de Exercícios Humberto José Bortolossi   Ainda sobre Matrizes e Aplicações GMA DEPARTAMENTO DE MATEMÁTICA APLICADA Aplicações de Álgebra Linear Lista de Exercícios Humberto José ortolossi http://wwwprofessoresuffbr/hjbortol/ 04 Ainda sobre Matrizes e Aplicações [0] Efetue a multiplicação

Leia mais

Inteligência Artificial Redes Neurais

Inteligência Artificial Redes Neurais Inteligência Artificial Jarley P. Nóbrega, Dr. Faculdade Nova Roma Bacharelado em Ciência da Computação jpn@jarley.com Semestre 2018.2 Jarley P. Nóbrega, Dr. (Nova Roma) Inteligência Artificial Semestre

Leia mais

TÓPICOS EM INTELIGÊNCIA ARTIFICIAL Redes Neurais Artificiais

TÓPICOS EM INTELIGÊNCIA ARTIFICIAL Redes Neurais Artificiais TÓPICOS EM INTELIGÊNCIA ARTIFICIAL Redes Neurais Artificiais ricardo.kerschbaumer@ifc.edu.br http://professor.luzerna.ifc.edu.br/ricardo-kerschbaumer/ Introdução O Cérebro humano Mais fascinante processador

Leia mais

3 Modelos Comparativos: Teoria e Metodologia

3 Modelos Comparativos: Teoria e Metodologia 3 Modelos Comparativos: Teoria e Metodologia Para avaliar o desempenho do modelo STAR-Tree, foram estimados os modelos Naive, ARMAX e Redes Neurais. O ajuste dos modelos ARMAX e das redes neurais foi feito

Leia mais

3 REDES CLÁSSICAS PERCEPTRON E ADALINE

3 REDES CLÁSSICAS PERCEPTRON E ADALINE w b Professor José Gomes de Carvalho Jr. 3 REDES CLÁSSICAS PERCEPTRON E ADALINE 3.-Redes com funções de ativação de limiar Uma rede simples de uma camada, consiste em um ou mais neurônios de saída j conectados

Leia mais

Programação de Computadores II Aula 03. Linguagem C I

Programação de Computadores II Aula 03. Linguagem C I Programação de Computadores II Slides cedidos por Karina Mochetti 2018.1 C vs Python Python é uma linguagem muito mais nova, de 1991. C é muito mais eciente, os programas rodam mais rápido. Seu objetivo

Leia mais

scikit-learn: Aprendizado de máquina 101 com Python

scikit-learn: Aprendizado de máquina 101 com Python scikit-learn: Aprendizado de máquina 101 com Python Luciana Fujii Campus Party BH 2016 1 / 30 Introdução Aprendizado de máquina Aprendizado de máquina é o campo da ciência da computação que dá aos computadores

Leia mais

Cálculo Numérico / Métodos Numéricos. Solução de equações polinomiais Briot-Ruffini-Horner

Cálculo Numérico / Métodos Numéricos. Solução de equações polinomiais Briot-Ruffini-Horner Cálculo Numérico / Métodos Numéricos Solução de equações polinomiais Briot-Ruffini-Horner Equações Polinomiais p = x + + a ( x) ao + a1 n x n Com a i R, i = 0,1,, n e a n 0 para garantir que o polinômio

Leia mais

BAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores

BAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores BAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores 1- Faça um programa que preencha um vetor com seis elementos numéricos inteiros, calcule e mostre: a.

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Ponteiros Parte 1 Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Ponteiros Ponteiro Ponteiros

Leia mais

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA ESTRUTURA COM DECISÃO MÚLTIPLA. Prof. Dr. Daniel Caetano

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA ESTRUTURA COM DECISÃO MÚLTIPLA. Prof. Dr. Daniel Caetano LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA ESTRUTURA COM DECISÃO MÚLTIPLA Prof. Dr. Daniel Caetano 2013-1 Objetivos Entender o que são decisões múltiplas Compreender como implementar decisões múltiplas Capacitar

Leia mais

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza ESTRUTURAS CONDICIONAIS Introdução à Ciência da ComputaçãoI Simone Senger de Souza Estruturas de Controle ESTRUTURA SEQUENCIAL ESTRUTURA CONDICIONAL ESTRUTURA DE REPETIÇÃO 2 Estruturas Condicionais Estrutura

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação Linguagem C++: arrays - aula I Bruno Emerson Gurgel Gomes 1 1 Instituto Federal de Educação, Ciência e Tecnologia do RN (IFRN) 2012 Bruno Gomes (IFRN) Fundamentos de Programação

Leia mais

7 a Lista de Exercícios Assunto: Funções e passagem por referência com vetor e matriz (Tópico 7)

7 a Lista de Exercícios Assunto: Funções e passagem por referência com vetor e matriz (Tópico 7) 7 a Lista de Exercícios Assunto: Funções e passagem por referência com vetor e matriz (Tópico 7) Essa lista de exercícios tem como objetivo principal desenvolver algoritmos a partir dos conteúdos abordados

Leia mais

Redes Neurais e Sistemas Fuzzy

Redes Neurais e Sistemas Fuzzy Redes Neurais e Sistemas Fuzzy Redes de uma única camada O Perceptron elementar Classificação de padrões por um perceptron A tarefa de classificação consiste em aprender a atribuir rótulos a dados que

Leia mais

Teorema de Aprox. Universal. Teorema de Aprox. Universal. Teorema de Aprox. Universal. Teorema de Aprox. Universal. Teorema de Aprox.

Teorema de Aprox. Universal. Teorema de Aprox. Universal. Teorema de Aprox. Universal. Teorema de Aprox. Universal. Teorema de Aprox. SCE-5809 - REDES NEURAIS Redes Neurais Multi-Camadas Parte 3 Profa Roseli Ap Francelin Romero Qual é o número mínimo de camadas num PMC que fornece uma aproximação para qualquer mapeamento contínuo? Cybenko,

Leia mais

Avaliando Hipóteses. George Darmiton da Cunha Cavalcanti Tsang Ing Ren CIn/UFPE

Avaliando Hipóteses. George Darmiton da Cunha Cavalcanti Tsang Ing Ren CIn/UFPE Avaliando Hipóteses George Darmiton da Cunha Cavalcanti Tsang Ing Ren CIn/UFPE Pontos importantes Erro da Amostra e Erro Real Como Calcular Intervalo de Confiança Erros de hipóteses Estimadores Comparando

Leia mais

Aprendizagem de Máquina

Aprendizagem de Máquina Aprendizagem de Máquina Alessandro L. Koerich Programa de Pós-Graduação em Informática Pontifícia Universidade Católica do Paraná (PUCPR) Redes Neurais Artificiais Plano de Aula Introdução Motivação Biológica

Leia mais

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder Divisão e Conquista Norton T. Roman Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder Divisão e Conquista Construção incremental Ex: Consiste em, inicialmente, resolver

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) Funções

Algoritmos e Estruturas de Dados I (DCC/003) Funções Algoritmos e Estruturas de Dados I (DCC/003) Funções Funções Funções definem operações que são usadas frequentemente Funções, na matemática, requerem parâmetros de entrada, e definem um valor de saída

Leia mais

Redes Neuronais. Apontamentos Aulas TP de Inteligência Artificial LEI/ISEP Introdução às Redes Neuronais. Friday, April 5, 13

Redes Neuronais. Apontamentos Aulas TP de Inteligência Artificial LEI/ISEP Introdução às Redes Neuronais. Friday, April 5, 13 Redes Neuronais 1 Modelo do Perceptrão Cada neurónio é composto por dois elementos: o primeiro adiciona os produtos entre os sinais de entrada e respectivos pesos este produto, representado por a representa

Leia mais

Unidade 08 MATLAB Neural Network Toolkit

Unidade 08 MATLAB Neural Network Toolkit Unidade 08 MATLAB Neural Network Toolkit 1. Introdução Uma rede neural artificial (NN daqui em diante) é um modelo matemático que consiste de neurônios interconectados que imitam, em uma escala menor,

Leia mais

Redes Neurais: MLP. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Redes Neurais: MLP. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Redes Neurais: MLP DCA0121 Inteligência Artificial Aplicada Heitor Medeiros 1 Tópicos Redes diretas de múltiplas

Leia mais

Redes Neurais Artificial

Redes Neurais Artificial Redes Neurais Artificial Tópicos: Introdução ao estudo de RNA sua origem e inspiração biológica Características gerais das RN e descrição do neurônio artificial Aprendizado de RN e tipos de Aprendizado

Leia mais

Implementaça o de Rede Neural Artificial

Implementaça o de Rede Neural Artificial Implementaça o de Rede Neural Artificial Professora Dra Sarajane M. Peres Inteligência artificial - 2012 Integrantes Renato Alexey Gabriel do Valle Bandeira André Kawamura Oliveira Renato Sipriano Marcos

Leia mais

Resolução de problemas com apenas restrições lineares de igualdade

Resolução de problemas com apenas restrições lineares de igualdade Resolução de problemas com apenas restrições lineares de igualdade Marina Andretta ICMC-USP 14 de outubro de 2014 Marina Andretta (ICMC-USP) sme0212 - Otimização não-linear 14 de outubro de 2014 1 / 22

Leia mais

Multiple Layer Perceptron

Multiple Layer Perceptron Universidade Federal do Paraná (UFPR) Bacharelado em Informática Biomédica Multiple Layer Perceptron David Menotti www.inf.ufpr.br/menotti/ci171-182 Hoje Multiple Layer Perceptron (MLP) Backpropagation

Leia mais

PROGRAMAÇÃO em C. Vitor Valerio de Souza Campos

PROGRAMAÇÃO em C. Vitor Valerio de Souza Campos PROGRAMAÇÃO em C Vitor Valerio de Souza Campos Algoritmos x Programação Algoritmo é um conjunto finito de regras, bem definidas, para a solução de um problema em um tempo finito (Orth, 2001). Programa

Leia mais

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira # Estrutura de Dados # Aula - Revisão de C/C++ na Prática Prof. Leinylson Fontinele Pereira Na aula anterior... Ponteiros Funções Introdução 3 O que vamos aprender? Preparação do ambiente de testes Conceitos

Leia mais

Redes Neurais Artificiais (RNA)

Redes Neurais Artificiais (RNA) Redes Neurais Artificiais (RNA) Definições: 1. Técnica inspirada no funcionamento do cérebro, onde neurônios artificiais, conectados em rede, são capazes de aprender e de generalizar. 2. Técnica de aproximação

Leia mais

Ref: H.Gould e J. Tobochnik. Para integrais em uma dimensão as regras do trapezóide e de Simpson são

Ref: H.Gould e J. Tobochnik. Para integrais em uma dimensão as regras do trapezóide e de Simpson são Método de Monte Carlo Resolução de Integrais Ref: H.Gould e J. Tobochnik Para integrais em uma dimensão as regras do trapezóide e de Simpson são melhores, mais rápidas. A técnica de resolução de integrais

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Recursão Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Recursão Recursão 1 Recursão 2

Leia mais

Tópicos Especiais: Inteligência Artificial REDES NEURAIS

Tópicos Especiais: Inteligência Artificial REDES NEURAIS Tópicos Especiais: Inteligência Artificial REDES NEURAIS Material baseado e adaptado do Cap. 20 do Livro Inteligência Artificial de Russell & Norvig Bibliografia Inteligência Artificial Russell & Norvig

Leia mais

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara Universidade do Estado de Minas Gerais - UEMG Curso de Engenharia da Computação FUNÇÕES EM C 1 Material adaptado da profa Silvana Maria Affonso de Lara ROTEIRO DA AULA Definição de Função Argumentos, retornos

Leia mais

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Introdução à Para Engenharias s GE4 Bio GE4Bio Grupo de Estudos em Sinais Biológicos Prof.Dr.

Leia mais

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga Algoritmos e Programação II Aula 3 Sobrecarga *Adaptado do material do Prof. Júlio Machado Sobrecarga Em várias linguagens é comum encontrarmos rotinas que fazem basicamente a mesma coisa, porém, com nomes

Leia mais

CCM0118 Computação I

CCM0118 Computação I CCM0118 Computação I Departamento de Ciência da Computação IME-USP Curso de Ciências Moleculares Turma 22 Segundo Semestre de 2012 Segundo Exercício-Programa Prazo de entrega: até 16 de outubro de 2012.

Leia mais

Redes Neurais. A Rede RBF. Redes RBF: Função de Base Radial. Prof. Paulo Martins Engel. Regressão não paramétrica. Redes RBF: Radial-Basis Functions

Redes Neurais. A Rede RBF. Redes RBF: Função de Base Radial. Prof. Paulo Martins Engel. Regressão não paramétrica. Redes RBF: Radial-Basis Functions Redes RBF: Função de Base Radial Redes Neurais A Rede RBF O LP é baseado em unidades que calculam uma função não-linear do produto escalar do vetor de entrada e um vetor de peso. A rede RBF pertence a

Leia mais

RECONHECIMENTO DE GÊNERO ATRAVÉS DA VOZ

RECONHECIMENTO DE GÊNERO ATRAVÉS DA VOZ RECONHECIMENTO DE GÊNERO ATRAVÉS DA VOZ Marcela Ribeiro Carvalho marcela@enecar.com.br IFG/Câmpus Goiânia Hipólito Barbosa Machado Filho hipolito.barbosa@ifg.edu.br IFG/Câmpus Goiânia Programa Institucional

Leia mais

Revisão C++ - Parte 1

Revisão C++ - Parte 1 Revisão C++ - Parte 1 Prof. Gustavo Leitão Campus Natal Central Disciplina Programação para Ambiente de Redes 5/3/2010 Objetivo da Aula 5/3/2010 5/3/2010 OBJETIVO DA AULA Revisar os principais comandos

Leia mais

Linguagem de Programação II Implementação

Linguagem de Programação II Implementação Linguagem de Programação II Implementação Prof. Alessandro Borges 2 Tópicos Criando objeto Definindo valores para os atributos do objeto Método construtor Definindo valores padrão para os atributos dos

Leia mais

Aula 28: Arquivos de texto

Aula 28: Arquivos de texto Aula 28: Arquivos de texto Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2018/2 Baseado nos slides de Guillermo Cámara-Chávez Aulas anteriores Memória Ponteiro Utilização

Leia mais

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza ESTRUTURAS CONDICIONAIS Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza Estruturas de Controle ESTRUTURA SEQUENCIAL ESTRUTURA CONDICIONAL ESTRUTURA DE REPETIÇÃO 2 Estruturas Condicionais

Leia mais

Orientação a Objetos - Programação em C++

Orientação a Objetos - Programação em C++ OO Engenharia Eletrônica Orientação a Objetos - Programação em C++ Slides 14: As classes List e Vector da STL (Standard Template Library). Prof. Jean Marcelo SIMÃO Classe List Uma classe Predefinida na

Leia mais

EXERCICIOS RESOLVIDOS - INT-POLIN - MMQ - INT-NUMERICA - EDO

EXERCICIOS RESOLVIDOS - INT-POLIN - MMQ - INT-NUMERICA - EDO Cálculo Numérico EXERCICIOS EXTRAIDOS DE PROVAS ANTERIORES o sem/08 EXERCICIOS RESOLVIDOS - INT-POLIN - MMQ - INT-NUMERICA - EDO x. Considere a seguinte tabela de valores de uma função f: i 0 f(x i ).50

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

Fundamentos de Inteligência Artificial [5COP099]

Fundamentos de Inteligência Artificial [5COP099] Fundamentos de Inteligência Artificial [5COP099] Dr. Sylvio Barbon Junior Departamento de Computação - UEL Disciplina Anual Assunto Aula 16 Redes Neurais Artificiais (MLP) 2 de 24 (MLP) Sumário Introdução

Leia mais

UNIVERSIDADE DO ESTADO DE MATO GROSSO - UNEMAT. Faculdade de Ciências Exatas e Tecnológicas FACET / Sinop Curso de Bacharelado em Engenharia Elétrica

UNIVERSIDADE DO ESTADO DE MATO GROSSO - UNEMAT. Faculdade de Ciências Exatas e Tecnológicas FACET / Sinop Curso de Bacharelado em Engenharia Elétrica Toolbox de Redes Neurais MATLAB Prof. Dr. André A. P. Biscaro 1º Semestre de 2017 Toolbox de Redes Neurais Introdução ao Matlab Linha de comando NNTool Estudo de Casos Análise de Crédito Bancário (Classificação).

Leia mais