Prévia do material em texto
<p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 1/67</p><p>Redes neurais convolucionais</p><p>Prof. Sérgio Assunção Monteiro</p><p>false</p><p>Descrição</p><p>Conceitos sobre as redes neurais de convolução e suas aplicações no</p><p>contexto de aprendizado de máquina profundo.</p><p>Propósito</p><p>Compreender os fundamentos das redes de convolução ou</p><p>convolucionais (CNN – Convolutional Neural Networks) e as principais</p><p>arquiteturas e aplicações para classificação de imagens em</p><p>aprendizado de máquina profundo.</p><p>Preparação</p><p>É necessário criar uma conta no Google Colab para executar os</p><p>exemplos desenvolvidos na linguagem Python.</p><p>Objetivos</p><p>Módulo 1</p><p>Fundamentos de redes</p><p>convolucionais</p><p>https://colab.research.google.com/notebooks/welcome.ipynb?hl=pt-BR</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 2/67</p><p>Identificar fundamentos de redes convolucionais e suas aplicações.</p><p>Módulo 2</p><p>Arquiteturas de redes</p><p>convolucionais</p><p>Distinguir as principais variações de arquiteturas de redes</p><p>convolucionais e suas aplicações.</p><p>Módulo 3</p><p>Classi�cação de imagens com</p><p>rede convolucional</p><p>Empregar rede convolucional para classificação de imagens.</p><p>As redes neurais artificiais são aplicadas com sucesso em</p><p>diferentes contextos. De modo geral, elas simulam aspectos da</p><p>biologia que são representados por meio de modelos</p><p>computacionais. Recentemente, elas ganharam mais destaque com</p><p>a utilização do termo “Aprendizado Profundo” em que as</p><p>arquiteturas das redes possuem camadas ocultas que se conectam</p><p>para extrair características dos dados de treinamento.</p><p>As redes de aprendizado profundo possuem categorias que são</p><p>mais adequadas para determinadas situações, como é o caso das</p><p>redes neurais de convolução ou convolucionais (CNN –</p><p>Convolutional Neural Networks). As redes CNN têm sido</p><p>empregadas com sucesso para aplicações de visão computacional.</p><p>São estruturas elaboradas com diversos aspectos que devem ser</p><p>parametrizados. Felizmente, existem frameworks e bibliotecas</p><p>computacionais que facilitam o trabalho de desenvolvimento. Essa</p><p>área é muito relevante e tem crescido bastante nos últimos anos e</p><p>ainda tem muito espaço para avançar.</p><p>Introdução</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 3/67</p><p>1 - Fundamentos</p><p>de redes convolucionais</p><p>Ao �nal deste módulo, você será capaz de identi�car fundamentos de</p><p>redes convolucionais e suas aplicações.</p><p>Ligando os pontos</p><p>Você sabe o que é aprendizado de máquina profundo? Sabia que</p><p>existem modelos computacionais voltados para visão computacional?</p><p>Para respondermos a essas perguntas, vamos analisar algumas</p><p>situações práticas.</p><p>A Enxergue Mais S.A. (empresa fictícia) atua no ramo de segurança</p><p>privada. Ela desenvolve soluções de software utilizados para aumentar</p><p>os controles de proteção de pessoas e recursos patrimoniais. Entre as</p><p>soluções desenvolvidas, estão:</p><p>detecção de movimentos suspeitos;</p><p>identificação de pessoas em imagens estáticas e dinâmicas;</p><p>detecção de objetos que ofereçam riscos à segurança.</p><p>Essas aplicações constituem apenas uma parte das suas soluções,</p><p>pois, depois que quaisquer uma delas é acionada, são enviados alertas</p><p>para os responsáveis por garantir que a segurança seja mantida.</p><p>Hoje, as soluções da Enxergue Mais possuem um altíssimo padrão de</p><p>qualidade, mas no início não foi bem assim. Seus sócios fundadores</p><p>foram colegas de um curso de aprendizado profundo no qual estudaram</p><p>alguns modelos muito interessantes, mas o que mais lhes chamou a</p><p>atenção foi o modelo de rede neural de convolução, conhecido como</p><p>rede CNN em referência à expressão em inglês convolutional neural</p><p>network. Essa rede tem vários casos de sucesso aplicados para visão</p><p>computacional.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 4/67</p><p>Então, após dominarem os conceitos da CNN, os dois colegas</p><p>enxergaram uma oportunidade de negócio: aplicar a CNN para visão</p><p>computacional voltada para segurança. No entanto, ao realizar as</p><p>implementações, não foram bem-sucedidos inicialmente, pois as redes</p><p>CNN, semelhante aos demais tipos de redes neurais, têm um</p><p>comportamento fortemente influenciado por sua arquitetura, seus</p><p>valores dos parâmetros e dos dados fornecidos para treinamento. A</p><p>estratégia que adotaram foi aprofundar mais os estudos desses</p><p>modelos computacionais e realizar mais testes. Como consequência,</p><p>fundaram a Enxergue Mais S.A. e, hoje, estão à procura de pessoas para</p><p>compor os quadros da empresa e ajudá-la a evoluir ainda mais.</p><p>E você, o que acha do caminho que os fundadores da Enxergue Mais</p><p>tomaram?</p><p>Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos</p><p>ligar esses pontos?</p><p>Questão 1</p><p>Como visto, a Enxergue Mais S.A. encontrou nas redes CNN uma</p><p>oportunidade de melhorar a qualidade de suas soluções. O que</p><p>essas redes têm de especial que você poderia aplicar em sua</p><p>empresa?</p><p>Parabéns! A alternativa A está correta.</p><p>As redes CNNs são aplicadas para problemas de visão</p><p>computacional com muito sucesso. No caso da Enxergue Mais S.A.,</p><p>A</p><p>Funcionam muito bem para aplicações de visão</p><p>computacional.</p><p>B</p><p>São redes modernas que ajudam a fortalecer a</p><p>marca da empresa.</p><p>C São muito simples de serem usadas.</p><p>D Foi uma tentativa da empresa que deu certo.</p><p>E</p><p>São o único modelo computacional adequado para o</p><p>tipo de problema da empresa.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 5/67</p><p>os tomadores de decisão aprenderam isso e tiveram de trabalhar</p><p>bastante para viabilizar o uso no dia a dia da empresa.</p><p>Questão 2</p><p>Considere a seguinte situação: você é responsável por demonstrar</p><p>a eficácia de uma rede CNN sobre outros modelos existentes na</p><p>Enxergue Mais S.A. Como faria essa tarefa?</p><p>Parabéns! A alternativa C está correta.</p><p>Para testar a eficácia de um modelo em relação a outros, é preciso</p><p>utilizar uma métrica comum. No caso da Enxergue Mais S.A., é</p><p>necessário realizar testes em massas de dados aleatórios que</p><p>combinem situações muito simples e muito complexas para</p><p>verificar qual a resposta que os modelos produzem.</p><p>Questão 3</p><p>Considere a seguinte situação: você foi convidado para participar de um</p><p>treinamento da Enxergue Mais S.A. cujo objetivo é qualificar</p><p>profissionais para trabalhar nas soluções dela. Como você se</p><p>comportaria nesse curso para conseguir se destacar?</p><p>A</p><p>Através de métricas específicas de qualidade</p><p>específica para cada modelo.</p><p>B</p><p>Com a aplicação de testes em um conjunto</p><p>específico de dados.</p><p>C</p><p>Através de testes que utilizassem uma medida de</p><p>qualidade comum para os modelos.</p><p>D</p><p>Não é possível realizar esse tipo de teste, pois cada</p><p>modelo tem seus pontos fortes e fracos.</p><p>E</p><p>Os modelos devem ser testados através das</p><p>soluções oferecidas por bibliotecas de linguagens</p><p>de programação.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 6/67</p><p>Digite sua resposta aqui</p><p>Chave de resposta</p><p>Uma empresa como a Enxergue Mais S.A. está à procura,</p><p>constantemente, de pessoas talentosas e que possam contribuir</p><p>para a expansão dos negócios. Portanto, um curso de qualificação</p><p>deve ser visto como uma ótima oportunidade de demonstrar</p><p>interesse por redes CNN aplicadas aos problemas da empresa.</p><p>Estudar, fazer os exercícios e apresentar propostas de soluções é</p><p>uma excelente forma de se destacar.</p><p>Introdução às redes neurais</p><p>convolucionais (CNN)</p><p>As redes neurais artificiais são modelos computacionais baseados na</p><p>estrutura de uma rede de neurônios biológicos. Elas são usadas com</p><p>bastante sucesso no reconhecimento de padrões e, por isso, são</p><p>utilizadas para resolver muitos problemas práticos.</p><p>Com o avanço das aplicações das redes neurais, foram feitas</p><p>adaptações das arquiteturas dos modelos que tinham como objetivo</p><p>tratar, de forma mais especializada, determinados domínios</p><p>3, 4, 5, 6, 7, 8 e 9.</p><p>Visualização da arquitetura do</p><p>modelo</p><p>Agora, podemos visualizar a arquitetura da nossa implementação do</p><p>LeNet.</p><p>Primeiro, precisamos chamar a função “arquitetura_LeNet_5” e, em</p><p>seguida, solicitar ao Python que queremos ver um resumo do modelo.</p><p>O código é dado por:</p><p>Python </p><p>Perceba que passamos o nome ‘relu’ como parâmetro para a função</p><p>que vai montar a arquitetura do modelo.</p><p>O resultado da execução do código é dado pela imagem a seguir.</p><p>Arquitetura da nossa implementação do LeNet-5.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 58/67</p><p>Treinamento do modelo</p><p>Depois de estruturar a arquitetura do modelo, podemos iniciar a etapa</p><p>de treinamento.</p><p>Para isso, precisamos compilar o modelo por meio da função “compile”</p><p>e, em seguida, treiná-lo com a função “fit”.</p><p>A seguir, apresentamos o código de compilação e treinamento do</p><p>modelo.</p><p>Python </p><p>Vamos destacar alguns aspectos da implementação:</p><p>Os parâmetros de compilação: da função de perda, otimizador e</p><p>a métrica para validação do modelo;</p><p>No treinamento do modelo, guardamos o histórico para analisá-</p><p>lo posteriormente;</p><p>E, ainda, salvamos o modelo para poder carregá-lo em outro</p><p>momento.</p><p>Atenção</p><p>Salvar o modelo é importante quando queremos armazenar os dados de</p><p>treinamento.</p><p>A saída do treinamento é dada por:</p><p></p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 59/67</p><p>Atenção</p><p>Perceba algumas informações muito importantes em cada iteração da</p><p>saída: época, valor da função de perda e valor da métrica de avaliação,</p><p>no caso, acurácia.</p><p>Avaliação do modelo</p><p>Já fizemos o treinamento do modelo, então, precisamos testá-lo. Para</p><p>isso, vamos chamar a função “evaluate”, passando para ela os valores</p><p>de teste como parâmetros. O código que implementamos é dado por:</p><p>Python </p><p>Após a execução do código, obtemos:</p><p></p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 60/67</p><p>Isso significa que o modelo tem um erro de “0.0845” e acurácia de</p><p>“0.9742”.</p><p>Um modelo de boa qualidade vai produzir um erro</p><p>próximo de zero e acurácia perto de um.</p><p>Predição de dados</p><p>O nosso modelo já está treinado e fizemos uma avaliação da qualidade</p><p>dele. Agora, queremos ver na prática como ele faz a predição dos dados.</p><p>Vamos usar um dos dados que separamos para fazer o teste e ver como</p><p>o modelo se comporta.</p><p>O código que fizemos é dado por:</p><p>Python </p><p>Como resultado, o programa mostra o vetor de predição a seguir.</p><p></p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 61/67</p><p>Perceba que o maior valor do vetor é o da posição 4: 9.9373490e-01.</p><p>Quer dizer que o modelo tem maior confiança nessa categoria para</p><p>fazer a predição da entrada.</p><p>Atenção</p><p>Devemos notar que cada posição do vetor corresponde a uma categoria:</p><p>posição 1 corresponde ao dígito 0, posição 2 corresponde ao dígito 1 e</p><p>assim por diante.</p><p>Na imagem a seguir, mostramos a entrada que fornecemos para o</p><p>modelo e como o modelo fez a predição.</p><p>Imagem usada para teste.</p><p>Recuperação do modelo</p><p>Aqui, mostramos como recuperar o modelo que salvamos</p><p>anteriormente. Para isso, carregamos o modelo com o nome que</p><p>usamos para salvá-lo.</p><p>Veja o nosso código.</p><p>Python </p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 62/67</p><p>Impressão do treinamento</p><p>Já treinamos e testamos nosso modelo. Agora, vamos visualizar como</p><p>ele se comportou ao longo do treinamento. Para isso, vamos trabalhar</p><p>com a variável “historico_treinamento” que utilizamos para guardar as</p><p>informações do histórico do modelo durante a fase de treinamento.</p><p>Veja, a seguir, o nosso código.</p><p>Python </p><p>Vamos detalhar um pouco mais os dados que escolhemos exibir:</p><p>val_loss:</p><p>É o valor da função de custo para os dados de validação cruzada.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 63/67</p><p>Perda (loss)</p><p>É o valor da função de custo para os dados de treinamento.</p><p>Veja a seguir o resultado da execução do programa.</p><p>Gráfico do histórico de treinamento.</p><p>Redes de convolução na</p><p>prática</p><p>Um exemplo prático de redes de convolução usando a linguagem de</p><p>programação Python e o framework Tensorflow é apresentado no vídeo</p><p>a seguir.</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p></p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 64/67</p><p>Existem muitos pontos que devem ser considerados no</p><p>desenvolvimento de um projeto que utiliza redes de convolução</p><p>(CNN). Um dos fatores que facilita esse processo é o uso de</p><p>frameworks, como o Tensorflow. Em relação ao desenvolvimento de</p><p>um projeto de redes CNN, selecione a opção correta:</p><p>Parabéns! A alternativa C está correta.</p><p>As redes de convolução, como as demais redes neurais, são</p><p>modelos probabilísticos. Portanto, para que possam extrair as</p><p>características dos dados de treinamento e fazer generalizações, é</p><p>preciso separar os dados para treinamento, validação e teste.</p><p>Questão 2</p><p>As funções de ativação são um dos aspectos de um projeto que</p><p>utiliza redes de convolução (CNN). O framework Tensorflow já</p><p>disponibiliza essas funções, o que facilita bastante o trabalho de</p><p>desenvolvimento. Em relação às funções de ativação de redes CNN,</p><p>selecione a opção correta.</p><p>A</p><p>O principal aspecto que deve ser considerado em</p><p>um projeto de redes CNN é a organização das</p><p>camadas.</p><p>B</p><p>Frameworks como o Tensorflow evitam que o</p><p>desenvolvedor tenha que se preocupar com a</p><p>organização dos dados.</p><p>C</p><p>É fundamental fazer a separação dos dados para</p><p>avaliar a qualidade do modelo.</p><p>D</p><p>Existe uma proporção ideal para a separação dos</p><p>dados de treinamento e testes.</p><p>E</p><p>As redes CNN possuem estruturas rígidas quanto à</p><p>sua arquitetura, o que reduz as possibilidades de</p><p>erro ao longo do desenvolvimento.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 65/67</p><p>Parabéns! A alternativa E está correta.</p><p>As redes de convolução podem utilizar funções ReLu e tanh ao</p><p>longo do modelo, porém, na camada de saída, precisamos utilizar a</p><p>função de ativação SoftMax. O que vai definir qual é a melhor</p><p>função que deve ser aplicada é o contexto em que aplicamos o</p><p>modelo.</p><p>Considerações �nais</p><p>Ao longo do texto, abordamos conceitos sobre as redes neurais de</p><p>convolução e vimos aspectos sobre suas camadas de convolução,</p><p>preenchimento (padding), aglomeração (pooling) e totalmente</p><p>conectadas. Em especial, estudamos como as operações de</p><p>convolução, os filtros e outros hiperparâmetros são importantes para o</p><p>funcionamento dos modelos.</p><p>Focamos ainda as arquiteturas das redes CNN, que, ao longo dos anos,</p><p>evoluíram para modelos mais elaborados com taxas de erros muito</p><p>A</p><p>As funções de ativação devem ser escolhidas</p><p>levando em consideração as camadas</p><p>completamente conectadas do modelo.</p><p>B</p><p>A escolha da função de ativação está relacionada</p><p>aos hiperparâmetros do modelo, como stride e</p><p>padding.</p><p>C</p><p>As camadas das redes CNN estão habilitadas para</p><p>trabalhar apenas com determinadas funções de</p><p>ativação.</p><p>D</p><p>As funções de ativação não influenciam o tempo de</p><p>treinamento de um modelo.</p><p>E</p><p>As camadas ao longo do modelo podem combinar</p><p>funções ReLU e tanh.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 66/67</p><p>baixas, tornando mais evidente o potencial de aplicação dessas redes</p><p>para visão computacional.</p><p>Por fim, abordamos um exemplo prático com o uso da linguagem de</p><p>programação Python e o framework Tensorflow para implementar a</p><p>arquitetura LeNet-5. É importante tentar executar os exemplos e fazer</p><p>neles modificações para estudar o comportamento do modelo. Como</p><p>estudamos no decorrer do conteúdo, há bastante espaço para</p><p>propormos modificações e verificarmos quais são os seus efeitos.</p><p>Podcast</p><p>Ouça agora um resumo sobre as redes de convolução.</p><p></p><p>Explore +</p><p>Acesse o site oficial do Yann LeCun – responsável pela criação da</p><p>arquitetura LeNet-5 – e aprenda mais sobre a rede LeNet-5. Você</p><p>encontrará muitos exemplos de aplicação de visão computacional e</p><p>outros materiais que lhe darão ampla visão sobre as redes de</p><p>convolução.</p><p>Acesse o site oficial do Tensorflow e aprenda muito mais sobre esse</p><p>framework, por meio de exemplos e muitas fontes.</p><p>Referências</p><p>ASZEMI, N. M.; DOMINIC, P. D. D. Hyperparameter optimization in</p><p>convolutional neural network using genetic algorithms. Int. J. Adv.</p><p>Comput. Sci. Appl., vol. 10, n. 6, p. 269-278, 2019.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 67/67</p><p>CAMACHO, C. Convolutional neural networks. Publicado em: 3 de jun.</p><p>2018. Consultado na internet em: 13 ago. 2021.</p><p>FUKUSHIMA, K. Neocognitron: a self-organizing neural network model</p><p>for a mechanism of pattern recognition unaffected by shift in position.</p><p>Biol. Cybernetics 36, 193-202, 1980.</p><p>HUBEL, D.; WIESEL, T. Receptive fields and functional architecture of</p><p>monkey striate cortex. J. Physiol., 195, p. 215-243, 1968.</p><p>IMAGENET. Large Scale Visual Recognition Challenge (ILSVRC).</p><p>Consultado na internet em: 13 de ago. 2021.</p><p>KRIZHEVSKY, A.; SUTSKEVER, I.; HINTON, G. E. ImageNet classification</p><p>with deep convolutional neural networks. Adv Neural Inf Process Syst,</p><p>2012.</p><p>LECUN, Y.; BOTTOU, L.; BENGIO, Y.; HAFFNER, P. Gradient-based learning</p><p>applied to document recognition. Proceedings of the IEEE, 86, p. 2278-</p><p>2324, 1998.</p><p>SIMONYAN, K.; ZISSERMAN, A. Very deep convolutional networks for</p><p>large-scale image recognition. In ICLR, 2015.</p><p>SZEGEDY, C.; LIU, W.; JIA, Y. et al. Going deeper with convolutions.</p><p>Proceedings of the IEEE. Conference on computer vision and pattern</p><p>recognition (CVPR). p 1-9, 2015.</p><p>TARG, S.; ALMEIDA, D.; LYMAN, K. Resnet In Resnet: generalizing</p><p>residual architectures. Cornell University, 2016.</p><p>Material para download</p><p>Clique no botão abaixo para fazer o download do</p><p>conteúdo completo em formato PDF.</p><p>Download material</p><p>O que você achou do conteúdo?</p><p>Relatar problema</p><p>javascript:CriaPDF()</p><p>de</p><p>problemas.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 7/67</p><p>Um desses domínios de problemas é a visão computacional, a qual trata</p><p>das técnicas para que um sistema computacional possa distinguir</p><p>objetos em cenários que podem ser estáticos ou dinâmicos e, dessa</p><p>maneira, fornecer dados para que outras estruturas sistêmicas possam</p><p>analisar as propriedades desses objetos ou, ainda, acionar outras ações.</p><p>Nesse sentido, surgiram as redes neurais de convolução, mais</p><p>conhecidas pela sigla CNN, que é uma abreviação do termo original em</p><p>inglês: Convolutional Neural Network.</p><p>As CNN são uma classe de redes neurais artificiais que é</p><p>aplicada com sucesso para visão computacional.</p><p>O projeto da CNN foi desenvolvido para que ela extraia características</p><p>dos objetos de forma automática e adaptativa, por meio de algoritmo de</p><p>treinamento de retropropagação, usando, para isso, vários blocos de</p><p>construção como:</p><p>Camadas de convolução;</p><p>Camadas de pool;</p><p>Camadas totalmente conectadas em estruturas de</p><p>hierarquias espaciais.</p><p>Vamos abordar esses conceitos para entendermos, com mais clareza,</p><p>os fundamentos das CNN.</p><p>Arquitetura do córtex visual</p><p>Veja agora como surgiu essa arquitetura.</p><p> A origem das redes convolucionais está nos</p><p>trabalhos de David H. Hubel e Torsten Wiesel, nos</p><p>anos de 1958 e 1959, quando fizeram vários</p><p>i t t l d i</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 8/67</p><p>Dentro dos aspectos diretamente relacionados às redes CNN modernas,</p><p>está o fato de que muitos neurônios no córtex visual têm um pequeno</p><p>campo receptor local.</p><p>E o que isso implica?</p><p>Resposta</p><p>A reação desses neurônios é limitada a estímulos visuais localizados</p><p>em determinada região do campo visual. Entre os fatos importantes que</p><p>David H. Hubel e Torsten Wiesel descobriram, está a capacidade de os</p><p>campos receptivos de diferentes neurônios poderem se combinar por</p><p>meio de sobreposição e, juntos, revestirem todo o campo visual.</p><p>Além disso, eles conseguiram mostrar que alguns neurônios reagem</p><p>apenas a imagens de linhas horizontais, enquanto outros reagem</p><p>apenas a linhas com outras orientações. Dessa maneira, a arquitetura</p><p>do córtex visual é capaz de detectar quaisquer tipos de padrões</p><p>complexos do campo visual. Esses estudos e, em especial, um trabalho</p><p>sobre a rede neocognitron (FUKUSHIMA, 1980), evoluíram para as redes</p><p>convolucionais modernas.</p><p>Camada de convolução</p><p>A camada de convolução é responsável por mapear as características</p><p>da imagem que vamos fornecer para a CNN.</p><p>Cabe ressaltar que a camada de convolução é referida</p><p>pela expressão CONV.</p><p>Então, a camada CONV faz uso de filtros que realizam operações de</p><p>convolução enquanto ela processa a imagem de entrada. Veja um</p><p>exemplo de uma camada de convolução.</p><p>experimentos com gatos e, alguns anos depois,</p><p>com macacos (HUBEL; WIESEL, 1968).</p><p> Por trabalhos nesse campo de conhecimento, ou</p><p>seja, sobre a estrutura do córtex visual, os autores</p><p>receberam o Prêmio Nobel de Medicina e Fisiologia</p><p>em 1981.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 9/67</p><p>Camada de convolução.</p><p>Vamos entender melhor?</p><p>Temos uma imagem de entrada que é representada por uma matriz de</p><p>valores binários (valores 0 ou 1) de seis linhas e seis colunas.</p><p>Em seguida, selecionamos um bloco da imagem para aplicar um filtro. O</p><p>operador “*” representa a operação de convolução.</p><p>No caso, o valor “25” na matriz de resultado foi obtido a partir do</p><p>seguinte cálculo:</p><p>O processo deve continuar até que todos os quadros da imagem sejam</p><p>tratados.</p><p>Esses deslocamentos na imagem de entrada são chamados de</p><p>tamanho do passo, que, em inglês, é referenciado como stride.</p><p>Atenção</p><p>A camada de convolução tem como hiperparâmetros os tamanhos do</p><p>filtro e do passo. A saída resultante é chamada de mapa de</p><p>características, ou mapa de ativação.</p><p>Camada de preenchimento</p><p>(Padding)</p><p>Um aspecto que a CNN trata é que o centro de cada kernel possa se</p><p>sobrepor ao elemento mais externo da submatriz de entrada. Isso é feito</p><p>por meio de uma técnica chamada de preenchimento, mais conhecida</p><p>pelo nome original em inglês (padding), sendo mais comumente usada a</p><p>de preenchimento com zeros.</p><p>Na imagem a seguir, apresentamos um exemplo de padding.</p><p>f = 1 × 1 + 0 × 2 + 0 × 3 + 1 × 4 + 1 × 5 + 1 × 6 + 0 × 7 + 0 × 8 + 1 × 9</p><p>= 1 + 4 + 5 + 6 + 9 = 25</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 10/67</p><p>Exemplo de padding.</p><p>Comentário</p><p>As arquiteturas CNN utilizam o preenchimento zero para manter as</p><p>dimensões da matriz de entrada e aplicar mais camadas no modelo.</p><p>Sem o preenchimento de zero, cada mapa de características sucessivo</p><p>ficaria menor após a aplicação da operação de convolução.</p><p>Função de ativação</p><p>Após a aplicação da operação de convolução, os resultados são</p><p>passados como entrada para uma função de ativação não linear.</p><p>Existem algumas funções não lineares suaves que representam bem um</p><p>comportamento de neurônio biológico.</p><p>A seguir, apresentamos algumas das funções mais comumente</p><p>aplicadas:</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 11/67</p><p>Função sigmoide</p><p>A função, também chamada de função logística, é dada pela fórmula:</p><p>Função Tanh</p><p>A função tangente hiperbólica utiliza a função sigmoide na sua</p><p>composição. Sua fórmula é dada por:</p><p>Função ReLU</p><p>A função de ativação linear retificada é dada por:</p><p>A função ReLU é a mais utilizada na prática como função</p><p>de ativação na camada de convolução.</p><p>Outra função de ativação muito importante é a Softmax, utilizada no</p><p>final da CNN. Ela é definida como:</p><p>Em que:</p><p>representa o i-ésimo resultado da função Softmax;</p><p>representa o resultado para o i-ésimo neurônio de saída;</p><p>representa a quantidade de neurônios de saída.</p><p>Comentário</p><p>A função Softmax pode ser vista como uma função logística</p><p>generalizada que toma como entrada um vetor de pontuações z e</p><p>produz um vetor de probabilidade de saída p.</p><p>σ(s) =</p><p>1</p><p>1 + e−s</p><p>tanh(s) = 2σ(2s) − 1</p><p>ReLU(s) = max{0, s}</p><p>pi =</p><p>ezi</p><p>∑n</p><p>j=1 ezj</p><p>pi</p><p>zi</p><p>n</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 12/67</p><p>Camada de aglomeração (Pooling</p><p>layer)</p><p>A camada de aglomeração – normalmente referenciada por (POOL) – é</p><p>uma operação que tem por objetivo a redução da quantidade de</p><p>neurônios para as camadas posteriores.</p><p>A POOL, em geral, é aplicada após uma camada de</p><p>convolução.</p><p>A ideia da redução da imagem de entrada é diminuir a carga</p><p>computacional, o uso de memória e o número de parâmetros. É uma</p><p>forma de se prevenir em relação a um problema dos modelos de</p><p>aprendizado de máquina supervisionado: o risco de sobreajuste, mais</p><p>conhecido como overfitting, que ocorre quando o modelo fica</p><p>superespecializado nos dados de treinamento e não consegue</p><p>generalizar os resultados.</p><p>As duas principais operações pooling são:</p><p>Max pooling</p><p>Obtém o maior valor de uma submatriz. Ela preserva os recursos</p><p>detectados.</p><p>Average pooling</p><p>Obtém a média dos valores de uma submatriz. Logo, ela não preserva</p><p>os recursos detectados.</p><p>Na imagem a seguir, mostramos um exemplo das duas operações de</p><p>pooling.</p><p>Camada de pooling.</p><p>No caso da imagem de exemplo, observe o seguinte:</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 13/67</p><p>Da mesma forma que tivemos que definir o parâmetro do tamanho do</p><p>passo da camada de convolução, também precisamos fazer o mesmo</p><p>para a camada de aglomeração, além de definir as dimensões da matriz</p><p>de saída.</p><p>Comentário</p><p>Então, pelo que vimos, cabe destacar que um neurônio de pooling não</p><p>tem pesos. O que ele faz é agregar as entradas por intermédio de uma</p><p>função de agregação, como o máximo ou a média.</p><p>Camada totalmente conectada</p><p>Camada que, normalmente,</p><p>é aplicada no final de uma CNN. Ela opera</p><p>sobre uma entrada plana e cada uma das entradas é conectada a todos</p><p>os nós da camada consecutiva de neurônios. Veja:</p><p> Para calcular o max pooling, tivemos que verificar</p><p>quem era o maior elemento dentro de uma</p><p>submatriz e colocar o valor na saída</p><p>correspondente.</p><p> No caso do average pooling, tivemos que calcular a</p><p>média dos elementos de cada submatriz e associá-</p><p>la à respectiva posição de saída.</p><p> Devemos notar que a matriz de entrada possuía</p><p>quatro linhas e quatro colunas, ou seja, dezesseis</p><p>elementos.</p><p> Agora, a matriz resultante de cada operação de</p><p>aglomeração possui duas linhas e dois elementos,</p><p>ou seja, um total de quatro elementos em cada</p><p>matriz.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 14/67</p><p>Camada totalmente conectada.</p><p>Analisando a imagem da esquerda para a direita, vemos uma imagem</p><p>retangular que é transformada para uma matriz coluna. Em seguida,</p><p>cada célula de entrada é conectada a todos os neurônios da camada</p><p>seguinte.</p><p>As camadas totalmente conectadas também são</p><p>chamadas de camadas densas.</p><p>Parâmetros e</p><p>hiperparâmetros da rede</p><p>CNN</p><p>Como vimos até agora, quando trabalhamos com redes CNN,</p><p>precisamos nos preocupar com diversos aspectos, tais como a</p><p>quantidade de camadas de convolução e o dimensionamento das</p><p>matrizes de deslocamento para aplicar a operação de convolução, por</p><p>exemplo.</p><p>Como diferenciar parâmetro de hiperparâmetro?</p><p>Parâmetro</p><p>Quando uma variável é</p><p>otimizada</p><p>automaticamente</p><p>durante o processo de</p><p>treinamento.</p><p>Hiperparâmetro</p><p>Quando uma variável</p><p>precisa ser definida</p><p>com antecedência.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 15/67</p><p>É importante dedicarmos um pouco mais de atenção para essas</p><p>variáveis, para dimensionarmos corretamente a rede e</p><p>compreendermos quais são os recursos que vamos precisar para o</p><p>funcionamento adequado do modelo.</p><p>Entre os principais parâmetros da rede CNN, temos</p><p>(ASZEMI; DOMINIC, 2019):</p><p>As matrizes de filtros, chamada de kernels, que ficam na</p><p>camada de convolução;</p><p>Os pesos sinápticos que ficam na camada totalmente</p><p>conectada.</p><p>Já nos hiperparâmetros da rede, temos as seguintes situações:</p><p>Dimensões das matrizes de filtro (kernel), quantidade de filtros,</p><p>dimensões do deslocamento (stride), tipo de preenchimento</p><p>(padding) e funções de ativação.</p><p>Método de agrupamento, tamanho do filtro, deslocamento</p><p>(stride) e tipo de preenchimento.</p><p>Quantidade de pesos e função de ativação.</p><p>Arquitetura de modelo, método de otimização, taxa de</p><p>aprendizagem, função de perda, tamanho do lote (batch size),</p><p>épocas, regularização, método de pesos iniciais e forma de</p><p>divisão de conjunto de dados.</p><p>Os hiperparâmetros podem ser divididos em duas categorias:</p><p>Camada de convolução </p><p>Camada de aglomeração </p><p>Camada totalmente conectada </p><p>Outros aspectos </p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 16/67</p><p>Os que determinam a estrutura da rede;</p><p>Os que caracterizam o treinamento da rede.</p><p>Vamos analisar essas categorias com mais detalhes.</p><p>Hiperparâmetros que determinam</p><p>a estrutura da rede</p><p>Trata-se dos parâmetros que são usados para construir o modelo</p><p>computacional da rede. Os principais hiperparâmetros são:</p><p>Dimensionamento da matriz de filtros (kernel): a matriz</p><p>de filtros é aplicada na camada de convolução. Por meio</p><p>da operação de convolução entre a matriz de entrada</p><p>(imagem) e o kernel é que serão extraídas características</p><p>da imagem e repassadas para a próxima camada;</p><p>Tipo de kernel: as características que o kernel pode</p><p>extrair de uma imagem se referem à borda, detecção,</p><p>nitidez;</p><p>Stride: é a distância, ou número de pixels, que o kernel se</p><p>move sobre a matriz de entrada. Quanto maior for o stride</p><p>– ou, ainda, quanto maiores forem as dimensões do</p><p>stride –, menor será a sobreposição das entradas de uma</p><p>imagem e, além disso, menor será a matriz de</p><p>características resultante;</p><p>Preenchimento (padding): é a adição de camadas com</p><p>valores de zero (0) para garantir que o kernel passe além</p><p>da borda da imagem.</p><p>Observe que o preenchimento pode ser de três tipos:</p><p>Preenchimento válido (Valid</p><p>Padding)</p><p>Esta opção não faz preenchimento de zeros na imagem, o que implica,</p><p>ao longo da operação de convolução, a redução das dimensões do</p><p>mapa de características em relação à imagem de entrada.</p><p>Opção</p><p>O preenchimento válido também é chamado de “sem</p><p>preenchimento”.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 17/67</p><p>Mesmo preenchimento (same</p><p>padding)</p><p>Este preenchimento garante que a camada de saída tenha o mesmo</p><p>tamanho que a camada de entrada.</p><p>Preenchimento completo (full</p><p>padding)</p><p>É o tipo de preenchimento que aumenta o tamanho da saída</p><p>adicionando zeros à borda da entrada.</p><p>Agora, podemos calcular as dimensões da saída, ou seja, do mapa de</p><p>características. A fórmula é dada por:</p><p>Em que:</p><p>representa a dimensão largura (ou comprimento) da</p><p>imagem de entrada;</p><p>representa a dimensão largura (ou comprimento) da</p><p>matriz de filtro (kernel);</p><p>representa a dimensão largura (ou comprimento) do</p><p>preenchimento (padding);</p><p>representa a dimensão largura (ou comprimento) do</p><p>passo (stride).</p><p>Vamos entender melhor com um exemplo:</p><p>O =</p><p>(I − K + 2P)</p><p>S</p><p>+ 1</p><p>I</p><p>K</p><p>P</p><p>S</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 18/67</p><p>Exemplo para dimensionar a matriz de saída.</p><p>Temos as seguintes dimensões:</p><p>Stride:</p><p>Padding:</p><p>Kernel:</p><p>Imagem:</p><p>Concluímos, portanto, que a dimensão horizontal da matriz resultante é</p><p>dada por:</p><p>Seguimos vendo outros hiperparâmetros:</p><p>Camadas e unidades ocultas: entre as camadas de</p><p>entrada e saída, podemos adicionar camadas e unidades</p><p>ocultas. Para encontrar a quantidade ideal de camadas e</p><p>unidades ocultas, precisamos realizar testes. Trabalhar</p><p>com uma quantidade inadequada pode reduzir a</p><p>capacidade da rede de fazer classificações corretas, ou</p><p>aumentar o custo computacional para treinar a rede.</p><p>Funções de ativação: como vimos, essas funções</p><p>introduzem não linearidade ao modelo. Ao final da</p><p>camada de convolução, normalmente, aplicamos a</p><p>função ReLU por produzir melhores resultados, mas</p><p>também podemos usar as funções sigmoide e tanh, por</p><p>Sh = 2, Sv = 2</p><p>Ph = 1, Pv = 1</p><p>Kh = 2, Kv = 2</p><p>Ih = 4, Iv = 4</p><p>oh =</p><p>(4 − 2 + 2)</p><p>2</p><p>+ 1 = 3</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 19/67</p><p>exemplo. Já na camada de saída do modelo, aplicamos a</p><p>função de ativação Softmax.</p><p>Camada dropout: é uma técnica de regularização usada</p><p>para aumentar a precisão da rede no processo de</p><p>validação. Isso implica que a rede aumente sua</p><p>capacidade de generalização, evitando a</p><p>superespecialização, que é o problema conhecido por</p><p>overfitting. A ideia é que, no processo de treinamento,</p><p>alguns nós serão “esquecidos”, ou seja, não serão</p><p>levados em consideração no processo de aprendizado.</p><p>Esse hiperparâmetro é indicado para redes de grandes</p><p>dimensões, pois o efeito esperado é que o modelo tenha</p><p>mais oportunidade de aprender representações</p><p>independentes.</p><p>Hiperparâmetros que determinam</p><p>o treinamento da rede</p><p>As redes CNN são utilizadas, principalmente, para</p><p>aplicações de visão computacional.</p><p>Isso significa que elas são treinadas para reconhecer padrões</p><p>complexos de imagens. Para poderem ser aplicadas com essa</p><p>finalidade, elas precisam passar por um processo de treinamento que</p><p>seja eficiente, que inclui os ajustes de diversos parâmetros, sendo os</p><p>mais comuns: taxa de aprendizagem, momentum, quantidade de</p><p>épocas, tamanho do lote e pesos iniciais para rede.</p><p>Vejamos, a seguir, detalhes sobre cada um deles.</p><p>Taxa de aprendizagem</p><p>Define a velocidade com que a rede faz a atualização dos seus</p><p>parâmetros. É um valor numérico pertencente ao conjunto dos números</p><p>reais positivos. Quando a taxa de aprendizagem é baixa, o processo de</p><p>aprendizagem é lento, porém o algoritmo de treinamento converge</p><p>suavemente. Por outro lado, quando a taxa de aprendizagem é alta, ela</p><p>acelera o aprendizado, mas o algoritmo de treinamento pode não</p><p>convergir.</p><p>A formulação matemática para atualização dos pesos sinápticos é dada</p><p>por:</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 20/67</p><p>Em que:</p><p>: representa o peso sináptico na iteração t;</p><p>: representa o peso sináptico na iteração t-1, ou</p><p>seja, é o peso para a conexão (i,j) na iteração anterior à</p><p>iteração t;</p><p>: representa o incremento do peso sináptico na</p><p>iteração t-1. Sendo que sua fórmula é dada por:</p><p>: é a função erro, ou seja, ela mede a diferença entre os</p><p>resultados esperados e obtidos para o conjunto de</p><p>treinamento;</p><p>: é a taxa de aprendizagem positiva e constante.</p><p>Momentum</p><p>É um valor numérico positivo. Ele ajuda a atualizar os pesos sinápticos</p><p>da rede fazendo uso das informações das iterações anteriores, como</p><p>uma maneira de prevenir que eles tenham grandes oscilações.</p><p>A fórmula para incremento dos pesos com o Momentum é dada por:</p><p>Sendo que é o Momentum. O valor usado na prática varia entre 0,5 e</p><p>0,9.</p><p>Quantidade de épocas</p><p>wt</p><p>ji = wt−1</p><p>ji + Δwt−1</p><p>ji</p><p>wt</p><p>ji</p><p>wt−1ji</p><p>Δwt−1ji</p><p>Δwt−1ji = η ∂E</p><p>∂wji</p><p>E</p><p>η</p><p>Δwt</p><p>ji = η</p><p>∂E</p><p>∂wji</p><p>+ γΔwt−1</p><p>ji</p><p>γ</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 21/67</p><p>É a quantidade de vezes que todos os dados de treinamento são</p><p>fornecidos para a rede durante o treinamento. Dependendo da</p><p>quantidade de épocas, podem ocorrer duas situações:</p><p>Under�tting</p><p>Expressão utilizada para</p><p>indicar que a rede não</p><p>foi capaz de extrair as</p><p>características dos</p><p>dados de treinamento.</p><p>Uma quantidade</p><p>pequena de épocas</p><p>pode ser insuficiente</p><p>para que a rede</p><p>aprenda, levando a uma</p><p>situação de underfitting.</p><p>Over�tting</p><p>Termo que indica uma</p><p>superespecialização da</p><p>rede para os dados de</p><p>treinamento, o que</p><p>significa que a rede está</p><p>muito ajustada para os</p><p>dados de treinamento,</p><p>mas não é capaz de</p><p>generalizar os</p><p>resultados.</p><p>A utilização de muitas</p><p>épocas no treinamento</p><p>pode causar a situação</p><p>de overfitting.</p><p>Tamanho do lote</p><p>Esse hiperparâmetro é mais conhecido pelo termo em inglês: batch size,</p><p>que define a quantidade de amostras que serão propagadas pela rede.</p><p>Por exemplo, imagine que tenhamos 1000 amostras de treinamento e</p><p>configuremos o batch size igual a 100. O algoritmo de treinamento</p><p>trabalhará com as primeiras 100 amostras do conjunto de dados de</p><p>treinamento e treinará a rede. Em seguida, processará as segundas 100</p><p>amostras e, novamente, treinará a rede. Esse processo será repetido até</p><p>que todos os dados de treinamento sejam processados pela rede. Ainda</p><p>nesse exemplo, devemos observar que, para completar uma época com</p><p>o batch size igual a 100, o algoritmo precisa de dez iterações.</p><p>Pesos iniciais para rede</p><p>A rede precisa de pesos iniciais para começar a ser treinada. E essa</p><p>escolha pode influenciar a convergência do algoritmo de treinamento.</p><p>No entanto, é difícil definir qual a melhor estratégia. O mais comum é</p><p>escolher um esquema para obter valores iniciais de acordo com a</p><p>função de ativação usada em cada camada. Normalmente, é aplicada a</p><p>distribuição uniforme.</p><p></p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 22/67</p><p>Treinamento da rede CNN</p><p>O treinamento de uma rede neural, geralmente, é um processo que tem</p><p>como objetivo fazer com que a rede extraia informações dos dados de</p><p>treinamento e, desse modo, generalize seus resultados. No caso das</p><p>redes CNN, para atingir esse objetivo, o treinamento precisa encontrar:</p><p>Os kernels das camadas de convolução, ou seja, o</p><p>resultado da aplicação dos filtros de convolução nas</p><p>entradas de dados e das funções de ativação –</p><p>normalmente, é a função ReLU, como já mencionamos.</p><p>Os pesos sinápticos nas camadas totalmente conectadas</p><p>que minimizam as diferenças entre as previsões de saída</p><p>– que são os dados rotulados – e os resultados obtidos</p><p>para um conjunto de dados de treinamento.</p><p>O método mais utilizado para treinar redes neurais é o algoritmo de</p><p>retropropagação de erro, mais conhecido pelo termo em inglês</p><p>backpropagation. Esse algoritmo consiste em duas etapas distintas:</p><p>Etapa de avanço</p><p>Nesta etapa, as ativações são propagadas da camada de entrada para a</p><p>camada de saída.</p><p>Etapa de retrocesso</p><p>Nesta etapa, os pesos sinápticos são atualizados. O erro (a diferença)</p><p>entre os valores obtidos e o de referência da camada de saída é</p><p>propagado para trás.</p><p>Comentário</p><p>Uma informação interessante a respeito do valor de referência é que ele</p><p>pode receber outros nomes: valor nominal e valor alvo.</p><p>Função de perda</p><p>A função de perda é usada para medir a compatibilidade entre as</p><p>previsões de saída da rede e os valores obtidos. Ela também é</p><p>conhecida como função de custo. A ideia básica é bem simples:</p><p>Quanto menor for o erro, significa que a rede está bem</p><p>treinada para o conjunto de treinamento.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 23/67</p><p>Infelizmente, isso não significa que a qualidade de generalização da</p><p>rede é garantida.</p><p>Mas por que isso acontece?</p><p>Resposta</p><p>Porque podem ocorrer diversos problemas com os dados de</p><p>treinamento, levando ao overfitting.</p><p>Devemos lembrar, ainda, que a função de perda é aplicada depois da</p><p>função de ativação da camada de saída. Como aplicamos a função</p><p>Softmax, os valores de saída estarão entre 0 e 1.</p><p>As funções de perda são escolhidas conforme o seu contexto de</p><p>aplicação. Veja a seguir os dois casos mais comuns:</p><p>A entropia cruzada para classi�cação</p><p>multiclasse</p><p>Cuja fórmula é dada por:</p><p>O erro quadrático médio para regressão de</p><p>valores contínuos</p><p>Cuja fórmula é dada por:</p><p>H(y, ŷ) = −</p><p>1</p><p>N</p><p>N</p><p>∑</p><p>i=1</p><p>yi ⋅ log (ŷi)</p><p>MSE(y, ŷ) =</p><p>1</p><p>N</p><p>N</p><p>∑</p><p>i=1</p><p>(yi − ŷi)</p><p>2</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 24/67</p><p>Sendo MSE um acrônimo para o nome em inglês do erro quadrático</p><p>médio: mean square error. Além disso, , e são definidos</p><p>exatamente como no caso do erro de entropia cruzada.</p><p>Algoritmos de otimização</p><p>No treinamento da rede, precisamos aplicar um algoritmo de otimização</p><p>para minimizar a função de erro. Entre os algoritmos de otimização mais</p><p>comuns, estão:</p><p>Aplicações das redes CNN</p><p>A combinação de todos os aspectos que apresentamos até agora é a</p><p>base para o sucesso da aplicação das redes de convolução para tratar</p><p>problemas de visão computacional.</p><p>Podemos encontrar, então, exemplos de aplicações de redes CNN para</p><p>os seguintes domínios de visão computacional:</p><p>ŷ γ N</p><p> Gradiente de descida</p><p>É o método que calcula o gradiente da função de</p><p>custo e o utiliza para atualizar os pesos sinápticos</p><p>da rede.</p><p> Gradiente de descida estocástico</p><p>O método é semelhante ao gradiente de descida</p><p>que usa apenas um subconjunto dos exemplos de</p><p>treinamento de cada vez.</p><p> Gradiente acelerado de Nesterov</p><p>Este método dá um “salto” na direção do gradiente</p><p>acumulado anterior e depois faz uma correção</p><p>antes de atualizar os pesos.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 25/67</p><p>Classi�cação</p><p>Destaca categorias de objetos em uma imagem.</p><p>Localização</p><p>Destaca o objeto alvo da imagem dentro de uma moldura.</p><p>Detecção</p><p>Faz a localização de múltiplos objetos em uma imagem.</p><p>Segmentação</p><p>Classifica e localiza o objeto de interesse dentro da imagem.</p><p>Sabemos que as redes CNN são aplicações de</p><p>aprendizado supervisionado, portanto, a classificação</p><p>atribui um objeto de entrada a uma categoria das que</p><p>foram fornecidas como alvo (ou rótulo) para a rede.</p><p>Fundamentos das redes de</p><p>convolução</p><p>No vídeo a seguir, abordamos os aspectos fundamentais das redes de</p><p>convolução.</p><p>Falta pouco</p><p>para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p></p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 26/67</p><p>Questão 1</p><p>As redes neurais convolucionais são um exemplo da aplicação de</p><p>redes neurais para aprendizado profundo. Elas são utilizadas,</p><p>especialmente, para aplicações de visão computacional. Em</p><p>relação ao princípio de funcionamento das redes convolucionais,</p><p>selecione a opção correta.</p><p>Parabéns! A alternativa A está correta.</p><p>Os neurônios do córtex visual têm a capacidade de reconhecer</p><p>imagens através da combinação entre eles. Os pesquisadores David</p><p>H. Huber e Torsten Wiesel observaram em alguns animais que os</p><p>neurônios responsáveis pelo campo de visão reagiam de forma</p><p>especializada para determinadas características das imagens.</p><p>Questão 2</p><p>As redes neurais convolucionais são muito conhecidas. Isso se</p><p>justifica devido ao seu sucesso para resolver muitas situações</p><p>práticas, como o reconhecimento de imagens. Por outro lado,</p><p>implementar uma rede neural convolucional implica ajuste de</p><p>A</p><p>São baseadas no comportamento dos neurônios do</p><p>córtex visual de se combinarem para visualizar uma</p><p>imagem.</p><p>B</p><p>São baseadas nos neurônios artificiais, consistindo</p><p>no uso de mais camadas ocultas.</p><p>C</p><p>As redes convolucionais foram desenvolvidas no</p><p>ano de 1958 por pesquisadores que realizavam</p><p>trabalhos sobre a arquitetura do córtex visual.</p><p>D</p><p>São abstrações da arquitetura do córtex visual dos</p><p>animais.</p><p>E</p><p>São representações do comportamento</p><p>probabilístico das redes neurais artificiais que,</p><p>quando aplicadas para reconhecimento de imagens,</p><p>são chamadas de redes convolucionais.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 27/67</p><p>diversos hiperparâmetros. Em relação aos hiperparâmetros das</p><p>redes convolucionais, selecione a opção correta.</p><p>Parabéns! A alternativa B está correta.</p><p>Existem duas categorias para os hiperparâmetros: os estruturais e</p><p>os de treinamento. Os estruturais dão forma à arquitetura da rede,</p><p>enquanto os hiperparâmetros de treinamento são relacionados às</p><p>características dos algoritmos de aprendizado. A camada dropout</p><p>faz parte da categoria dos hiperparâmetros estruturais. Ela é</p><p>aplicada como uma tentativa de prevenir o overfitting da rede.</p><p>A</p><p>O batch size é usado para limitar a quantidade de</p><p>iterações que o algoritmo de treinamento vai utilizar</p><p>para treinar a rede.</p><p>B</p><p>A camada dropout é usada para prevenir que a rede</p><p>fique superespecializada nos dados de treinamento.</p><p>C</p><p>Os hiperparâmetros são limitados à camada</p><p>completamente conectada, uma vez que é nela que</p><p>ficam os pesos sinápticos.</p><p>D</p><p>Os filtros de convolução são utilizados para evitar a</p><p>sobreposição de informações dos dados de</p><p>entrada.</p><p>E</p><p>O hiperparâmetro de tipo de preenchimento é</p><p>utilizado para preservar as características dos dados</p><p>de entrada.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 28/67</p><p>2 - Arquiteturas</p><p>de redes convolucionais</p><p>Ao �nal do módulo, você será capaz de distinguir as principais</p><p>variações de arquiteturas de redes convolucionais e suas aplicações.</p><p>Ligando os pontos</p><p>Você já ouviu falar sobre arquitetura de rede neural? Sabia que essas</p><p>arquiteturas são construídas para melhorar o tratamento de um</p><p>problema? Para respondermos a essas perguntas, vamos analisar</p><p>algumas situações práticas.</p><p>A Estrutura Neural S.A. (empresa fictícia) trabalha em um ramo muito</p><p>específico: elaborar e testar a eficiência das arquiteturas de redes</p><p>neurais. Essa área de atuação surgiu de maneira bastante curiosa. O</p><p>fundador da empresa trabalhava como professor universitário. Uma de</p><p>suas atividades era orientar os estudantes na condução dos trabalhos</p><p>de projetos finais de curso. Um dos assuntos recorrentes desses</p><p>projetos era aplicação de redes neurais para visão computacional. E o</p><p>tipo de rede mais comum era a rede neural de convolução, mais</p><p>conhecida como rede CNN.</p><p>O professor observou que os resultados obtidos por essas redes eram</p><p>muito influenciados pela forma como eram estruturadas e pelos valores</p><p>dados aos seus parâmetros. Esse processo sempre foi muito complexo,</p><p>pois possui muitos detalhes e exige bastante experimentação. Então,</p><p>depois de ver esse cenário se repetir continuamente, ele teve a seguinte</p><p>percepção: “da mesma forma que essas dificuldades ocorrem com</p><p>meus alunos e alunas de projeto final, também deve ocorrer com muitas</p><p>empresas que utilizam essas redes para resolver problemas de visão</p><p>computacional”.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 29/67</p><p>A conclusão do professor estava certa, pois é bastante comum que as</p><p>pessoas utilizem funções de bibliotecas como caixas pretas,</p><p>especialmente, para resolver problemas do dia a dia. Obviamente, é</p><p>importante usar os recursos oferecidos pelas bibliotecas, mas, no caso</p><p>das redes neurais, é essencial entender como as engrenagens</p><p>funcionam. E foi isso que o professor fez. Ele elaborou um processo</p><p>para arquitetar, parametrizar e testar as redes CNNs para trabalhar com</p><p>problemas práticos relacionados às empresas interessadas em</p><p>aplicações de visão computacional. Hoje em dia, a Estrutura Neural S.A.</p><p>tem um portfólio de clientes engajados e possui no seu corpo funcional</p><p>muitos dos ex-orientandos do professor.</p><p>E você, o que achou do caminho que o professor trilhou até fundar a</p><p>Estrutura Neural S.A.?</p><p>Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos</p><p>ligar esses pontos?</p><p>Questão 1</p><p>Como visto, a arquitetura de uma rede CNN faz toda a diferença</p><p>sobre o desempenho dela. Pensando na importância da arquitetura</p><p>para essas redes e considerando o texto, qual a oportunidade de</p><p>negócio que você vislumbra para a Estrutura Neural S.A. em relação</p><p>às redes CNNs?</p><p>Parabéns! A alternativa B está correta.</p><p>A oportunidade que a Estrutura Neural S.A. encontrou foi a de</p><p>melhorar a qualidade das redes CNNs e aperfeiçoar os testes para</p><p>A Realizar aplicações de visão computacional.</p><p>B</p><p>Desenvolver arquiteturas e parametrizações</p><p>eficientes.</p><p>C</p><p>Agregar valor para o negócio dos clientes através de</p><p>técnicas de inteligência artificial.</p><p>D Encontrar novas oportunidades de negócio.</p><p>E</p><p>Desenvolver projetos de pesquisa em parceria com</p><p>instituições de ensino.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 30/67</p><p>construir parametrizações eficientes. Isso é fundamental, pois</p><p>essas redes são muito sensíveis à forma como são estruturadas e</p><p>aos valores iniciais de seus parâmetros.</p><p>Questão 2</p><p>Como visto, o processo de criação da Estrutura Neural S.A. não foi</p><p>trivial, e sim foi consistente. Na sua opinião como membro da</p><p>equipe da referida empresa, qual foi a grande ideia que o fundador</p><p>teve?</p><p>Parabéns! A alternativa E está correta.</p><p>O fundador da empresa era um professor que trabalhava com as</p><p>redes CNN com objetivos acadêmicos, mas, ainda assim, percebeu</p><p>que as dificuldades pelas quais passava não eram triviais e que era</p><p>muito provável que outros também as tivesse.</p><p>Questão 3</p><p>Considere o seguinte cenário: você foi um dos orientandos do fundador</p><p>da Estrutura Neural S.A. e, ao desenvolver o seu projeto, percebeu a</p><p>oportunidade de acrescentar uma solução que pode ser útil para a</p><p>empresa do professor. Nesse cenário, você faria para mostrar o</p><p>potencial do seu projeto?</p><p>A</p><p>As redes CNNs são excelentes para aplicações de</p><p>visão computacional.</p><p>B</p><p>As redes CNNs são úteis para questões de</p><p>segurança.</p><p>C</p><p>Uma das aplicações das redes CNN é para</p><p>identificação de objetos.</p><p>D</p><p>Muitas empresas ainda vão investir no uso de redes</p><p>CNNs, portanto é muito importante ser pioneiro.</p><p>E</p><p>Que outros tinham as mesmas dificuldades para</p><p>construir redes CNN.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 31/67</p><p>Digite sua resposta</p><p>aqui</p><p>Chave de resposta</p><p>Um bom projeto passa por diversas etapas, sendo a primeira delas</p><p>uma boa documentação. A ideia do que o projeto faz e como pode</p><p>ser útil precisa estar bem documentada, para que a pessoa que vai</p><p>avaliá-lo possa entender bem. No caso de uma rede CNN, é</p><p>fundamental, além da documentação, apresentar exemplos</p><p>práticos que demonstre a eficiência do projeto.</p><p>Arquiteturas de redes</p><p>neurais de convolução</p><p>A arquitetura básica da rede neural de convolução (CNN) é composta</p><p>por várias camadas:</p><p>Camadas de convolução;</p><p>Camadas de pooling;</p><p>Camadas totalmente conectadas.</p><p>Vejamos a representação geral da arquitetura da CNN.</p><p>Esquema conceitual de uma CNN.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 32/67</p><p>As camadas de convolução, normalmente, são seguidas por uma</p><p>camada ReLU, ou seja, a função de ativação ReLU é aplicada para cada</p><p>entrada resultante da aplicação da operação de convolução para a</p><p>entrada de dados.</p><p>Em seguida, vem a camada de pooling, com a aplicação de uma função</p><p>de max pooling, ou average pooling.</p><p>Na sequência, é aplicada outra camada de convolução com aplicação</p><p>da função de ativação e, depois, outra camada de pooling.</p><p>Veja, a seguir, os detalhes de cada etapa de processamento.</p><p> A imagem diminui à medida que é processada pela</p><p>rede</p><p> No final da rede, são adicionadas uma ou mais</p><p>camadas totalmente conectadas, em que os pesos</p><p>sinápticos são calculados.</p><p> Ao final de cada camada totalmente conectada</p><p>estão as funções de ativação, geralmente, as</p><p>ReLUs.</p><p> Por fim, a camada final produz a predição com a</p><p>aplicação de uma função de ativação que, nesse</p><p>caso, comumente é a função Softmax.</p><p> Por fim, a camada final produz a predição com a</p><p>aplicação de uma função de ativação que, nesse</p><p>caso, usualmente é a função Softmax.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 33/67</p><p>Banco de dados de dígitos</p><p>manuscritos</p><p>Um dos fatores que influenciaram o avanço das arquiteturas das redes</p><p>CNN foi a disponibilidade de banco de dados, no qual os pesquisadores</p><p>pudessem realizar testes e comparar resultados de modo confiável.</p><p>Uma dessas bases de dados muito utilizadas para aplicações de visão</p><p>computacional é a MNIST (THE MNIST DATABASE).</p><p>Vejamos um exemplo do banco de dados MNIST.</p><p>Exemplo de banco de dados MNIST.</p><p>A MNIST é uma base formada por um conjunto de dados</p><p>de imagens em tons de cinza de caracteres numéricos</p><p>escritos à mão.</p><p>Cada imagem é formada por um caractere no centro com 28 × 28 pixels.</p><p>O conjunto de dados possui um total de 70.000 imagens que cobrem os</p><p>dígitos de 0 a 9. Desse total, 50.000 imagens são usadas para</p><p>treinamento, 10.000 para teste e 10.000 para validação.</p><p>Dica</p><p>Devido à padronização de como os dados são armazenados, ou seja,</p><p>tamanhos constantes, escalas e escrita das imagens, esse banco de</p><p>dados é um ótimo recurso para estudar e testar algoritmos de</p><p>aprendizado de máquina, em especial, os que utilizam redes CNN.</p><p>Variações da arquitetura</p><p>das redes CNN</p><p>Ao longo dos anos, as arquiteturas das redes CNN evoluíram bastante.</p><p>Além de muita pesquisa sobre o assunto, o que ajudou bastante nessa</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 34/67</p><p>evolução foram competições como o ILSVRC (ImageNet Large Scale</p><p>Visual Recognition Challenge), que faz a avaliação dos algoritmos para</p><p>detecção de objetos e classificação de imagens (IMAGENET). Vamos</p><p>explorar algumas dessas arquiteturas para entendermos suas variações</p><p>e aplicações.</p><p>Especificamente, vamos abordar as arquiteturas:</p><p>LeNet-5, AlexNet, GoogLeNet, VGGNet, ResNet, Xception e SENet.</p><p>LeNet-5</p><p>A arquitetura LeNet-5 foi desenvolvida por Yann LeCun em 1998. Ela faz</p><p>a classificação de dígitos e foi aplicada para reconhecer números</p><p>escritos à mão em cheques digitalizados em imagens de entrada em</p><p>escala de cinza de 32 × 32 pixels. Essa arquitetura é composta pelas</p><p>camadas mostradas na tabela a seguir.</p><p>Número da camada</p><p>Dimensões da</p><p>entrada de dados</p><p>Dimensões do</p><p>kernel</p><p>1 32 × 32 -</p><p>2 28 × 28 5 × 5</p><p>3 14 × 14 2 × 2</p><p>4 10 × 10 5 × 5</p><p>5 5 × 5 2 × 2</p><p>6 1 × 1 5 × 5</p><p>7 84 -</p><p>8 10 -</p><p>Tabela: Arquitetura da LeNet-5.</p><p>Adaptada de Lecun et al., 1998.</p><p>Os dados da tabela referem-se às imagens da base de dados MNIST.</p><p>Devemos lembrar que as imagens do MNIST possuem 28 × 28 pixels,</p><p>então, para aplicar a LeNet-5, elas são preenchidas com zeros até 32 ×</p><p>32 pixels, que é o que ocorre na Camada 1. Além disso, elas precisam</p><p>ser normalizadas. A normalização consiste em transformar os valores</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 35/67</p><p>de entrada para uma escala de números entre 0 e 1 que, no caso da</p><p>base MNIST, basta dividir os valores por 255, uma vez que as imagens</p><p>estão em tons de cinza. Em seguida, os dados são fornecidos para a</p><p>rede. Nas próximas etapas, a LeNet-5 não faz uso nenhum de</p><p>preenchimento e, por isso, o tamanho da imagem diminui à medida que</p><p>avança pela rede.</p><p>De forma resumida, as demais camadas (de 2 a 8) têm a seguintes</p><p>funções:</p><p> Camada 2</p><p>Camada de convolução com seis kernels de</p><p>convolução de dimensões 5 × 5, e as dimensões do</p><p>mapa de características são de 28 × 28.</p><p> Camada 3</p><p>Camada de agrupamento (pooling) que faz a</p><p>subamostragem dos dados de entrada por meio do</p><p>método Average pooling.</p><p> Camada 4</p><p>Camada de convolução que abrange dezesseis</p><p>kernels de convolução de dimensões 5 × 5.</p><p> Camada 5</p><p>Semelhante à camada 3 com os kernels de</p><p>dimensões 2 × 2 e uma saída de dezesseis mapas</p><p>de características 5 × 5.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 36/67</p><p>Devemos observar ainda mais alguns pontos sobre essa arquitetura</p><p>LeNet-5:</p><p>Das camadas de 2 a 8, as funções de ativação aplicadas são do</p><p>tipo ReLU;</p><p>Na camada de saída, é aplicada a função de ativação Softmax.</p><p>AlexNet</p><p>A arquitetura AlexNet foi desenvolvida por Alex Krizhevsky, Ilya</p><p>Sutskever e Geoffrey Hinton, e venceu, em 2012, o desafio ImageNet</p><p>ILSVRC, obtendo uma taxa de erro de 17%, enquanto o segundo lugar</p><p>obteve uma taxa de 26%.</p><p>Comentário</p><p>Em muitos aspectos, ela é parecida com a LeNet-5. Entre as diferenças,</p><p>estão o fato de a AlexNet ser mais profunda – ter mais camadas ocultas</p><p>– e empilhar camadas convolucionais diretamente umas sobre as</p><p>outras.</p><p>Na tabela a seguir, podemos ver a arquitetura da AlexNet.</p><p> Camada 6</p><p>Também é uma camada de convolução com cento</p><p>e vinte kernels de convolução de dimensões 5 × 5.</p><p> Camada 7</p><p>É uma camada totalmente conectada.</p><p> Camada 8</p><p>É a camada de saída também do tipo totalmente</p><p>conectada.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 37/67</p><p>Número da camada</p><p>Dimensões do</p><p>kernel</p><p>Stride</p><p>1 - -</p><p>2 11 × 11 4</p><p>3 3 × 3 2</p><p>4 5 × 5 1</p><p>5 3 × 3 2</p><p>6 3 × 3 1</p><p>7 3 × 3 1</p><p>8 3 × 3 1</p><p>9 - -</p><p>10 - -</p><p>11 - -</p><p>Tabela: Arquitetura da AlexNet.</p><p>Adaptada de Krizhevsky et al., 2012.</p><p>A arquitetura da AlexNet consiste em:</p><p>Camadas de convolução de dimensões 11 × 11, 5 × 5, 3 × 3;</p><p>Camadas com pooling máximo;</p><p>Camadas com dropout;</p><p>Aumento de dados;</p><p>Funções de ativação ReLU após cada camada convolucional e</p><p>totalmente conectada;</p><p>Método de otimização SGD (Gradiente de Descida Estocástico) com</p><p>momentum.</p><p>Comentário</p><p>Uma rede semelhante à AlexNet, chamada ZF Net, foi desenvolvida por</p><p>Matthew Zeiler e Rob Fergus, e venceu o desafio ILSVRC de 2013.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 38/67</p><p>Basicamente, ela é AlexNet com alguns hiperparâmetros ajustados,</p><p>como:</p><p>Quantidade de mapas de características;</p><p>Dimensões do kernel etc.</p><p>GoogLeNet</p><p>Na competição ILSVRC 2014, o vencedor foi GoogLeNet. Essa</p><p>arquitetura também é conhecida como Inception V1 do Google.</p><p>Desenvolvida por Christian Szegedy, obteve um desempenho muito</p><p>próximo do nível humano, com uma taxa de erro abaixo de 6,67%.</p><p>Um dos fatores que influenciou o ótimo desempenho da rede</p><p>GoogLeNet foi o fato de ser muito mais profunda do que as CNN</p><p>anteriores, o que possibilitou a utilização mais eficiente de parâmetros</p><p>por meio de sub-redes chamadas de módulos de iniciação – mais</p><p>conhecidos pelo termo original em inglês, inception modules.</p><p>Vejamos a arquitetura básica de um módulo de iniciação na imagem a</p><p>seguir.</p><p>Módulo de iniciação.</p><p>Atenção</p><p>A notação “3 × 3” significa que a camada usa um kernel de dimensões 3</p><p>× 3. Todas as camadas convolucionais usam a função de ativação</p><p>ReLU.</p><p>Precisamos observar algumas questões importantes nessa arquitetura:</p><p>Ponto 1</p><p>No segundo conjunto de camadas convolucionais, a rede usa kernels de</p><p>dimensões diferentes: 1 × 1, 3 × 3 e 5 × 5. O objetivo é que eles capturem</p><p>padrões em escalas diferentes.</p><p>Ponto 2</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 39/67</p><p>As camadas utilizam o tipo de preenchimento (padding) igual a “mesmo”</p><p>e stride igual a 1. Isso significa que todas as suas saídas têm as</p><p>mesmas dimensões de suas entradas.</p><p>VGGNet</p><p>A VGGNet é um modelo de rede neural convolucional proposto por</p><p>Simonyan e Zisserman. Essa arquitetura obteve o segundo lugar na</p><p>competição ILSVRC 2014 e alcançou a precisão de 92,7% no ImageNet.</p><p>Sua arquitetura é considerada muito simples, seguindo padrão com uma</p><p>sequência com 2 ou 3 camadas convolucionais, e uma camada de</p><p>aglomeração (pooling) com um total de 16 camadas convolucionais</p><p>mais 2 camadas ocultas completamente conectadas e a camada de</p><p>saída.</p><p>A VGGNet utiliza muitos filtros, mas apenas com</p><p>dimensões 3 × 3.</p><p>ResNet</p><p>No desafio ILSVRC 2015, a ResNet, ou, ainda, rede residual, foi a grande</p><p>vencedora. Com isso, foi dado mais um passo na evolução das redes</p><p>CNN. Ela foi desenvolvida por pesquisadores da Microsoft e obteve uma</p><p>taxa de erro abaixo de 3,6%, usando uma CNN composta por 152</p><p>camadas. Com essa taxa de erro tão baixa, ficou confirmada uma</p><p>tendência geral: cada vez mais, os modelos de sucesso possuem</p><p>menos parâmetros e mais camadas.</p><p>Comentário</p><p>A principal característica dessa rede são as conexões de salto —</p><p>também chamadas de conexões de atalho — que compõem os blocos</p><p>residuais. A ideia é simples: o sinal que entra em uma camada também</p><p>é adicionado à saída de uma camada localizada um pouco mais acima</p><p>na pilha.</p><p>Vejamos a seguir um diagrama de um bloco residual.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 40/67</p><p>Bloco residual.</p><p>A conexão de salto previne que alguma camada</p><p>prejudique o desempenho da arquitetura.</p><p>Xception</p><p>O Xception é uma evolução da arquitetura GoogLeNet. Ele explora a</p><p>ideia de convolução separável em profundidade. Desenvolvida por</p><p>François Chollet, a arquitetura Xception possui 36 camadas</p><p>convolucionais que formam a base de extração de características da</p><p>rede. Essas camadas convolucionais, por sua vez, são estruturadas em</p><p>14 módulos, todos com conexões residuais lineares ao seu redor, exceto</p><p>o primeiro e o último módulos.</p><p>Resumindo</p><p>O Xception é uma arquitetura baseada no empilhamento linear de</p><p>camadas de convolução separáveis em profundidade com conexões</p><p>residuais.</p><p>SENet</p><p>A arquitetura que venceu o desafio ILSVRC 2017, obtendo uma taxa de</p><p>erro de 2,25%, foi a SENet – acrônimo do termo: Squeeze-and-Excitation</p><p>Network, que em tradução literal significa “rede de compressão e</p><p>excitação”. A SENet faz uma extensão das arquiteturas existentes, como</p><p>as das redes ResNets.</p><p>A ideia principal da arquitetura dela é adicionar parâmetros a cada canal</p><p>de um bloco convolucional, a fim de que a rede possa fazer ajustes para</p><p>ponderar, de forma adaptativa, cada mapa de características.</p><p>Curiosidade</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 41/67</p><p>Os blocos convolucionais da arquitetura SENet são chamados de</p><p>“blocos SE”, sendo S = Squeeze e E = Excitation.</p><p>Modelos pré-treinados para</p><p>transferência de</p><p>aprendizado</p><p>Vimos vários exemplos de arquiteturas de redes convolucionais, sendo</p><p>impressionante notarmos como elas continuam evoluindo. Basta</p><p>acompanharmos algumas competições, como a do ILSVRC</p><p>(IMAGENET).</p><p>Um ponto bastante interessante do ponto de vista prático</p><p>é que podemos utilizar redes pré-treinadas nessas</p><p>arquiteturas para desenvolvermos nossos projetos. É o</p><p>que chamamos de transferência de aprendizado.</p><p>Isso não significa que não vamos precisar treinar nossos modelos, mas</p><p>facilita bastante a etapa inicial do projeto. Em especial, quando</p><p>trabalhamos com ciclos ágeis de desenvolvimento como no RAD (Rapid</p><p>Application Development), no qual temos que fazer entregas com curtos</p><p>ciclos de desenvolvimento.</p><p>As principais arquiteturas</p><p>de redes de convolução</p><p>No vídeo a seguir, apresentamos as principais arquiteturas das redes de</p><p>convolução, com destaque para a rede LeNet-5.</p><p></p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 42/67</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>As redes neurais convolucionais (CNN) são compostas por diversas</p><p>camadas. Essas camadas têm finalidades distintas e o modo como</p><p>podem ser estruturadas caracteriza a arquitetura de uma rede CNN.</p><p>Em relação à arquiteturas das redes CNN, selecione a opção</p><p>correta.</p><p>Parabéns! A alternativa B está correta.</p><p>A arquitetura das redes CNN possuem camadas de convolução, de</p><p>pooling e totalmente conectadas, além das camadas de entrada e</p><p>de saída. Essas camadas têm objetivos distintos e bem</p><p>determinados e podem aparecer diversas vezes ao longo do</p><p>modelo.</p><p>A</p><p>As camadas têm objetivos distintos, mas podem ser</p><p>combinadas e mudar sua funcionalidade básica.</p><p>B</p><p>As camadas podem ser organizadas de diferentes</p><p>formas, inclusive camadas do mesmo tipo podem</p><p>aparecer mais de uma vez.</p><p>C</p><p>A arquitetura das redes convolucionais é dinâmica,</p><p>o que siginifica que as camadas podem mudar as</p><p>ligações entre si durante a execução.</p><p>D</p><p>O treinamento das redes neurais CNN pode reduzir o</p><p>tamanho dos dados de uma entrada, por isso é</p><p>necessário aplicar a camada de preenchimento.</p><p>E</p><p>A quantidade de camadas de uma arquitetura de</p><p>rede CNN é limitada a oito níveis, pois, do contrário,</p><p>seria necessário muito tempo para serem treinadas.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 43/67</p><p>Questão 2</p><p>Cada vez mais a demanda por aplicações de visão computacional</p><p>aumenta, como nas áreas de segurança, saúde e entretenimento.</p><p>As redes neurais de convolução (CNN) são aplicadas com sucesso,</p><p>especialmente para visão computacional, e possuem diversas</p><p>arquiteturas que estão em constante evolução. Em relação às</p><p>arquiteturas das redes CNN, selecione a opção correta.</p><p>Parabéns! A alternativa D está correta.</p><p>As redes de convolução são bastante conhecidas como modelos de</p><p>aprendizado profundo devido ao seu sucesso para aplicações de</p><p>visão computacional. Os desafios organizados sobre essa área</p><p>ajudam a divulgar novas arquiteturas e a atrair profissionais que, ao</p><p>longo dos anos, têm conseguido melhorar a taxa de acerto dos</p><p>modelos.</p><p>A</p><p>As arquiteturas das redes de convolução dependem</p><p>de informações dos dados de entrada, nesse</p><p>sentido, as competições contribuem para a</p><p>padronização desses dados.</p><p>B</p><p>As arquiteturas das redes neurais de convolução</p><p>têm evoluído para modelos de camadas lineares,</p><p>uma vez que são mais semelhantes com o córtex</p><p>visual.</p><p>C</p><p>As redes de convolução podem ter diferentes</p><p>arquiteturas, mas todas precisam utilizar a função</p><p>de ativação ReLU na camada de convolução.</p><p>D</p><p>As competições de visão computacional são um</p><p>dos fatores que auxiliam na padronização de bases</p><p>de dados que são usadas para testar as arquiteturas</p><p>das redes CNN.</p><p>E</p><p>Um dos importantes fatores que influenciaram o</p><p>avanço das arquiteturas das redes CNN foi a</p><p>limitação de camadas ocultas.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 44/67</p><p>3 - Classi�cação de imagens com rede</p><p>convolucional</p><p>Ao �nal deste módulo, você será capaz de empregar rede</p><p>convolucional para classi�cação de imagens.</p><p>Ligando os pontos</p><p>Você sabia que a rede de convolução é usada com sucesso para</p><p>problemas de visão computacional? Sabe que existem bibliotecas que</p><p>podem ajudar bastante para construção de soluções práticas? Para</p><p>entendermos sobre os conceitos na prática, vamos analisar uma</p><p>situação.</p><p>A Enxergue Mais S.A. (empresa fictícia) utiliza redes neurais de</p><p>convolução (CNNs) como a base de suas soluções de visão</p><p>computacional. Essas redes fazem parte de uma área conhecida como</p><p>aprendizado profundo (deep learning). O portfólio de clientes da</p><p>empresa é formado, principalmente, por companhias que possuem lojas</p><p>físicas que atuam na área de vendas de vestuário, acessórios e</p><p>utensílios para casa e escritório. Os clientes da Enxergue Mais utilizam</p><p>as aplicações dela de um modo muito interessante.</p><p>Quando o público-alvo da Enxergue Mais entra nas lojas, o sistema</p><p>identifica e classifica cada uma das peças vestidas tanto pelos clientes</p><p>e quanto por quem os acompanha. Em seguida, traça um perfil dessas</p><p>pessoas e constrói uma lista de opções de peças que melhor se</p><p>adequam a elas.</p><p>O próximo passo é oferecer para esses clientes ofertas personalizadas.</p><p>Obviamente, isso não extingue o processo de um cliente experimentar</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 45/67</p><p>uma roupa ou um acessório, mas, agora, isso ocorre de um modo que</p><p>aumenta as chances de satisfazer o cliente e concretizar as vendas.</p><p>A escolha da Enxergue Mais pelas redes CNNs foi realizada devido a</p><p>alguns motivos, entre os quais estão:</p><p>O fato conhecido de que essas redes têm um excelente</p><p>desempenho para aplicações de visão computacional.</p><p>A flexibilidade da estrutura da rede que permite que ela possa</p><p>produzir respostas muito rapidamente.</p><p>A convicção dos tomadores de decisão da empresa que utilizar as</p><p>redes CNNs pode ajudar a empresa a expandir sua área de</p><p>atuação.</p><p>Um dos grandes investimentos atualmente da Enxergue Mais é a</p><p>captação de pessoas ainda nas salas de aula para aprender como seus</p><p>sistemas funcionam e, claro, colaborar para a expansão da empresa.</p><p>E você, o que pensa sobre os planos de expansão da Enxergue Mais?</p><p>Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos</p><p>ligar esses pontos?</p><p>Questão 1</p><p>Como visto, a Enxergue Mais S.A. utiliza as redes CNNs para</p><p>construir suas soluções. Imagine que você é um integrante da</p><p>equipe de engenharia de software dessa empresa. Como justificaria</p><p>o motivo dessa escolha?</p><p>A</p><p>As redes CNNs são o único tipo de modelo</p><p>computacional que pode ser aplicado para</p><p>problemas de visão computacional.</p><p>B</p><p>Para se posicionar no mercado como uma empresa</p><p>inovadora.</p><p>C</p><p>Por ser o modelo computacional que as pessoas da</p><p>empresa dominam.</p><p>D</p><p>Devido à grande popularização dos métodos de</p><p>aprendizado de máquina.</p><p>E</p><p>As redes CNNs são adequadas para visão</p><p>computacional e oferecem flexibilidade.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 46/67</p><p>Parabéns! A alternativa E está correta.</p><p>A escolha da Enxergue Mais S.A. pelas redes CNNs deve-se ao fato</p><p>de que elas funcionam bem para aplicações de visão</p><p>computacional e são suficientemente adaptáveis para situações</p><p>práticas que fazem parte do negócio da empresa.</p><p>Questão 2</p><p>Como visto, o tipo de serviço oferecido pela Enxergue Mais S.A. é</p><p>muito interessante, mas bastante complexo de ser realizado. Como</p><p>você justificaria o emprego das redes CNNs na identificação das</p><p>roupas que as pessoas estão usando?</p><p>Parabéns! A alternativa B está correta.</p><p>Semelhante ao que ocorre com as demais redes neurais, as redes</p><p>CNNs devem ser treinadas com vários tipos de imagens a respeito</p><p>das possíveis roupas que os clientes podem utilizar. De fato, essa</p><p>A</p><p>As redes CNNs utilizam um grande banco de dados</p><p>de imagens das roupas que os clientes possam vir a</p><p>utilizar.</p><p>B</p><p>As redes CNNs precisam ser treinadas para</p><p>reconhecer características que auxiliem na</p><p>identificação das roupas.</p><p>C</p><p>Através de técnicas de processamento de imagens</p><p>que permitem destacar características específicas</p><p>das roupas dos clientes.</p><p>D</p><p>As redes CNNs utilizam elementos de uma base</p><p>histórica de imagens dos clientes para traçar perfis.</p><p>E</p><p>As redes CNNs são utilizadas em conjunto com</p><p>especialistas que identificam as roupas dos clientes</p><p>e auxiliam na classificação do perfil deles.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 47/67</p><p>etapa de treinamento foi um grande desafio enfrentado pela</p><p>Enxergue Mais S.A.</p><p>Questão 3</p><p>Considere o seguinte cenário: você foi contratado pela Enxergue Mais</p><p>S.A. para encontrar novas aplicações das redes CNNs e, assim, auxiliar a</p><p>empresa a expandir os negócios dela. Com base em sua experiência,</p><p>como você cumpriria essa missão?</p><p>Digite sua resposta aqui</p><p>Chave de resposta</p><p>A Enxergue Mais S.A. possui excelência na identificação de peças</p><p>de vestuário. Mais do que isso, ela identifica as peças enquanto os</p><p>clientes as vestem, o que torna a situação muito mais complexa.</p><p>Portanto, a proposta de expansão dos negócios tem de estar</p><p>relacionada às competências que a empresa já possui e manter o</p><p>mesmo padrão de qualidade. Um exemplo de área de atuação é na</p><p>de segurança patrimonial, que poderia ajudar a identificar objetos</p><p>usados por pessoas mal-intencionadas para cometer crimes.</p><p>Redes CNN na prática</p><p>Como vimos, as redes de convolução são excelentes para aplicações</p><p>em projetos de visão computacional. Para podermos desenvolver</p><p>projetos com elas, temos à disposição alguns recursos computacionais</p><p>que nos ajudam bastante nesse processo.</p><p>Aqui, vamos desenvolver um exemplo completo da arquitetura LeNet-5</p><p>usando, para isso, a linguagem de programação Python e o framework</p><p>TensorFlow.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 48/67</p><p>Python é uma linguagem de uso geral bastante utilizada</p><p>para aplicações de Ciência de Dados e Aprendizado de</p><p>Máquina.</p><p>Essa linguagem tem muita documentação disponível na internet e</p><p>diversas comunidades ativas que participam de fóruns onde</p><p>compartilham informações. Outro fator muito atrativo do Python é a</p><p>disponibilidade de plataformas on-line como o Google Colab, que facilita</p><p>muito o trabalho, pois nos poupa de fazer configurações locais que,</p><p>normalmente, são trabalhosas.</p><p>Junto com o Python, vamos utilizar o framework TensorFlow, muito</p><p>utilizado para a criação de aplicações de aprendizado de máquina, pois</p><p>disponibiliza diversos recursos, algoritmos e funções que nos ajudam a</p><p>colocar foco no projeto e nos libera de preocupações de como</p><p>implementar detalhes de tratamento de dados e dos algoritmos.</p><p>Google Colab</p><p>Plataforma que utilizamos para desenvolver o nosso projeto.</p><p>Atenção</p><p>O Tensorflow não fará escolhas do projeto por nós! Para implementar</p><p>um projeto de rede de convolução, precisamos ter conhecimento sobre</p><p>as camadas, os hiperparâmetros e toda a teoria que estudamos.</p><p>Implementação da</p><p>arquitetura LeNet-5</p><p>Agora, vamos estudar o passo a passo de uma implementação da</p><p>arquitetura LeNet-5, aplicada a reconhecer imagens na base de dados</p><p>MNIST, que é uma das mais utilizadas para testes de algoritmos de</p><p>aprendizado de máquina.</p><p>Comentário</p><p>Como estamos utilizando o Google Colab, o projeto está dividido em</p><p>blocos, o que facilita a compreensão de cada etapa.</p><p>Na nossa implementação, optamos por importar as bibliotecas nos</p><p>blocos de programação em que elas são necessárias, pois fica mais</p><p>claro entendermos a necessidade</p><p>de utilizá-las.</p><p>O projeto está dividido da seguinte maneira:</p><p>Carregamento dos dados</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 49/67</p><p>Fazemos a importação dos dados da base MNIST.</p><p>Visualização dos dados</p><p>Apresentamos as imagens que carregamos no passo anterior.</p><p>Separação dos conjuntos de dados</p><p>Fazemos a divisão dos dados que serão usados para treinamento,</p><p>validação e teste do modelo.</p><p>Preenchimento (padding)</p><p>Fazemos ajustes no preenchimento dos dados.</p><p>Normalização dos dados</p><p>É um ajuste importante para evitar erros.</p><p>Arquitetura LeNet</p><p>É a implementação da arquitetura, conforme a especificação.</p><p>Visualização da arquitetura do</p><p>modelo</p><p>Apresentamos a arquitetura implementada.</p><p>Treinamento do modelo</p><p>Fazemos a implementação do treinamento do modelo com os dados</p><p>que fornecemos.</p><p>Avaliação do modelo</p><p>Verificamos a qualidade do modelo.</p><p>Predição de dados</p><p>Aplicamos o modelo na prática para fazer classificações.</p><p>Recuperação do modelo</p><p>Recuperamos o modelo que salvamos depois do treinamento.</p><p>Impressão do treinamento</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 50/67</p><p>Mostramos como a função de erro se comportou ao longo do</p><p>treinamento.</p><p>Carregamento dos dados</p><p>A base de dados MNIST já está disponível no Tensorflow, inclusive, com</p><p>a separação dos dados para treinamento e teste. O que precisamos é</p><p>importar o Tensorflow e, depois, carregar os dados.</p><p>O código que implementamos para visualização dos dados é expresso</p><p>por:</p><p>Python </p><p>Perceba que, quando carregamos os dados, temos dois pares</p><p>ordenados: um de treinamento e outro de testes. Outro ponto a se</p><p>observar é que as variáveis “x_treino” e “x_teste” se referem aos dados</p><p>das imagens, enquanto as variáveis “y_treino” e “y_teste” se referem</p><p>aos rótulos das variáveis.</p><p>Visualização dos dados</p><p>Agora que já temos nossos dados carregados na memória, podemos</p><p>visualizá-los para verificar se tudo aconteceu corretamente até</p><p>determinado momento. Para isso, vamos utilizar a biblioteca</p><p>“matplotlib.pyplot” para imprimir os dados.</p><p>O código que implementamos para visualização dos dados é fornecido</p><p>por:</p><p>Python </p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 51/67</p><p>Logo no início do código, importamos a biblioteca “matplotlib.pyplot”.</p><p>Em seguida, usamos um laço para imprimir os cinco primeiros registros</p><p>do conjunto de dados de treinamento.</p><p>Veja a seguir a saída do programa, onde são apresentados o rótulo e a</p><p>imagem.</p><p>Cinco registros da base de treinamento.</p><p>Separação dos conjuntos de dados</p><p>O próximo passo consiste em organizar os dados em três subconjuntos.</p><p>Veja a seguir quais são eles.</p><p>Dados de treinamento</p><p>São usados para o modelo extrair as características dos dados e fazer</p><p>generalizações.</p><p>Dados de validação</p><p>São usados (ainda na fase de treinamento) para que o modelo possa se</p><p>ajustar.</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 52/67</p><p>Dados de testes</p><p>São utiizados para verificarmos a qualidade do modelo para fazer</p><p>predições.</p><p>O código para separação dos conjuntos de dados é fornecido por:</p><p>Python </p><p>Logo no início do código, importamos o pacote “numpy” que faz a</p><p>manipulação de vetores. A base MNIST possui um total de 70.000</p><p>registros, sendo que 60.000 são separados para treinamento e 10.000</p><p>para testes. Aqui, nós separamos os dados de treinamento em duas</p><p>partes: 55.000 registros para treinamento e 5.000 para validação do</p><p>modelo.</p><p>O resultado da execução do código é:</p><p>Formato da Imagem: (28, 28, 1);</p><p>Conjunto de Treinamento: 55000 registros;</p><p>Conjunto de Validação: 5000 registros;</p><p>Conjunto de Testes: 10000 registros.</p><p>Preenchimento (padding) dos</p><p>dados de entrada</p><p>Agora, precisamos fazer um ajuste nos dados de entrada. A camada de</p><p>entrada da arquitetura LeNet-5 consiste em imagens com dimensões de</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 53/67</p><p>32 × 32. Como vimos da execução do bloco anterior, as imagens do</p><p>MNIST têm dimensões 28 × 28.</p><p>Então, para aplicar a LeNet-5, precisamos preencher a entrada com</p><p>zeros (0) a fim de torná-la 32 × 32. Para isso, vamos usar a função “pad”</p><p>da biblioteca numpy.</p><p>O código para preenchimento dos dados fica assim:</p><p>Python </p><p>Veja a seguir como é dado o resultado da execução do código.</p><p>Informações sobre as mudanças dos dados de entrada:</p><p>Conjunto de Treinamento: (55000, 32, 32, 1).</p><p>Conjunto de Validação: (5000, 32, 32, 1).</p><p>Conjunto de Testes: (10000, 32, 32, 1).</p><p>Normalização dos dados</p><p>Os dados de entrada do MNIST estão em escalas de cinza, ou seja, vão</p><p>de 0 a 255. Então vamos transformá-los para dados no intervalo de 0 a</p><p>1. Para isso, basta dividirmos os valores das variáveis por 255.</p><p>O código para normalização dos dados é:</p><p>Python </p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 54/67</p><p>No início do código, usamos uma função “lambda” que recebe um</p><p>parâmetro “t” de entrada e retorna os valores divididos por 255.</p><p>Arquitetura LeNet</p><p>Até o momento, o que fizemos foi manipular os dados de entrada:</p><p>carregar, visualizar, separar e fazer ajustes. Agora, vamos implementar a</p><p>arquitetura da rede de convolução LeNet-5.</p><p>Lembre-se de que a LeNet tem 8 camadas: 1 de entrada, 3</p><p>de convolução, 2 de aglomeração (pooling) e 2 totalmente</p><p>conectadas, sendo uma delas a de saída.</p><p>Como se trata de uma arquitetura de modelo sequencial, precisamos</p><p>importar o pacote “Sequential” do tensorflow.keras. Em seguida,</p><p>precisamos importar os pacotes para cada camada do modelo.</p><p>O código que implementamos é dado por:</p><p>Python </p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 55/67</p><p>Fizemos a implementação de uma função:</p><p></p><p>Ela recebe como parâmetro o nome da função de ativação que</p><p>utilizamos nas camadas. Como podemos ver, cada trecho do código</p><p>precedido por “modelo.add” é responsável pela implementação de uma</p><p>camada.</p><p>Para ficar mais claro:</p><p>Conv2D</p><p>No caso das camadas de convolução.</p><p>AveragePooling2D</p><p>No caso das camadas de aglomeração (pooling).</p><p>Dense</p><p>No caso das camadas completamente conectadas.</p><p>Ainda há a situação em que precisamos “vetorizar” a camada de</p><p>convolução para poder se conectar com a penúltima camada</p><p>completamente conectada que é dada por Flatten.</p><p>Agora, vem uma parte muito importante! Precisamos lembrar que o</p><p>cálculo das dimensões da saída de uma camada é dado pela fórmula:</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 56/67</p><p>Assim, temos:</p><p>Camada 1</p><p>Recebe uma imagem de dimensões 32 × 32, kernel com dimensões 5 ×</p><p>5, padding igual a válido – que numericamente é igual a zero – e stride</p><p>igual a 1. Portanto, temos:</p><p>Camada 2</p><p>Recebe uma entrada de dimensões 28 × 28, kernel com dimensões 2 × 2,</p><p>padding igual a válido e stride igual a 1. Logo:</p><p>Camada 3</p><p>Recebe uma entrada de dimensões 14 × 14, kernel com dimensões 5 × 5,</p><p>padding igual a válido e stride igual a 1. Então, temos:</p><p>Camada 4</p><p>Recebe uma entrada de dimensões 10 × 10, kernel com dimensões 2 × 2,</p><p>padding igual a válido e stride igual a 1. Assim:</p><p>Da camada anterior temos 400 (= 5 × 5 × 16) nós com 120 filtros.</p><p>Conectamos esses 400 nós da camada anterior a 84 nós da próxima</p><p>camada. Por fim, temos uma camada de saída com dez neurônios, já</p><p>que os dados da base MNIST possuem dez categorias.</p><p>O =</p><p>(I − K + 2P)</p><p>S</p><p>+ 1</p><p>O1 =</p><p>(32 − 5 + 2(0))</p><p>1</p><p>+ 1 = 28</p><p>o2 =</p><p>(28 − 2 + 2(0))</p><p>1</p><p>+ 1 = 14</p><p>o3 =</p><p>(14 − 5 + 2(0))</p><p>1</p><p>+ 1 = 10</p><p>O4 =</p><p>(10 − 2 + 2(0))</p><p>2</p><p>+ 1 = 5</p><p>13/03/24, 19:56 Redes Neurais Convolucionais</p><p>https://stecine.azureedge.net/repositorio/00212ti/04164/index.html# 57/67</p><p>Atenção</p><p>Lembre-se de que as categorias dos dados da base MNIST se referem</p><p>aos dígitos 0, 1, 2,</p>