Page 13 - Revista_60.pub
P. 13

A PROGRAMAR







        ATRAVÉS DOS OLHOS DE UMA REDE NEURONAL

              O resultado é uma matriz (feature map), onde se obser-  quência  para  identificar  elementos  hierárquicos  dentro  de
         va onde o filtro obteve a maior e menor correspondência:   outros  elementos  (por  exemplo  numa  primeira  passagem
                                                                identifica caras, e numa segunda passagem elementos den-
                                                                tro de caras como sendo olhos, nariz, boca, etc.)


                                                                Flatten
                                                                      Transforma  os  vetores  2D  resultantes  dos  passos
                                                                anteriores em vetores 1D, prontos para serem usados como
                                                                entrada para uma rede neuronal.




              Deverão  aplicar-se  tantos  filtros  quantos  necessários
         para identificar o máximo de features possíveis.       Full connection
              O  resultado  desta  operação  é  uma  convolution  layer,      Aplica  os  valores  dos  vetores  resultante  numa  rede
         composta por vários feature maps, sobre os quais se aplica, a   neuronal,  composta  pelas  layers  usuais:  input,  hidden,  out-
         cada valor, uma função ReLU (Rectifier Linear Unit): f(x) = max  put.  Uma  vez  que  se  trata  de  uma  classificação,  a  output
         (0, x); que altera os negativos para zero, introduzindo um fator   layer, terá tantos neurónios como os elementos a classificar,
         de não linearidade.                                    neste caso 6, sendo nesta última utilizada a função softmax,
                                                                para decidir qual o neurónio que obteve a maior classificação
              Assim,  se  considerarmos  preto  como  negativo,  branco   e portanto aquela cuja rede decidiu ser o elemento correto.
         como positivo e um nível intermédio de cinzento como zero, os
         valores do preto até ao zero, são todos alterados para o cin-
         zento zero.                                            Implementando
                                                                      Vamos  implementar  o  algoritmo  descrito  em  Python
                                                                3.6, utilizando a biblioteca Keras.
         Pooling
              De  seguida  aplica-se  um  down  sampling  às  feature   Começamos por importar as funções necessárias:
         maps, que consiste em dividir cada feature map em segmentos
         (por exemplo 2x2), e calcular o valor máximo de cada um (no   from keras.models import Sequential, load_model
                                                                from keras.layers import Conv2D, MaxPooling2D,
         caso do max pooling), sendo esse valor usado para gerar os                                             Flatten
         pooling feature maps que, como se compreende, são uma ver-  from keras.layers import Dense
         são reduzida dos originais (pixalizados). Este passo, para além   from keras.preprocessing import image
         de  reduzir  o  volume  de  dados  para  processamento,  torna  o   from keras.preprocessing.image import
                                                                                               ImageDataGenerator
         modelo independente de pequenas distorções ou ruído.   from numpy import expand_dims, argmax

                                                                      Introduzimos  um  conjunto  de  configuração:  largura
                                                                (W) e altura (H) das imagens (100x100), dimensão da matriz
                                                                dos  filtros  (3x3),  dimensão  do  downscaling  do  max  pooling
                                                                (2x2), caminho relativo para os ficheiros.

                                                                imgW, imgH = 100, 100
              No exemplo, aplica-se um max pooling de 2x2, reduzin-  kernel, downscale = 3, 2
         do  essa  forma  o  original  numa  versão  reduzida,  mas  preser-  path = 'dataset'
         vando os detalhes (features), identificados.
                                                                      As  imagens  estão  organizadas  em  pastas  entre
                                                                training e test set, e posteriormente em classes novamente
                                                                pelos nomes das pastas: apple (maça), banana, lime (lima),
                                                                orange (laranja), pineapple (ananás), strawberry (morango).





              Os  dois  passos  anteriores  (Convolution  +  ReLU,
         Pooling),  podem  ser  repetidos  mais  do  que  uma  vez  em  se-



                                                           13
   8   9   10   11   12   13   14   15   16   17   18