Imagem de Capa: Cinco tipos diferentes de cães. Esta gravura em madeira de 1547, criada por um artista desconhecido, faz parte da Coleção Wellcome. As Redes Neurais Convolucionais (CNNs) modernas poderiam analisar e classificar esses cães digitalizando a imagem, treinando com conjuntos de dados de raças de cães rotulados e identificando as raças usando camadas que extraem características, reduzem a dimensionalidade e classificam a imagem. Fonte da Imagem: Coleção Wellcome (Museu e biblioteca em Londres, Reino Unido) CC BY 4.0. Fonte: Wikimedia Commons.
Prof. Maurício Veloso Brant Pinheiro
Este artigo é baseado nas minhas anotações de aula do curso Tópicos Especiais D: Inteligência Artificial (TIA), uma disciplina de 60 horas para estudantes de graduação e pós-graduação do Departamento de Física da UFMG.
Resumo: Redes Neurais Convolucionais (CNNs) revolucionaram a visão computacional, transformando como máquinas percebem dados visuais. Inspiradas pelo sistema visual humano, as CNNs são essenciais para tarefas como reconhecimento de imagem, som, vídeo, e processamento de linguagem natural. Este artigo explora as CNNs, desde seu desenvolvimento histórico até a arquitetura, com um exemplo de reconhecimento de Xs e Os em uma matriz de 9×9 pixels. Abordamos camadas convolucionais, kernels, camadas de pooling e funções de ativação, e incluímos um aplicativo prático. A implementação é demonstrada usando uma CNN com Python e TensorFlow no Google Colab, treinando-a no banco de dados MNIST para reconhecimento de dígitos manuscritos. Concluímos discutindo outras aplicações das CNNs, como análise de imagens médicas e processamento de dados financeiros, destacando sua versatilidade.
1. Introdução
As Redes Neurais Convolucionais (CNNs) provocaram uma mudança de paradigma no campo da visão computacional, revolucionando a maneira como as máquinas percebem e interpretam dados visuais. Inspiradas pelo intrincado funcionamento do córtex visual humano, as CNNs se destacam no reconhecimento de padrões e estruturas em dados visuais, tornando-se indispensáveis em tarefas como reconhecimento de imagem, som e vídeo, classificação de imagens e até processamento de linguagem natural, onde as representações de dados espaciais desempenham um papel crucial.
Neste artigo, embarcamos em uma jornada no universo das Redes Neurais Convolucionais (CNNs). Começamos nossa exploração com uma visão geral concisa do seu desenvolvimento histórico, traçando a evolução das CNNs desde suas raízes até seu estado atual de destaque. Após este pano de fundo histórico, mergulhamos em uma comparação fascinante entre o sistema visual humano e os sofisticados mecanismos através dos quais as CNNs espelham sua dinâmica de processamento. Ao discernir os paralelos notáveis entre a visão biológica e a visão da máquina, desbloqueamos insights profundos sobre a notável eficácia das CNNs na decodificação e interpretação de dados visuais.
Avançando, exploramos a arquitetura básica das CNNs usando um exemplo simples, mas ilustrativo: reconhecer padrões em uma matriz de 9×9 pixels representando Xs e Os. Através deste exemplo, elucidamos os conceitos fundamentais subjacentes às CNNs, como camadas convolucionais, kernels, camadas de pooling e funções de ativação. Para ajudar na visualização das operações matriciais envolvidas, fornecemos um sandbox para plotagem de matrizes, permitindo que os leitores explorem interativamente o processo convolucional.
Em seguida, fazemos uma demonstração mais prática, mostrando como implementar uma CNN completa em Python, usando o TensorFlow, um popular framework de aprendizado profundo, dentro do ambiente Google Colab. Treinamos a CNN utilizando o banco de dados MNIST, um exemplo seminal no campo das CNNs, para reconhecimento de dígitos manuscritos. Ao mostrar o processo de treinamento e avaliar o desempenho do modelo, ilustramos a aplicabilidade das CNNs em tarefas de classificação de imagens no mundo real.
Finalmente, ampliamos o escopo de nossa discussão para explorar aplicações das CNNs além do reconhecimento de imagens, destacando sua versatilidade na análise de dados estruturados além dos domínios visuais tradicionais. Desde a análise de imagens médicas até o processamento de dados financeiros, as CNNs oferecem um poderoso conjunto de ferramentas para extrair insights significativos de diversos conjuntos de dados, sublinhando sua importância nas aplicações contemporâneas orientadas por dados.
Através desta exploração abrangente, nosso objetivo é proporcionar aos leitores uma compreensão mais profunda das CNNs, desde seus fundamentos teóricos até suas aplicações práticas, capacitando-os a aproveitar o potencial transformador dessa tecnologia inovadora em seus próprios empreendimentos.
2. Uma Breve História das CNNs
O conceito de redes neurais convolucionais foi introduzido pela primeira vez por Yann LeCun e seus colaboradores no final dos anos 1980 e início dos anos 1990. Seu trabalho na arquitetura LeNet demonstrou o potencial das CNNs para tarefas de reconhecimento de dígitos, como leitura de códigos postais e reconhecimento de dígitos manuscritos.

