Avaliação da terceira sprint do programa de bolsas Compass.uol para formação em chatbot Rasa.
- Jupter Notebook
- Token de acesso -> okteto
----
1 - Após o login, no diretório AI, abra o arquivo setup.ipynb.
2 - Execute o notebook clicando em RUN e, em seguida, em RUN ALL CELLS.
3 - Retorne para o diretório raiz ./Work e execute o arquivo mnist.ipynb.
4 - Basta executar este arquivo da mesma forma que executou no passo 2 e seu notebook foi executado.
----
O banco de dados MNIST possui 70 mil imagens manuscritas de digitos de 0 a 9, que foram normalizadas e centralizadas em um quadrado de tamanho 28 x 28 pixels. Cada imagem é um array de números de pontos flutuantes, representados em uma escala de cinza de 0 (preto) à 1 (branco).
No fit do modelo, foi utilizado o artifício de normalização do modelo com o aumento do 'batch_size', auxiliando na redução do tempo de treinamento do modelo.
Nas 'epochs' utilizamos o valor 10, pois ao treinar outros modelos, percebemos um overfiting entre a validação e o treino, ou seja, a partir do momento em que a acurácia do treino atingir métricas maiores que a acurácia de validação, o treino é considerado dispensável, podemos considerar então o treino como viciado.
Código detalhado dentro do Jupyter Notebook 💻
Optamos por utilizar o banco de dados não relacional MongoDB com a finalidade de guardar informações processadas no próprio código e, também, realizar testes com elas.
Para isso instalamos, importamos e utilizamos ferramentas como o PYMONGO, o BSON.BINARY, o Mongo Express e o próprio MONGODB. Essas ferramentas permitiram que pudessemos salvar os próprios arquivos, de forma binária, dentro do banco e também recuperar estes intactos no momento oportuno.
A instalação das ferramentas MongoDB e Mongo Express se deram via arquivo docker-compose.
Enquanto isso, o PyMongo foi instalado na própria aplicação principal mnist.ipynb através do comando
!pip install pymongo
- A conexão com o MongoDB se deu na aplicação principal com o comando
client = MongoClient("mongodb://root:root@mongodb:27017/")
- Criamos banco de dados que denominamos "sprint3" através do comando
database = client["sprint3"]
-
Utilizamos duas bases de dados, foram elas 'modelo' e 'numeros' para guardar, em binário, respectivamente:
1 - Modelos Treinados
2 - Imagens criadas a mão, no paint, para testes
- Para reestabelecer os arquivos salvos no MongoDB, utilizamos função de pesquisa
find_one
com os parâmetros defilename
em que localizamos o arquivo específico, a função open para criar e abrir e a funçãowrite
para escrever de volta o arquivo convertido em binário.
- Ao fim, utilizando arquivos recuperados do banco de dados, realizamos testes com as imagens feitas a mão para conferir a calibragem da aplicação com os testes previamente realizados via modelo h5.
As imagens para teste foram criadas manualmente via paint com lápis espessura 2, foram salvas, normalizadas e centralizadas em tamanhos variados.
Impende destacar nossas dificuldades na utilização do JupyterLab integrado ao container no Okteto porque, após a instalação, não é mais concedido acesso de administrador ao utilizador do sistema. Ou seja, muito embora se utilize de usuário root (necessário) para realizar a instalação da aplicação, ainda assim, não temos permissões para realizar alterações nos arquivos criados originalmente.
No terminal, por exemplo, não temos senha ou usuário Administrador para remover essas limitações.
A solução que encontramos foi, após a criação dos arquivos e pastas, criarmos uma cópia da aplicação principal diretamente na raiz '/work' e executar nosso notebook a partir dela. Nossos modelos e arquivos para testes são, também, colocados na pasta raiz, mas isso é feito diretamente pelo banco de dados.