Rede neural convolucional e sua integração no iOS (parte 1)


Meios de implementação.

Vários algoritmos de aprendizado de máquina são integrados a muitas linguagens de programação de alto nível. O mais popular e de crescimento mais rápido deles é o Python.

O TensorFlow é uma biblioteca de software de aprendizado de máquina aberta desenvolvida pelo Google para resolver os problemas de construção e treinamento de uma rede neural para encontrar e classificar imagens automaticamente, atingindo a qualidade da percepção humana. A principal API para trabalhar com a biblioteca é implementada para Python.

Keras é uma biblioteca de rede neural aberta. É um complemento para as estruturas TensorFlow e Theano. Destina-se ao trabalho operacional com redes de aprendizado profundo, enquanto é projetado para ser compacto, modular e expansível.

A versão mais recente do Python 3.7.2 é selecionada como intérprete. O ambiente de desenvolvimento é a comunidade PyCharm.

Preparação de dados.

No mundo moderno, para a maioria das tarefas de IA, não é necessário coletar o conjunto de dados manualmente, existem muitos recursos onde, após o registro, é possível fazer o download de conjuntos de dados prontos. Foi selecionado um conjunto de dados com dez dígitos em linguagem gestual (fig. 1).

Figura 1. - Números em linguagem gestual.

O algoritmo precisará detectar a presença de um gesto na foto e classificá-lo com um número de 0 a 9. Antes de construir a arquitetura da rede neural, você precisa preparar os dados para o treinamento. Primeiro, os dados do conjunto de dados de dígitos da linguagem de sinais são baixados. O primeiro arquivo contém 2063 fotos em preto e branco com números em linguagem gestual. As imagens têm um tamanho de 64x64 pixels. O segundo arquivo contém um rótulo (vetor) correspondente à imagem.

Os valores de pixel nas imagens são normalizados e estão no intervalo (0,1). Você pode usá-los imediatamente para entrar na rede neural, mas o resultado mais ideal será alcançado se você seguir o procedimento de padronização. Após sua execução, as regras serão atendidas para cada matriz de pixels: O

valor médio na matriz é zero e
a dispersão na matriz é unidade.

As fotos são padronizadas e adicionadas a uma nova matriz para sua combinação subsequente com dados anteriores (

Fig. 2) Fig. 2. - O procedimento para carregar e processar imagens.

Arquitetura de rede neural.

Network_sign_lang.py - o principal arquivo de projeto no qual a rede neural é descrita. No início do script, várias variáveis ​​globais da rede neural são descritas (Fig. 3).

Fig. 3. - opções globais.

Tamanho de lote - o número de imagens alimentadas na rede neural para cada iteração. Num_classes - o número de classes que o modelo irá prever. Img_size - o tamanho das imagens fornecidas para a camada de entrada.

A função train_test_split () da biblioteca Sklearn é importada para o projeto, divide as matrizes X e y na proporção 80:20 em amostras de treinamento e teste e também mistura aleatoriamente os dados para que não sejam classificados por classe.

Em seguida, o modelo é inicializado (Fig. 4), a primeira camada do Conv2D é adicionada. As imagens da matriz Xtrain são inseridas, a dimensão do espaço de saída é indicada - 64, o núcleo de convolução - 4x4, a etapa de convolução e a função de ativação da camada ReLU.

Fig. 4. - Rede neural

Como as redes neurais geralmente usam um número muito maior de dados de treinamento, o modelo construído é propenso a reciclagem. Para evitar isso, é usado um método de regularização eficaz, como o Dropout. Essa camada excluirá a porcentagem indicada de neurônios aleatórios, para que não exista excesso entre as camadas. O número 0,5 significa que em cada lote o algoritmo excluirá metade dos neurônios aleatórios. A segunda camada principal também é semelhante à primeira - convolucional. (Conv2D)

A seguir, a camada de pool (MaxPooling2D). Ele serve como outro filtro para a saída do modelo. Como ao exibir os números horizontal ou verticalmente, o significado da imagem não muda, a rede neural deve classificá-los igualmente.

A camada achatada serve como um link entre os dados obtidos pelo algoritmo e o vetor de saída com a previsão. A última camada da rede é a camada Densa com função de ativação sofmax. Esta função permite obter um vetor normalizado de probabilidades para cada classe, onde a soma das probabilidades será igual a uma.

Em seguida, você precisa compilar o modelo criado especificando os seguintes parâmetros: métrica, função de perda e otimizador. Como métrica, a precisão é escolhida - a porcentagem de exemplos classificados corretamente. A função de perda é categorical_crossentropy. Algoritmo de otimização - Adam. Antes de iniciar o treinamento, vários retornos de chamada são adicionados. EarlyStopping - para de aprender a rede neural quando sua precisão deixa de aumentar com as épocas da aprendizagem. ModelCheckpoint - salva os melhores pesos de modelo em um arquivo para uso posterior.

O treinamento da rede neural é iniciado com o salvamento de dados sobre seu processo na variável histor. Validation_split - utiliza dez por cento dos dados de treinamento para validação, que é outra maneira de regularizar.

O tamanho da amostra de treinamento é de 1965 exemplos, a amostra de teste é 547 e a amostra de validação é 219. Após a conclusão do processo de treinamento, é construído um gráfico da dependência da precisão obtida nos dados de treinamento e teste (Fig. 5).

Fig.5. - cronograma de treinamento.

O gráfico mostra que o modelo foi salvo na 15ª época (com a maior precisão e o menor espaço entre o Xtrain e o Xtest).

O próximo passo é carregar as redes neurais resultantes em outro script para verificar seu funcionamento. Os valores das métricas nos dados de teste são exibidos (Fig. 6).

Fig. 6. - Verificando o desempenho do modelo.

Com base nos resultados das métricas, podemos concluir que os modelos não diferem muito. Quanto menor o índice da função de perda, mais seguras são as previsões do algoritmo. A precisão ou fidelidade do modelo mostra a porcentagem de fotos classificadas corretamente, o que significa que quanto maior, melhor a rede neural. Consequentemente, é mais lógico usar o primeiro modelo obtido como resultado da interrupção precoce da educação.

Falaremos sobre pré-processamento de dados e integração de uma rede neural de um determinado formato em um aplicativo iOS na próxima parte.

All Articles