O campo deu um grande salto com a introdução da arquitetura AlexNet por Alex Krizhevsky, Ilya Sutskever e Geoffrey Hinton em 2012. A AlexNet competiu no desafio ImageNet Large Scale Visual Recognition (ILSVRC) e alcançou uma taxa de erro top-5 de 15,3%, superando significativamente o segundo colocado, que teve uma taxa de erro de 26,2%. Isso marcou um ponto de virada no campo, destacando o poder do aprendizado profundo e das CNNs para classificação de imagens em grande escala.

Após a AlexNet, várias outras arquiteturas expandiram os limites do desempenho das CNNs. Notável entre elas está a VGGNet, desenvolvida pelo Visual Geometry Group em Oxford, que enfatizou a profundidade através de filtros convolucionais muito pequenos (3×3), e a rede Inception do Google (GoogLeNet), que introduziu a ideia de módulos de inception para capturar eficientemente hierarquias espaciais.
Mais recentemente, a arquitetura ResNet, desenvolvida por Kaiming He e colegas, introduziu o conceito de aprendizado residual, permitindo o treinamento de redes ainda mais profundas ao resolver o problema do gradiente desvanecente. O desempenho do ResNet no concurso ILSVRC 2015 estabeleceu um novo padrão com uma taxa de erro top-5 de 3,57%.

Essas inovações não apenas estabeleceram as CNNs como a abordagem líder para uma ampla gama de tarefas de visão computacional, mas também abriram caminho para novas inovações no campo do aprendizado profundo.
3. Visão Humana e CNNs
Para compreender como as Redes Neurais Convolucionais (CNNs) emulam o sistema visual humano, é essencial mergulhar no intricado processo de formação de imagens e processamento cerebral. Nossa experiência visual começa com a entrada de luz em nossos olhos, atravessando a córnea, a pupila e a lente, convergindo finalmente na retina na parte posterior do olho. Dentro da retina, células fotoreceptoras especializadas, bastonetes e cones, convertem estímulos luminosos em sinais elétricos, iniciando o processo de percepção visual que é transmitido através do nervo óptico para diversas regiões do cérebro dedicadas ao processamento visual.

À medida que os sinais elétricos codificados pela luz atravessam o nervo óptico, eles alcançam o córtex visual do cérebro, localizado na parte posterior. Dentro do córtex visual, a informação visual passa por um processamento hierárquico, começando com características rudimentares como bordas e texturas identificadas nas camadas iniciais. Camadas subsequentes entrelaçam meticulosamente essas características elementares, revelando gradualmente padrões complexos que abrangem formas, objetos e cenários. Essa abordagem hierárquica permite ao cérebro construir uma representação refinada da paisagem visual, enriquecendo nossa compreensão.
Operando em conjunto com o processamento hierárquico, o córtex visual realiza também um processamento paralelo, facilitando a análise simultânea de diversos aspectos visuais. Através de fluxos paralelos, o córtex maneja habilmente uma variedade de pistas visuais, aumentando a eficiência do cérebro na decodificação e compreensão da entrada visual. Um fluxo pode focar na identificação de objetos (fluxo ventral), enquanto outro processa movimento ou relações espaciais (fluxo dorsal). Esse processamento paralelo reflete os diversos fluxos de informação visual processados por diferentes regiões do córtex visual.

Agora, vamos relacionar isso às CNNs. Inspiradas pelo córtex visual humano, as CNNs replicam seus mecanismos de processamento hierárquico e paralelo. Camadas convolucionais analisam meticulosamente regiões locais da imagem, detectando características semelhantes aos campos receptivos no córtex visual. Camadas subsequentes abstraem características em níveis mais altos, espelhando o processamento hierárquico. Além disso, as arquiteturas de CNN frequentemente incorporam processamento paralelo, com múltiplos ramos lidando com diferentes aspectos das imagens de entrada, de forma análoga aos fluxos paralelos do córtex visual.

