Coletânea Python do ZERO às Redes Neurais Artificiais
Classificação a Partir de Imagens – TensorFlow – Fashion Dataset
Classificação a Partir de Imagens – TensorFlow –
Fashion Dataset
Para finalizar este capítulo, vamos dar uma breve explanada sobre como
podemos criar modelos de redes neurais artificiais convolucionais a partir do TensorFlow. Esta biblioteca, desenvolvida pelo Google e liberada para uso no modelo open-source, possui um modelo lógico e estrutural que por sua vez vem sendo aprimorado pela comunidade para que tal ferramenta seja de fácil acesso e o principal, ofereça melhor performance se comparado com as outras bibliotecas científicas desenvolvidas para Python.
Internamente, o modelo de funcionamento de uma rede neural via TensorFlow se difere do convencionam uma vez que sua estrutura lógica segue um padrão de fluxo, onde as camadas de processamento realizam processamento em blocos e dessa forma se obtém melhor performance.
Raciocine que em um modelo de rede neural como viemos trabalhando até então criamos a estrutura de camadas “engessadas” entre si, uma pequena alteração que impeça a comunicação correta entre camadas resulta em uma rede que não consegue ser executada.
O principal do TensorFlow veio justamente nesse quesito, existe obviamente a comunicação entre camadas da rede, mas estas por sua vez podem ser desmembradas e processada a parte.
De forma geral, para fácil entendimento, via TensorFlow é possível pegar um problema computacional de grande complexidade e o dividir para processamento em pequenos blocos (até mesmo realizado em máquinas diferentes) para que se obtenha maior performance.
Para nosso exemplo, usaremos de uma base de dados Fashion MNIST, base essa integrante das bases de exemplo da biblioteca keras.
Basicamente a biblioteca Fashion conta com 70000 amostras divididas em 10 categorias diferentes de roupas e acessórios. A partir dessa base, treinaremos uma rede neural capaz de classificar novas peças que forem fornecidas pelo usuário.
O grande diferencial que você notará em relação ao modelo anterior é a performance. Muito provavelmente você ao executar o modelo anterior teve um tempo de execução da rede de mais ou menos uma hora. Aqui faremos um tipo de classificação com um volume considerável de amostras que será feito em poucos segundos via TensorFlow.
Como sempre o processo se inicia com a importação das bibliotecas, módulos e ferramentas necessárias. Note que aqui já de início estamos realizando um tipo de importação até agora não vista em outro modelo, from __future__ estamos importando uma série de ferramentas internas ou experimentais do Python, a nomenclatura com “__” antes e depois de um determinado nome significa que tal nome é reservado para uma função interna, não sendo possível atribuir a uma variável ou outra coisa.
De __future__ importamos absolute_import, division, print_function e unicode_literals. Em seguida importamos tensorflow e a referenciamos como tf, já as linhas abaixo são de importações de bibliotecas conhecidas.
Em seguida criamos nossa variável de nome base que recebe o conteúdo de fashion_mnist das bibliotecas exemplo do keras.
Após selecionada e executada a linha de código anterior, é feita a respectiva importação, na sequência podemos criar nossas variáveis designadas para treino e teste que recebem o conteúdo contido em base, importado anteriormente.
Da mesma forma é criada a variável rotulos que por sua vez recebe como atributos, em forma de lista, os nomes das peças de vestuário a serem classificadas. Para finalizar este bloco, realizamos a conversão dos dados brutos de int para float para que possamos os tratar de forma matricial.
Se até o momento não houve nenhum erro de sintaxe, podemos verificar via explorador de variáveis que de fato foram criadas as referentes variáveis para entradas de treino e teste assim como para as saídas de treino e teste.
Apenas por hora note que etreino possui 60000 amostras que por sua vez estão no formato de uma matriz 28x28, eteste por sua vez possui 10000 amostras no mesmo formato.
Em seguida podemos fazer a visualização de uma amostra dessa base de dados, aqui, um pouco diferente do que estamos habituados a fazer, vamos reconstruir uma imagem pixel a pixel e exibir em nosso console. Para isso passaremos alguns argumentos para nossa matplotlib, o primeiro deles é que a imagem a ser exibida terá um tamanho de plotagem (e não de pixels) 10x10.
Em seguida criamos um laço de repetição para reagruparmos os dados necessários a reconstrução. Basicamente o que parametrizamos é a importação do primeiro objeto de nossa base, reagrupando todos dados referentes ao seu mapeamento de pixels e exibindo em tela.
Selecionando e executando o bloco de código anterior podemos ver que a plotagem foi feta de forma correta, inclusive é possível reconhecer que tal amostra é uma bota.
Dando início a criação da estrutura da rede neural, note algumas particularidades no que diz respeito ao formato da codificação mesmo.
Inicialmente criamos nossa variável de nome classificador que imediatamente instancia e inicializa keras.Sequential( ), internamente já fazemos a criação das camadas, sendo a primeira delas já realizando o processo de Flatten, pegando a amostra em tamanho 28x28, estendendo a mesma e definindo cada valor como um neurônio da camada de entrada.
Logo após é criada uma camada intermediária densa onde apenas é necessário definir o número de neurônios (128) e como ativação usamos relu, porém agora a sintaxe nos mostra que estamos usando relu função interna da biblioteca TensorFlow por meio do parâmetro tf.nn.relu.
Por fim é criada a camada de saída, com 10 neurônios e da mesma forma que na camada anterior, usamos a função de ativação interna do TensorFlow, neste caso, como é uma classificação com 10 saídas diferentes, softmax.
A estrutura da rede neural convolucional já está pronta (sim, em 3 linhas de código), podemos assim criar as camadas de compilação da mesma, com os mesmos moldes que estamos acostumados, e a camada que alimentará a rede e a colocará em funcionamento, onde apenas repassamos como dados o conteúdo de etreino e streino e definimos que tal rede será executada 5 vezes, não é necessário nenhum parâmetro adicional.
Como comentado anteriormente, você se surpreenderá com a eficiência desse modelo, aqui, processando 60000 amostras em um tempo médio de 3 segundos.
Poucos segundos após o início da execução da rede a mesma já estará treinada, note que ela atinge uma margem de acertos de 99% (sendo honesto, o indicador de acc nos mostra 1.0 – 100%, mas este valor não deve ser real, apenas algo muito próximo a 100%)
Pronto, sua rede neural via TensorFlow já está treinada e pronta para execução de testes.
Código Completo: