Baixe o app para aproveitar ainda mais
Prévia do material em texto
FACULDADE SAPIENS REDES NEURAIS Flaviano Silva |Ximenes Diony da Silva PORTO VELHO, 2019 INTRODUÇÃO Não é de hoje que computação tenta reproduzir atividades do cérebro humano, e pensando nisso foi idealizado o conceito de Redes Neurais, que são sistemas de computação entrelaçados que visam simular o funcionamento do cérebro humano. Usando algoritmos, esse mecanismo pode interpretar padrões, correlacionar dados, agrupá-los e ir além, “aprendendo” e se auto melhorando. Aqui veremos alguns conceitos, exemplos e outras abordagens deste interessante tema que está tão presente no dia-a-dia e muitas vezes não é percebido. As redes neurais têm sido utilizadas para solucionar diversos problemas de engenharia como, por exemplo, em processamento digital de imagens, robótica e processamento digital de sinais. Redes neurais artificiais são técnicas computacionais que utilizam como modelo o funcionamento do cérebro humano, onde os neurônios são treinados de forma a responder somente aos padrões de entrada, podendo ser utilizadas no reconhecimento de padrões sem a necessidade de um treinamento prévio. As principais características que tornam desejáveis o estudo e o uso das redes neurais artificiais são: a capacidade das mesmas de aprender através da experiência, a capacidade de se adaptar a situações adversas e a sua tolerância a ruídos. Rede Neurais Você já se perguntou como funcionam os sistemas de reconhecimento de imagem? Como um aplicativo do seu celular faz para detectar rostos, ou um teclado inteligente sugere a próxima palavra? As chamadas Redes Neurais tem sido amplamente usadas para tarefas como essas, mas mostraram-se úteis também em outras áreas, como aproximação de funções, previsão de séries temporais e processamento de linguagem natural. Neste artigo, explico como funciona um tipo básico de Rede Neural, o Perceptron Multicamadas , e um fascinante algoritmo responsável pelo aprendizado da rede, o backpropagation . Tal modelo de rede serviu de base para os modelos mais complexos hoje existentes, como as Redes Convolucionais, que são o estado da arte para classificação de imagens. Se você estudou Cálculo na universidade e ainda não se esqueceu, não terá dificuldade em entender a parte do texto que está escrita em Matematiquês… Caso contrário, não se sinta incomodado pelas fórmulas, apenas foque na ideia principal; algumas analogias ao mundo real que procurei estabelecer irão ajudá-lo a entender também. 1. Modelo computacional de um neurônio Inspirando-se no funcionamento dos neurônios biológicos do sistema nervoso dos animais, estabeleceu-se na área da Inteligência Artificial um modelo computacional de um neurônio conforme ilustrado a seguir: Modelo computacional de um neurônio. Os sinais da entrada no neurônio são representados pelo vetor x = [ x1, x2, x3, …, xN ], podendo corresponder aos pixels de uma imagem, por exemplo. Ao chegarem ao neurônio, são multiplicados pelos respectivos pesos sinápticos, que são os elementos do vetor w = [ w1, w2, w3, …, wN ], gerando o valor z , comumente denominado potencial de ativação, de acordo com a expressão: O termo adicional b provê um grau de liberdade a mais, que não é afetado pela entrada nessa expressão, correspondendo tipicamente ao “ bias” (viés) . O valor z passa então por uma função matemática de ativação σ, com a característica de ser não linear, responsável por limitar tal valor a um certo intervalo, produzindo o valor final de saída y do neurônio. Algumas funções de ativação usadas são a degrau, sigmóide, tangente hiperbólica, softmax e ReLU ( Rectified Linear Unit ). 2. Combinando neurônios em camadas Com apenas um neurônio não se pode fazer muita coisa, mas podemos combiná-los em uma estrutura em camadas, cada uma com número diferente de neurônios, formando uma rede neural denominada Perceptron Multicamadas (“ Multi Layer Perceptron — MLP ” ). O vetor de valores de entrada x passa pela camada inicial, cujos valores de saída são ligados às entradas da camada seguinte, e assim por diante, até a rede fornecer como resultado os valores de saída da última camada. Pode-se arranjar a rede em várias camadas, tornando-a profunda e capaz de aprender relações cada vez mais complexas. Neurônios combinados formando um rede. Cada círculo representa um neurônio como aquele descrito anteriormente. 3. Treinamento de um MLP Para que uma rede dessas funcione, é preciso treiná-la. É como ensinar a uma criança o beabá. O treinamento de uma rede MLP insere-se no contexto de aprendizado de máquina supervisionado, em que cada amostra de dados utilizada apresenta um rótulo informando a que classificação ela se encaixa. Por exemplo, uma imagem de um cachorro contém um rótulo informando que aquilo é um cachorro. Assim, a ideia geral é fazer com que a rede aprenda os padrões referentes a cada tipo de coisa (cada classe ), assim, quando uma amostra desconhecida for fornecida à rede, ela seja capaz de estabelecer a qual classe tal amostra pertence. Como isso pode ser feito? Backpropagation “Não é errando que se aprende?” A ideia do algoritmo backpropagation é, com base no cálculo do erro ocorrido na camada de saída da rede neural, recalcular o valor dos pesos do vetor w da camada última camada de neurônios e assim proceder para as camadas anteriores, de trás para a frente, ou seja, atualizar todos os pesos w das camadas a partir da última até atingir a camada de entrada da rede, para isso realizando a retropropagação o erro obtido pela rede. Em outras palavras, calcula-se o erro entre o que a rede achou que era e o que de fato era (era um gato e ela achou que era um cachorro — temos aí um erro!), então recalculamos o valor de todos os pesos, começando da última camada e indo até a primeira, sempre tendo em vista diminuir esse erro. Traduzindo essa ideia para o matematiquês , o backpropagation consiste nas seguintes etapas: ● Inicializar todos os pesos da rede com pequenos valores aleatórios . ● Fornecer dados de entrada à rede e calcular o valor da função de erro obtida, ao comparar com o valor de saída esperado. Lembre-se de que como o aprendizado é supervisionado, já se sabe de antemão qual deveria ser a resposta correta. É importante que a função de erro seja diferenciável . ● Na tentativa de minimizar o valor da função de erro, calculam-se os valores dos gradientes para cada peso da rede. Do Cálculo , sabemos que o vetor gradiente fornece a direção de maior crescimento de uma função; aqui, como queremos caminhar com os pesos na direção de maior decréscimo da função de erro, basta tomarmos o sentido contrário ao do gradiente e…voilà! Já temos um excelente caminho por onde andar. ● Uma vez que temos o vetor gradiente calculado, atualizamos cada peso de modo iterativo , sempre recalculando os gradientes em cada passo de iteração, até o erro diminuir e chegar abaixo de algum limiar preestabelecido, ou o número de iterações atingir um valor máximo, quando enfim o algoritmo termina e a rede está treinada. Assim, a fórmula geral de atualização dos pesos na iteração fica: Fórmula geral de atualização dos pesos da rede neural Ou seja, o valor do peso na iteração atual será o valor do peso na iteração anterior, corrigido de valor proporcional ao gradiente. O sinal negativo indica que estamos indo na direção contrária à do gradiente, conforme mencionado. O parâmetro η representa a taxa de aprendizado da rede neural,controlando a tamanho do passo que tomamos na correção do peso. Fazendo uma analogia, imagine que você está numa região montanhosa e escura, desejando descer o mais rápido possível à procura de um vale, na esperança de encontrar um lago de águas límpidas. É possível andar em várias direções, mas você tenta achar a melhor ao sentir o solo ao redor e tomar aquela com maior declive. Em termos matemáticos, você está indo na direção contrária à do vetor gradiente. Considere também que você pode controlar o tamanho do passo que pode dar, mas note que passos muito largos podem fazê-lo passar do vale, caindo na outra montanha mais adiante, e outro passo largo o trará de volta à primeira montanha, fazendo-o pular pra lá e pra cá sem nunca alcançar o vale; por outro lado, passos muito curtos o farão demorar muito a descer, podendo morrer de sede do meio do caminho. Voltando ao matematiquês , o conceito-chave da equação anterior é o cálculo da expressão ∂E /∂w, consistindo em computar as derivadas parciais da função de erro E em relação a cada peso do vetor w . Para nosso auxílio, vamos considerar a figura a seguir, que ilustra uma rede MLP com duas camadas e servirá de base para a explicação do backpropagation. Uma conexão entre um neurônio j e um neurônio i da camada seguinte possui peso w[j,i] . Repare que os números sobrescritos, entre parênteses, indicam o número da camada à qual a variável em questão pertence, podendo, neste exemplo, valer (1) ou (2). Rede MLP para ilustrar a explicação do backpropagation. Os pesos dos neurônios inferiores foram omitidos para não tornar a figura visualmente poluída. Sinta-se à vontade para voltar à figura anterior conforme for acompanhando os passos a seguir. Sendo y a saída esperada e ŷ a saída obtida pela rede, definimos a função de erro como sendo: Ou seja, aqui estamos simplesmente calculando a somatória dos quadrados das diferenças entre os elementos dos dois vetores. Agora, calculamos a derivada parcial do erro em relação à camada de saída, ŷ: Seguindo a estrutura da rede para a esquerda, prosseguimos no cálculo da derivada do erro em relação ao potencial de ativação z da camada (2), usando a Regra da Cadeia . Note que σ′ é a derivada da função de ativação do neurônio. Por exemplo, no caso de ser a função sigmoide, sua derivada vale σ′(z) = σ (z)( 1 − σ (z)). Este valor é o gradiente local em relação ao i- ésimo neurônio da camada (2) e, para não tornar as fórmulas excessivamente extensas, será simplesmente indicado como δ : Finalmente, usando a Regra da Cadeia mais uma vez, computamos a derivada parcial do erro em função de um peso w[j,i] da camada (2): O cálculo em relação ao bias é análogo, resultando em: Com esses resultados em mãos, é possível aplicar a fórmula geral de atualização dos pesos dos neurônios da última camada: E a fórmula de atualização do bias: Pronto, já temos a fórmula mágica para atualizar os pesos dos neurônios da última camada. Agora temos que calcular esta expressão para os pesos dos neurônios da camada anterior; logo, precisamos calcular a derivada parcial em relação à saída y[i] da camada (1). A sacada aqui é perceber que tal valor y[i] interfere em todos os neurônios da camada seguinte, assim, temos que considerar a somatória dos erros que ele propaga: Mas: Resultando em: Prosseguindo, temos: Esse δ a que igualamos o resultado segue a mesma ideia anterior: é o gradiente local em relação ao i- ésimo neurônio da camada (1). Finalmente, vem: Substituindo na fórmula de atualização dos pesos: Novamente, as fórmulas para o bias são análogas e ficam como exercício. É isso! Caso existissem mais camadas na rede, o procedimento continuaria, seguindo sempre esse mesmo padrão de calcular as derivadas parciais, retropropagando os erros até a camada de entrada da rede. O backpropagation é um algoritmo elegante e engenhoso. Os atuais modelos deep learning como Redes Neurais Convolucionais, embora mais refinados que o MLP, têm se mostrado muito superiores em tarefas como classificação de imagens e também utilizam como método de aprendizado o backpropagation, assim como as chamadas Redes Neurais Recorrentes, em processamento de linguagem natural, também fazem uso desse algoritmo. O mais incrível é que tais modelos conseguem encontrar padrões inobserváveis e obscuros para nós, humanos, o que é fascinante e permite considerar que em breve estaremos contando com a ajuda do deep learning para resolver muitos dos principais problemas que afligem a humanidade, como a cura do câncer. Redes Neurais Artificiais são técnicas computacionais que apresentam um modelo matemático inspirado na estrutura neural de organismos inteligentes e que adquirem conhecimento através da experiência. Uma grande rede neural artificial pode ter centenas ou milhares de unidades de processamento; já o cérebro de um mamífero pode ter muitos bilhões de neurônios. Os neurônios são formados pelos dendritos, que são um conjunto de terminais de entrada, pelo corpo central, e pelos axônios que são longos terminais de saída. A propriedade mais importante das redes neurais é a habilidade de aprender de seu ambiente e com isso melhorar seu desempenho. Isso é feito através de um processo iterativo de ajustes aplicado a seus pesos, o treinamento. O aprendizado ocorre quando a rede neural atinge uma solução generalizada para uma classe de problemas. O perceptron é um algoritmo de aprendizado de classificadores binário. Já o O perceptron multicamadas (MLP) é uma rede neural semelhante ao perceptron simples, porém possui mais de uma camada de neurônios. O método do gradiente (ou método do máximo declive) é um método numérico usado em otimização. Para encontrar um mínimo (local) de uma função usa-se um esquema iterativo, onde em cada passo se toma a direção (negativa) do gradiente, que corresponde à direção de declive máximo. O propósito do passo para frente é propagar nossas entradas (os dados de entrada) através da rede aplicando uma série de dot products (multiplicação entre os vetores) e ativações até chegarmos à camada de saída da rede (ou seja, nossas previsões). O backpropagation é indiscutivelmente o algoritmo mais importante na história das redes neurais – sem backpropagation (eficiente), seria impossível treinar redes de aprendizagem profunda da forma que vemos hoje. O perceptron multicamadas (MLP) é uma rede neural semelhante ao perceptron simples, porém possui mais de uma camada de neurônios. Em casos em que não há a possibilidade de uma única reta separar os elementos, há o uso da MLP que, gera mais de uma reta classificadora. Função de desvios de erros, O algoritmo de retropropagação de erro, é um algoritmo utilizado no treinamento de redes neurais multicamadas, e consiste em dois passos de computação: o processamento direto e o processamento reverso. Como os erros são importantes para as redes neurais e como é a fórmula para calcular os erros? É muito importante a máquina errar, pois ela literalmente aprende com os erros, tornando se cada vez melhor. A fórmula usada: ( Novo Peso = Peso Antigo – Derivada * Taxa de Aprendizagem). Operadores AND e OR e XOR com relação ao PMC AND: Operador lógico no qual a resposta da operação é verdade (1) se ambas as variáveis de entrada forem verdade. OR: Operador lógico no qual a resposta da operação é verdade (1) se pelo menos uma das variáveis de entrada for verdade. XOR: Operador lógico no qual a resposta da operação é verdade(1) quando as variáveis assumem valores diferentes entre si. VOCÊ JÁ OUVIU FALAR DE ESTIMATOR? Esta não é uma palavra com uma definição rigorosa, mas geralmente associada a encontrar um valor atual nos dados. Se não contássemos explicitamente a mudança em nosso bolso, poderíamos usar uma estimativa. AQUI AS ETAPAS DE UMA CLASSIFICAÇÃO SUPERVISIONADA COM PMC Aproximação universal de funções, classificação de padrões, identificação e controle de processos, previsão de séries e temporadas e otimização de sistemas. Rede Neural com keras Keras é uma biblioteca de rede neural de código aberto escrita em Python. É capaz de funcionar com o Tensor Flow, o Microsoft Cognitive Toolkit, o Theano ou o Plaid ML. Projetado para permitir a experimentação rápida com redes neurais profundas, ele se concentra em ser fácil de usar, modular e extensível. Rede Neural com keras Como estou estudando continuamente esse mundo, decidi transformar meus estudos em artigos de anotações. É mais ou menos como estudar em grupo; o tema é lançado e cada um contribui com seu pouco. Meu pouco hoje é sobre a construção de uma rede Neural com keras (uma simples). O que é Keras Keras é uma biblioteca para rede neural de alto-nível escrita em Python e roda como frontend em TensorFlow ou Theano. O bacana disso é que você pode substituir uma rede neural por outra utilizando Keras. Ela foi desenvolvida para facilitar experimentações rápidas, isto é, sem que você tenha que dominar cada um dos backgrounds, de maneira rápida e eficiente. A curta e clara descrição está na página inicial do site do projeto nesse link . A biblioteca é aplicável nas seguintes condições: ● Prototipagem rápida e fácil (total modularidade, minimalismo e extensibilidade). ● Suporte a redes convolucionais e recorrentes, incluindo combinação de ambas. ● Suporte a esquemas de conectividade arbitrária (incluindo treino de N para N). ● Rodar na CPU ou GPU. Aplicabilidade De que adianta tanta teoria sem aplicação? É o que normalmente acontece na escola no primeiro e segundo grau, onde a galera não tem muito incentivo pra gostar de matemática porque não é aplicada. Bem, um dos principais temas do meu site é embarcados e tudo o que escrevo deve ser relacionado. Estou com um robô quadrúpede aqui para escrever artigo e pretendo colocar ao menos um pouco de visão computacional nele e para reconhecimento facial, vou utilizar remotamente o Open Face (desse outro artigo). Devagar vou aplicando em diversas arquiteturas, incluindo Arduino (com o processamento remoto, claro), mas acompanhe os artigos precedentes, apenas como uma leitura de apreciação, caso não queira executar nenhum dos exercícios. Testes iniciais dos tutoriais de deep learning Alguns tutoriais virão de estudo das respectivas documentações, outros de tutoriais modificados e outros, de livros. Os de livros sempre são mais elaborados e cheios de minúcias, mas farei com que sejam breves e claros o suficiente, baseado no meu entendimento (que poderá ocasionalmente conter enganos). Instalação No tutorial anterior mostrei a instalação do Tensor Flow utilizando o virtualenv. Siga o tutorial como primeiro passo e depois incremente a instalação com os próximos passos. Se você já tem o virtualenv com o Tensor Flow do artigo anterior, então inicie o ambiente virtual para seguir: 1 source ~/tensorflow/bin/activate Se você digitar ‘pip search keras’ dentro do virtualenv, é capaz de você querer instalar tudo, mas vamos por partes: 1 pip install Keras learning ml scipy Essa instalação auto-incluirá o Theano, não se assuste. Os 6 passos finais Após a instalação, os 6 passos finais são totalmente relacionados ao código, mas se olhar de um modo geral, esse é o último passo. No tutorial que encontrei para fazer o primeiro teste o processo está descrito de forma similar. Gerar semente e carregar os dados Essa parte do processo auxiliará a obter os mesmos resultados toda a vez que rodar os testes, de modo que você poderá demonstrar os resultados ou debugar. Isso se resume a 1 única linha, mas como é o começo do código, tem os cabeçalhos e tal: 1 2 3 4 5 from keras.models import Sequential from keras.layers import Dense import numpy numpy.random.seed(7) Esse tutorial que me baseei utiliza um conjunto de dados de 5 anos de estudo de diabetes hereditária ( esse aqui ) feito com meninas de 21 anos de idade. A classificação é binária, onde diabetes é 1 e a negativa é 0. Acredito que a escolha tenha se baseado nesse fato pela facilidade de redirecionar esses dados para a rede neural. Baixe o conjunto de dados e coloque-o em seu diretório de trabalho, juntamente ao arquivo de código que estamos escrevendo. 1 2 wget -c http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes /pima-indians-diabetes.data mv pima-indians-diabetes.data pima-indians-diabetes.csv O arquivo será carregado completamente para a memória e então manipulado. Nesse ponto você já deve ter percebido que para um largo número de dados será necessária uma quantidade vasta de memória, exceto suas manipulações adotem outro meio. Para esse tutorial, não teremos problemas com esse conjunto de dados. As próximas linhas de código dividem o conjunto de dados em entradas e saídas (X e Y, respectivamente): 1 dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",") 2 3 X = dataset[:,0:8] Y = dataset[:,8] Definição do modelo de dados Os modelos em Keras são definidos como uma sequência de camadas. Ainda entraremos em detalhes sobre modelos e classificadores em outro artigo, por ora vamos manter o foco no tutorial. Isto facilita a criação do modelo, bastando inserir uma camada por vez até que estejamos satisfeitos com a topologia da rede. Tudo ficará mais claro, apenas acompanhe a leitura para assimilar as ideias e assim podermos em breve construir algo para embarcados. A primeira coisa a se fazer é garantir que a camada de entrada tem o número correto de inputs. Isto pode ser especificado enquanto criando a primeira camada com o argumento ‘input dim’, atribuindo-lhe 8, para o variáveis de entrada. Existe uma questão muito difícil a considerar, que é o número de camadas e seus tipos. O método heurístico certamente é uma grande opção para encontrar a melhor estrutura de rede, mas o problema é que você precisará de tempo para aprender a fazer tunnings. Por exemplo, quando iniciei minhas pesquisas em reconhecimento facial, passei por uma série complexa de experimentação até que (graças a Deus) iniciei experimentos com o OpenFace. Apesar de ser uma caixa de mágicas, levou praticamente um mês até que eu compreendesse alguns níveis importantes dessa estrutura para então chegar a 100% de confiabilidade em uma base de 40 pessoas. Conforme a base aumenta, a confidência diminui, mas nada mal chegar a 100% em uma base de treinamento com poucos minutos de sua criação. No exemplo que peguei com Keras, a estrutura de rede é fully-connected com 3 camadas. Isto é, todos osneurônios se comunicam antes da saída. Nós podemos especificar o número de neurônios na camada como primeiro argumento, o método de inicialização como segundo argumento sendo ‘init’ e especificar a função de ativação utilizando o argumento ‘activation’. Neste caso, nós inicializamos o peso da rede para um pequeno número randômico gerado a partir de uma distribuição uniforme (‘uniform’), entre 0 e 0.05, nesse caso, porque esse é o peso padrão da distribuição uniforme no Keras. Uma alternativa tradicional seria o ‘normal’, gerando assim pequenos números randômicos a partir de uma distribuição gaussiana. Também será usada a função retificadora ‘relu’ nas primeiras duas camadas e a função sigmoide na camada de saída. O resultado deverá ser algo entre 0 e 1 com um threshold padrão de 0.5. Enfim, montando o código, você pode notar que a primeira camada tem 12 neurôniose espera 8 variáveis de entrada. A segunda camada possui 8 neurônios e finalmente a saída tem 1 neurônio fazendo a predição da classe alvo (início de diabetes ou não). 1 2 3 4 model = Sequential() model.add(Dense(12, input_dim=8, init='uniform', activation='relu')) model.add(Dense(8, init='uniform', activation='relu')) model.add(Dense(1, init='uniform', activation='sigmoid')) Compilação do modelo A compilação do mdelo usa uma eficiente biblioteca numérica de backend, como Theano or TensorFlow. O backend automaticamente escolhe o melhor caminho para representar a rede e fazer predições. Será necessário em algum momento especificar a função de per para avaliar os pesos. Nesse exemplo foi definido o uso da função de perda logarítmica, definido em Keras como “binary_crossentropy”. Também é utilizado o algorítmo gradiente de descida ‘adam’. Repare que diversos nomes foram utilizados nos últimos parágrafos. Essas são as maiores dificuldades para iniciar-se em redes neurais e visão computacional, porque é necessário ter ao menos uma noção do que se trata, para poder posteriormente aplicá-las conforme a necessidade surgir. Eu estou baseando-me em um post de terceiro (em inglês, referenciado ao final do artigo) para ter o primeiro contato e a partir daí, aprender de uma forma mais suave. Isso significa que você não encontrará fórmulas prontas para todas as suas necessidades, mas você deverá sim criar suas próprias “receitas”. Ocasionalmente, alguns padrões podem trazer resultados satisfatórios. 1 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) Ajuste ou treino Nós podemos fazer essa tarefa com o método ‘.fit()’ do modelo para ajustar o número de iterações, utilizando o argumento nb_epoch. Por fim, com ‘batch_size’ ajustamos o número de instâncias. Esses valores podem ser ajustados por tentativa e erro: 1 model.fit(X, Y, nb_epoch=150, batch_size=10) Avaliando o modelo O treinamento da rede neural foi feita sobre o conjunto completo de dados e a performance da rede neural pode ser avaliada no mesmo conjunto de dados, o que nos dará uma boa ideia do quão bem modelada foi a rede. Mais que óbvio, utiliza-se a função evaluate() no modelo, passando o mesmo núermo de inputs e outputs usados no treinamento. Isto gerará uma predição para cada entrada e saída e coletará pontuação, incluindo média de perda e qualquer métrica que tenha sido configurada, como a acurácia. 1 2 scores = model.evaluate(X, Y) print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) Atando os nós O tutorial no qual me baseei mostrou o quão fácil pode ser modelar uma rede neural com Keras (claro que isso não significa que sua rede neural será supimpa sem os devidos ajustes e experimentações). Colocando todo o código junto, o resultado é isso: 1 2 3 4 5 6 7 8 9 1 0 11 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 # Create first network with Keras from keras.models import Sequential from keras.layers import Dense import numpy # fix random seed for reproducibility seed = 7 numpy.random.seed(seed) # load pima indians dataset dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",") # split into input (X) and output (Y) variables X = dataset[:,0:8] Y = dataset[:,8] # create model model = Sequential() model.add(Dense(12, input_dim=8, init='uniform', activation='relu')) model.add(Dense(8, init='uniform', activation='relu')) model.add(Dense(1, init='uniform', activation='sigmoid')) # Compile model model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # Fit the model model.fit(X, Y, nb_epoch=150, batch_size=10) # evaluate the model scores = model.evaluate(X, Y) print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) 2 1 2 2 2 3 2 4 São 24 linhas, incluindo os comentários! Utilizando o modelo em um novo conjunto de dados O tutorial no qual me baseei adicionou mais duas linhas de código para gerar novas previsões, resultando nesse código: 1 2 3 4 5 6 7 8 9 1 0 11 1 2 1 3 1 4 # Create first network with Keras from keras.models import Sequential from keras.layers import Dense import numpy # fix random seed for reproducibility seed = 7 numpy.random.seed(seed) # load pima indians dataset dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",") # split into input (X) and output (Y) variables X = dataset[:,0:8] Y = dataset[:,8] # create model model = Sequential() model.add(Dense(12, input_dim=8, init='uniform', activation='relu')) model.add(Dense(8, init='uniform', activation='relu')) 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 model.add(Dense(1, init='uniform', activation='sigmoid')) # Compile model model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # Fit the model model.fit(X, Y, nb_epoch=150, batch_size=10, verbose=2) # calculate predictions predictions = model.predict(X) # round predictions rounded = [round(x) for x in predictions] print(rounded) Se manja de inglês e quer um bom site como referência, sugiro o site desse tutorial em que me baseei para escrever esse post . Algumas informações sobre o Keras eu peguei no site oficial . A saída da execução do código de exemplo, mas utilizando TensorFlow como backend ( do artigo anterior ) é algo como: Keras usando TensorFlow | Rede Neural com keras E ao final: fim da execução | Rede Neural com keras Esse foi apenas um primeiro contato, em breve teremos artigos aplicáveis aos nossos embarcados, não deixe de acompanhar. Conclusão Portanto é certo também que esses processos cognitivos artificiais farão cada vez mais parte de nossas vidas, seja através de sistemas computacionais específicos ou mesmo para a pesquisa da neurociência. O uso de redes neurais em artigos científicos próprios das áreas biológicas também tem revelado outra tendência deste paradigma.
Compartilhar