Ao imitar esses princípios, as CNNs se destacam no reconhecimento de padrões em dados visuais, especialmente em tarefas de reconhecimento de imagem. Elas aprendem a identificar características únicas através das camadas convolucionais, as camadas de pooling resumem as características detectadas, e as funções de ativação introduzem não-linearidade. Esse processo hierárquico de extração de características é paralelo ao sistema visual humano, tornando as CNNs altamente eficazes em aplicações de visão computacional.
4. Fundamentos das CNNs: Reconhecendo Xs e Os
Vamos dar uma olhada em um problema simples para entender a arquitetura de uma Rede Neural Convolucional (CNN). Temos um conjunto de dados de imagens de 9×9 pixels, onde cada imagem contém ou um “X” ou um “O”. Nosso objetivo é construir uma Rede Neural Convolucional (CNN) que possa classificar essas imagens com precisão.

No entanto, a máquina enfrenta diversos desafios devido às variações na aparência dessas figuras. Modificações como mudanças na escala, rotações, translações e variações de cor podem dificultar para a máquina corresponder corretamente ao “X” ou “O” esperado com as imagens de entrada.

O que parece ser um problema simples para o cérebro humano—reconhecer um “X” ou “O” apesar dessas variações—é na verdade um problema muito difícil para uma máquina. Nossos cérebros são notavelmente adeptos em reconhecer padrões e formas, mesmo quando elas são transformadas de várias maneiras. Em contraste, uma máquina deve ser explicitamente treinada para lidar com essas variações.

Felizmente, as CNNs, ao imitarem a arquitetura do córtex visual humano, podem aprender a separar e reconhecer características dentro das imagens, apesar dessas transformações. Aqui está como uma CNN abordaria a resolução desse problema passo a passo:
Começamos com a etapa de convolução, que utiliza filtros para identificar padrões dentro da imagem. No contexto das CNNs, um filtro, também referido como kernel, é uma pequena matriz de pesos que percorre os dados de entrada (como uma imagem) para gerar um mapa de características. Esses filtros são projetados para capturar características distintas dos dados de entrada, como bordas, texturas ou outros padrões.

O mapa de características é construído multiplicando cada valor do filtro com o valor correspondente na matriz de entrada sobreposta pelo filtro e, em seguida, deslizando o filtro pela matriz de entrada para construir todo o mapa de características.

É preciso ter cuidado com as bordas da matriz de entrada. No nosso caso, usaremos três filtros 3×3 que representam as diagonais simples e um padrão reduzido de “X”. Os kernels são inicialmente sobrepostos na imagem de entrada de modo que suas bordas coincidam no canto superior esquerdo.



Após as etapas de multiplicação e média, o mapa de características é construído.


A saída da convolução é um mapa de características para cada kernel. No nosso caso, os mapas de características são matrizes 7×7 devido ao tratamento das bordas. Quando não se aplica padding e o stride é definido como 1, as dimensões da saída são reduzidas por um fator de 2. Padding envolve adicionar pixels extras ao redor da imagem de entrada para manter suas dimensões originais após as operações convolucionais, enquanto o stride determina o movimento do filtro por passo durante a convolução.

Após a convolução da matriz de entrada com os kernels, pode-se aplicar a normalização usando ReLU (Rectified Linear Unit) ou max-pooling para reduzir a dimensionalidade dos mapas de características. Uma função de ativação ReLU é aplicada aos mapas de características, definindo todos os valores negativos como zero.


A operação de max-pooling 3×3 também pode ser aplicada a cada mapa de características, o que reduz a dimensionalidade ao tomar o valor máximo de cada região 3×3 (e a borda esquerda).


Os mapas de características são então empilhados e se tornam as novas matrizes de entrada para uma nova camada de convolução.

O processo é então repetido, adicionando mais camadas de convolução com camadas de normalização e pooling.

Os 3 mapas de características de tamanho 4×4 são então achatados em um único vetor de comprimento 48. Este vetor representa as características extraídas da imagem original de 9×9 pixels.

Finalmente, o vetor achatado é passado por uma camada densa totalmente conectada (ou camadas) com o número apropriado de neurônios de entrada. Vamos assumir que temos 2 neurônios na camada de saída, correspondendo às duas classes: “X” e “O”.
Neste ponto, você deveria experimentar nosso aplicativo Matrix_Plotter

Para a transição entre as duas camadas densas, uma função de ativação Softmax é aplicada aos neurônios de saída para converter seus valores em probabilidades. A função de ativação Softmax é comumente utilizada na camada de saída de uma rede neural para tarefas de classificação. Ela converte os valores de saída brutos dos neurônios em probabilidades, facilitando a interpretação das previsões da rede. Isso nos permite interpretar a saída da rede como a probabilidade de cada classe dada os dados de entrada.

Após o avanço na camada densa, os neurônios da camada de saída fornecem probabilidades para cada classe. Por exemplo, eles podem produzir [0.63, 0.37], indicando uma probabilidade de 63% de que a imagem contenha um “X” e uma probabilidade de 37% de que contenha um “O” (para o vetor de características específico mencionado acima).
Assim, temos a arquitetura completa desta CNN.

O próximo passo é treiná-lo com dados de entrada rotulados, com o máximo de variações possíveis (rotações, translações, escalas e mudanças de cores). Isso é feito através de retropropagação utilizando otimizadores como o simples Descida de Gradiente Estocástica (SGD).
Após o treinamento, o modelo deve passar por testes e validações para avaliar seu desempenho de maneira precisa. Isso envolve a seleção de hiperparâmetros, tamanhos adequados para mini-lotes e os conjuntos de dados de teste e validação. Uma vez que estes são escolhidos adequadamente, o modelo CNN está pronto para fazer previsões sobre novos dados. É importante notar que os kernels, análogos aos pesos e viéses em uma rede neural padrão, são otimizados pela rede durante o processo de treinamento. Tipicamente, esses kernels são inicializados aleatoriamente e, através do processo iterativo de otimização no treinamento, eles evoluem para capturar características significativas dos dados de entrada.
5. Programando uma CNN simples para reconhecer dígitos manuscritos
Agora que você entendeu os fundamentos, é hora de mergulhar na construção da sua primeira CNN. O código que estamos prestes a implementar realiza reconhecimento e classificação de imagens de números do banco de dados MNIST. Se você está interessado apenas nos resultados e não possui experiência em programação, não se preocupe, pois o GPT-4 cuidará da programação para você, permitindo que você pule as complexidades técnicas e vá direto aos resultados.

No entanto, se você possui um entendimento básico de Python e TensorFlow, você tem a oportunidade de aprimorar ainda mais o código. Uma vez que o código seja gerado, é fácil copiá-lo para um novo notebook no Google Colab e executá-lo na nuvem. Simples, não é mesmo? Vamos demonstrar como isso pode ser feito em questão de segundos.
No GPT-4, nós inserimos um prompt como, por exemplo:
Prompt> Escreva um exemplo de código em Python para uma CNN que execute no Google Colab para identificação de dígitos manuscritos usando TensorFlow, Keras, Pandas e o banco de dados MNIST.
Como resultado, obtemos a seguinte resposta juntamente com o código completo.
Um exemplo simples e eficaz para demonstrar Redes Neurais Convolucionais (CNNs) é a classificação do conjunto de dados MNIST de dígitos manuscritos. Este conjunto de dados é amplamente utilizado no ensino devido à sua simplicidade e aos resultados visuais claros que produz.
Abaixo está o código completo e comentado gerado a partir deste único prompt. Clique aqui para visualizar o código no GitHub.
O Código:
O primeiro segmento deste código começa importando as bibliotecas necessárias para construir e treinar uma rede neural utilizando o conjunto de dados MNIST. As bibliotecas importadas são TensorFlow, Keras, NumPy e Matplotlib. TensorFlow é uma biblioteca popular de aprendizado de máquina desenvolvida pelo Google, e Keras é uma API projetada para funcionar em cima do TensorFlow para facilitar a criação de redes neurais. NumPy é usado para operações numéricas, especialmente para lidar com arrays, e Matplotlib é uma biblioteca de plotagem usada para visualizar dados.

A seguir, o conjunto de dados MNIST é carregado. O MNIST é um conjunto de dados amplamente utilizado que consiste em 70.000 imagens em tons de cinza de dígitos manuscritos (0-9), com 60.000 imagens destinadas ao treinamento e 10.000 para teste. As imagens têm tamanho de 28×28 pixels, e os valores dos pixels variam de 0 a 255.
As imagens são então remodeladas e normalizadas. A remodelagem adiciona uma dimensão de canal única às imagens, tornando sua forma (28, 28, 1), o que é necessário para certas camadas de rede neural. A normalização das imagens dimensiona os valores dos pixels para o intervalo [0, 1], o que pode ajudar a melhorar o processo de treinamento garantindo que as entradas estejam em uma faixa consistente.
Por fim, os rótulos, que são inteiros categóricos representando os dígitos, são codificados usando one-hot encoding. A codificação one-hot transforma os rótulos em vetores binários, onde o índice do dígito é marcado com um 1, e todos os outros índices são 0. Essa codificação é necessária para que a rede neural interprete corretamente os rótulos durante o treinamento.
Neste segundo segmento de código, um modelo de Rede Neural Convolucional (CNN) é construído, compilado, treinado e avaliado usando o conjunto de dados MNIST.

Primeiramente, o modelo é definido utilizando a classe Sequential do Keras, que permite uma pilha linear de camadas. O modelo CNN começa com uma camada convolucional (Conv2D) que aplica 32 filtros com um tamanho de kernel 3×3, seguido por uma função de ativação ReLU. A entrada é especificada como (28, 28, 1) para corresponder ao formato das imagens do MNIST. Em seguida, é adicionada uma camada de max-pooling (MaxPooling2D) que reduz as dimensões espaciais ao tomar o valor máximo sobre uma janela 2×2.
Outra camada convolucional com 64 filtros e um kernel 3×3, seguida por outra camada de max-pooling, é adicionada. Este padrão é repetido mais uma vez com uma camada convolucional adicional com 64 filtros. Após as camadas convolucionais, o modelo é achatado (flattened), convertendo os dados da matriz 2D em um vetor 1D, que é então alimentado em uma camada densamente conectada (Dense) com 64 unidades e uma ativação ReLU. A camada final é uma camada densa com 10 unidades (uma para cada dígito) e uma função de ativação softmax, que gera uma distribuição de probabilidade sobre as 10 classes.
O modelo é então compilado, especificando o otimizador Adam, a função de perda categorical cross-entropy e a métrica de acurácia para acompanhar o desempenho.
O treinamento do modelo é realizado usando o método fit, que recebe as imagens e rótulos de treinamento, executa por 10 épocas e utiliza o conjunto de teste para validação após cada época.
Por fim, o modelo é avaliado usando o método evaluate, que retorna a perda e a acurácia no conjunto de teste. A acurácia no teste é impressa para fornecer uma indicação do desempenho do modelo nos dados de teste não vistos.

A parte seguinte do código define uma função plot_history que visualiza a precisão e a perda de treinamento e validação de um modelo de aprendizado de máquina. A função recebe um objeto history como entrada, que é tipicamente retornado pelos processos de treinamento do modelo em frameworks de aprendizado profundo como o Keras. A função plt.figure é usada para criar uma nova figura com um tamanho especificado, enquanto plt.subplot é usado para definir uma grade de subplots dentro da figura.
No primeiro subplot, os valores de precisão de treinamento e validação são plotados em função das épocas. A precisão de treinamento é rotulada como ‘Precisão de Treino’ e plotada em uma cor, enquanto a precisão de validação é rotulada como ‘Precisão de Teste’ e plotada em outra cor. O gráfico recebe o título ‘Precisão do Modelo’, e os eixos x e y são rotulados como ‘Época’ e ‘Precisão’, respectivamente. Uma legenda é colocada no canto inferior direito para distinguir entre as duas linhas.
No segundo subplot, os valores de perda de treinamento e validação são plotados de maneira semelhante. A perda de treinamento é rotulada como ‘Perda de Treino’ e a perda de validação é rotulada como ‘Perda de Teste’. O gráfico recebe o título ‘Perda do Modelo’, e os eixos são rotulados como ‘Época’ e ‘Perda’. A legenda para este gráfico é colocada no canto superior direito. Finalmente, plt.tight_layout() é chamado para garantir que não haja sobreposição entre os subplots, e plt.show() exibe os gráficos. Após a definição da função, ela é chamada com o objeto history para gerar os gráficos. Esta visualização ajuda a entender o desempenho do modelo ao longo das épocas de treinamento, comparando precisão e perda tanto para os conjuntos de dados de treinamento quanto de validação.
A outra parte do código visa visualizar as previsões de um modelo de aprendizado de máquina em um conjunto de imagens de teste. A primeira linha executa a função de previsão do modelo nas imagens de teste, armazenando as saídas previstas na variável predictions.

Após isso, uma função plot_image é definida para plotar uma imagem individual junto com suas etiquetas previstas e verdadeiras. Esta função recebe quatro parâmetros: o índice i, o array de previsões predictions_array, a etiqueta verdadeira true_label e os dados da imagem img. Dentro da função, várias customizações de plotagem são aplicadas: a grade é desativada, e os ticks do eixo x e y são removidos para melhorar a clareza visual. A imagem é exibida usando plt.imshow, com um mapa de cores binário para representar a imagem em tons de cinza.
A função então determina a etiqueta prevista encontrando o índice do valor máximo em predictions_array, e a etiqueta verdadeira encontrando o índice do valor máximo em true_label. Ela utiliza essas etiquetas para definir a cor do texto do rótulo do eixo x: azul se a previsão estiver correta e vermelho se estiver incorreta. Por fim, o rótulo do eixo x é configurado para exibir tanto a etiqueta prevista quanto a verdadeira na cor especificada.
Esta visualização ajuda a entender o desempenho do modelo em imagens individuais de teste, mostrando claramente a etiqueta prevista e a verdadeira, juntamente com uma indicação se a previsão foi correta ou não.
Finalmente, a última parte do código estende a funcionalidade para plotar as probabilidades de previsão para cada classe junto com as imagens e suas etiquetas previstas. A função plot_value_array é definida para criar um gráfico de barras representando as probabilidades de previsão para cada classe. A função recebe três argumentos: o índice i, o array de previsões predictions_array e a etiqueta verdadeira true_label. As previsões e a etiqueta verdadeira são extraídas para o índice fornecido, e um gráfico de barras é plotado com as probabilidades de previsão. Os ticks do eixo x são definidos para variar de 0 a 9, correspondendo às classes, e o eixo y é limitado ao intervalo [0, 1]. A barra que representa a classe prevista é colorida de vermelho, enquanto a barra que representa a classe verdadeira é colorida de azul, fornecendo uma indicação visual do desempenho do modelo.
Então, um bloco de código configura a plotagem das primeiras 15 imagens de teste juntamente com suas etiquetas previstas e verdadeiras. O número de linhas e colunas para a grade de subplots é definido, com 5 linhas e 3 colunas, resultando em um total de 15 imagens. Uma figura é criada com um tamanho especificado para acomodar os subplots. Para cada imagem, dois subplots são criados lado a lado: um para a imagem com suas etiquetas previstas e verdadeiras, e outro para o gráfico de barras das probabilidades de previsão. A função plot_image é chamada para plotar a imagem, e plot_value_array é chamada para plotar as probabilidades de previsão.

A função plt.tight_layout() é utilizada para garantir que os subplots sejam organizados de forma organizada e sem sobreposição, enquanto plt.show() exibe os plots combinados. Essa visualização abrangente auxilia na avaliação do desempenho do modelo, fornecendo uma visão detalhada das probabilidades previstas e como elas se comparam às etiquetas verdadeiras para cada imagem de teste.
Resultados:
A execução do código no Google Colab levou aproximadamente 8 minutos. Este tempo inclui o processo completo de treinamento do modelo, avaliação e geração dos gráficos. Por favor, observe que o tempo real de execução pode variar dependendo de fatores como os recursos de hardware disponíveis e as condições de rede.

Como resultado, alcançamos uma impressionante precisão de teste de 99,2%. Esse alto nível de precisão indica que nosso modelo está se saindo excepcionalmente bem em reconhecer e classificar o conjunto de dados de teste. Tal resultado demonstra a eficácia da nossa arquitetura de rede neural e das etapas de pré-processamento aplicadas aos dados. Alcançar essa precisão destaca o potencial de nossa abordagem em aplicações do mundo real, onde previsões precisas e confiáveis são cruciais.

Após 10 épocas, tanto as perdas de treinamento quanto as de teste foram impressionantemente baixas, permanecendo abaixo de 0,05. Isso indica que nosso modelo aprendeu muito bem os dados de treinamento e também está generalizando de forma eficaz para novos dados não vistos anteriormente. Valores baixos de perda em ambas as fases de treinamento e teste sugerem que o modelo não está sofrendo de overfitting e é capaz de fazer previsões precisas. Esse nível de desempenho demonstra a robustez do nosso processo de treinamento e a adequação da arquitetura do modelo escolhido para esta tarefa específica.

Os números manuscritos previstos estão exibidos acima. Com esse nível de precisão, não houve erros nas previsões. Nosso modelo CNN foi completamente treinado, testado e validado, demonstrando excelente desempenho e confiabilidade.
Passos para Criar seu Próprio Modelo de CNN:
Construir seu próprio modelo de CNN é uma excelente maneira de aprofundar seu entendimento sobre redes neurais convolucionais e como elas são implementadas usando TensorFlow e Keras. Aqui está um guia para ajudar você a começar:
- Defina a Arquitetura do seu Modelo:
- Comece definindo a arquitetura do seu CNN. Decida o número de camadas convolucionais, camadas de pooling, ReLUs (se necessário) e camadas totalmente conectadas. Experimente diferentes configurações para ver como elas afetam o desempenho do modelo.
- Importe Bibliotecas Necessárias:
- Importe as bibliotecas TensorFlow e Keras, junto com quaisquer outras bibliotecas que você possa precisar para pré-processamento de dados ou visualização.
- Carregue e Pré-processe seus Dados:
- Escolha um conjunto de dados adequado para sua tarefa. MNIST, CIFAR-10 ou Fashion-MNIST são bons pontos de partida. Carregue o conjunto de dados usando as funções incorporadas do TensorFlow ou importando-o de uma fonte como keras.datasets.
- Pré-processe os dados normalizando-os para um intervalo de [0, 1], remodelando se necessário, e realizando quaisquer outras etapas de pré-processamento necessárias pelo seu conjunto de dados.
- Defina seu Modelo:
- Use tf.keras.Sequential para criar um modelo sequencial, ou crie um modelo funcional usando a API funcional do Keras se precisar de mais flexibilidade.
- Adicione camadas convolucionais (Conv2D) com filtros apropriados, tamanhos de kernel, funções de ativação e padding.
- Adicione camadas de pooling (MaxPooling2D ou AveragePooling2D) para reduzir as dimensões espaciais e extrair características dominantes.
- Adicione camadas de flatten (Flatten) para converter os mapas de características 2D em um vetor 1D para entrada nas camadas totalmente conectadas.
- Adicione camadas totalmente conectadas (Dense) com funções de ativação apropriadas.
- Experimente com camadas de dropout (Dropout) para evitar overfitting.
- Compile seu Modelo:
- Compile seu modelo usando um otimizador, função de perda e métricas apropriadas para sua tarefa. Por exemplo, use o otimizador Adam, perda de entropia cruzada categórica para tarefas de classificação e acurácia como métrica.
- Treine seu Modelo:
- Treine seu modelo usando o método fit. Forneça dados de treinamento, dados de validação, tamanho do lote e número de épocas. Monitore o progresso do treinamento e ajuste os hiperparâmetros conforme necessário.
- Avalie seu Modelo:
- Após completar o treinamento, avalie o desempenho do seu modelo em um conjunto de dados de teste separado usando o método evaluate. Calcule métricas como acurácia, precisão, recall e F1-score para avaliar o desempenho do modelo.
- Itere e Experimente:
- Experimente com diferentes arquiteturas, hiperparâmetros e técnicas de otimização para melhorar o desempenho do seu modelo.
- Visualize a precisão e perda de treinamento/validação para entender como seu modelo está aprendendo e se está sofrendo de overfitting ou underfitting.
- Itere sobre seu modelo com base nos insights obtidos da avaliação e visualização.
- Implante seu Modelo (Opcional):
- Quando estiver satisfeito com o desempenho do seu modelo, você pode implantá-lo para inferência em novos dados. Isso pode envolver exportar o modelo para um formato de arquivo como HDF5 ou TensorFlow SavedModel e integrá-lo em seu aplicativo ou servir via API web.
Dicas para Aprender e Compreender:
- Comece Simples: Comece com uma arquitetura básica e adicione gradualmente complexidade à medida que se sentir mais confortável.
- Experimente: Não tenha medo de experimentar diferentes arquiteturas, hiperparâmetros e técnicas de otimização para ver como elas afetam o desempenho do seu modelo.
- Visualize: Use ferramentas de visualização para entender como seu modelo está aprendendo e identificar problemas como overfitting ou underfitting.
- Aprenda com os Outros: Estude e replique arquiteturas de CNN existentes e tutoriais para obter insights sobre melhores práticas e técnicas.
- Pratique: Quanto mais você praticar a construção e treinamento de modelos de CNN, melhor você entenderá como eles funcionam.
Agora, munido dessas diretrizes, siga em frente e crie seu próprio modelo de CNN! Lembre-se, aprender é uma jornada, então não se desanime com contratempos. Continue experimentando, explorando e refinando suas habilidades. Feliz codificação!
6. Considerações Finais
Em resumo, Redes Neurais Convolucionais (CNNs) emergiram como uma força transformadora no campo da visão computacional e além, demonstrando desempenho de ponta em uma ampla gama de aplicações. Isso inclui classificação de imagens, onde CNNs se destacam na categorização de imagens em classes pré-definidas, e detecção de objetos, onde identificam e localizam múltiplos objetos dentro de uma imagem. Essa capacidade é crucial para avanços em áreas como direção autônoma e vigilância. Segmentação de imagens, outra aplicação vital, envolve a divisão de uma imagem em segmentos que correspondem a diferentes objetos ou regiões, sendo particularmente importante em imagens médicas e compreensão de cenas. Sistemas de reconhecimento facial também dependem amplamente de CNNs para identificar e verificar indivíduos com base em características faciais, uma tecnologia amplamente adotada em sistemas de segurança e plataformas de mídia social. Além disso, CNNs são utilizadas em reconhecimento de gestos, interpretando movimentos e gestos das mãos em tecnologias interativas, sistemas de realidade virtual e videogames.
Além disso, no campo da análise de imagens médicas, CNNs ajudam no diagnóstico de doenças a partir de exames médicos, aumentando significativamente as capacidades da radiologia e de outros domínios médicos. Sua notável capacidade de processar dados visualmente estruturados as tornou uma ferramenta inestimável nessas e muitas outras aplicações.
A versatilidade das CNNs vai muito além das tarefas tradicionais de reconhecimento de imagens. Como uma ferramenta multifacetada, CNNs são capazes de lidar com qualquer dado que possa ser representado visualmente, desde que os dados sejam codificados em uma matriz de pixels ou um tensor de voxels. Por exemplo, em reconhecimento de som e voz, sinais de áudio podem ser transformados em espectrogramas. Esses espectrogramas são então processados como imagens por CNNs para identificar e interpretar padrões de áudio, demonstrando sua adaptabilidade a diferentes tipos de dados. Na análise de dados financeiros, CNNs são usadas para analisar tendências de mercado transformando dados temporais séries em formatos visuais, como mapas de calor ou representações tempo-frequência. Isso permite que CNNs detectem padrões e façam previsões, mostrando seu potencial em diversos domínios além do espectro visual. CNNs continuam a revolucionar várias áreas, aproveitando sua capacidade de processar e analisar dados visualmente estruturados.
Por meio de nossa exploração abrangente, esperamos ter fornecido uma compreensão mais profunda das CNNs, desde suas bases teóricas até suas aplicações práticas. Ao aproveitar o potencial transformador das CNNs, os leitores podem utilizar essa tecnologia inovadora em seus próprios empreendimentos, desbloqueando novas possibilidades e impulsionando as fronteiras da inteligência artificial.
#IA #InteligênciaArtificial #CNN #CodificandoComChatGPT #VisãoComputacional #GoogleColab #Keras #AprendendoRedesNeuraisConvolucionais #Pandas #ReconhecimentoDePadrões #Python #Sandbox #TensorFlow
Referências:
100+ Machine Learning Projects with Source Code [2024]
Python Machine Learning Projects
Lee, H., Grosse, R., Ranganath, R. and Ng, A.Y., 2009, June. Convolutional deep belief networks for scalable unsupervised learning of hierarchical representations. In Proceedings of the 26th annual international conference on machine learning (pp. 609-616).
Mnih, V., Kavukcuoglu, K., Silver, D., Graves, A., Antonoglou, I., Wierstra, D. and Riedmiller, M., 2013. Playing atari with deep reinforcement learning. arXiv preprint arXiv:1312.5602.
Wang, A., Kurutach, T., Liu, K., Abbeel, P. and Tamar, A., 2019. Learning robotic manipulation through visual planning and acting. arXiv preprint arXiv:1905.04411.
Bishop, C.M., 2006. Pattern recognition and machine learning. Springer google schola, 2, pp.1122-1128.
Hearty, J., 2016. Advanced machine learning with Python. Packt Publishing Ltd.
Russell, S., & Norvig, P. (2016). Artificial Intelligence: A Modern Approach. Pearson.
Sutton, R. S., & Barto, A. G. (2018). Reinforcement Learning: An Introduction. MIT Press.
Müller, A. C., & Guido, S. (2016). Introduction to Machine Learning with Python: A Guide for Data Scientists. O’Reilly Media.

Copyright 2026 AI-Talks.org