fbpx
Sigmoidal
  • Home
  • CursosNOVO
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
  • Home
  • CursosNOVO
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
Sigmoidal
Sem Resultado
Ver Todos Resultados
Home Artigos Machine Learning Deep Learning

Redes Neurais Multicamadas com Python e Keras

Carlos Melo por Carlos Melo
junho 6, 2019
em Deep Learning, Machine Learning
4
Redes Neurais Multicamadas com Python e Keras
137
COMPARTILHAMENTOS
4.6k
VIEWS
Publicar no LinkedInCompartilhar no FacebookCompartilhar no Whatsapp

Neste tutorial, você vai aprender como implementar Redes Neurais Multicamadas utilizando Python e a biblioteca de Deep Learning Keras, uma das mais populares atualmente.

Keras é uma biblioteca de Redes Neurais, capaz de rodar com o TensorFlow (não apenas), e que foi desenvolvida pensando em possibilitar uma fácil e rápida prototipação.

Redes Neurais Multicamadas são aqueles nas quais os neurônios estão estruturados em duas ou mais camadas (layers) de processamento (já que no mínimo haverá 1 layer de entrada e 1 layer de saída).

Implementar uma arquitetura completa de Redes Neurais  from scratch é uma tarefa hercúlea, que exige um entendimento mais sólido de Programação, Álgebra Linear e Estatística – isso sem falar ainda que o desempenho computacional da sua própria implementação dificilmente baterá o desempenho de bibliotecas famosas na comunidade.

Para mostrar que com poucas linhas de código é possível implementar um Rede simples, vamos pegar o super-conhecido problema de classificação MNIST e ver o desempenho do nosso algoritmo quando submetido a esse dataset com 70.000 imagens!

Caso você queira, todo o código estará disponível no meu Github!

Arquitetura das Redes Neurais

As Redes Neurais são modeladas como um conjunto de neurônios conectados como um grafo acíclico. O que isso significa na prática? Isso significa que as saídas (outputs) de alguns neurônios serão as entradas (inputs) de outros neurônios.

As Redes Neurais mais comumente encontradas por aí são aquelas organizadas em camadas (layers) distintas, e cada camada contendo um conjunto de neurônios. Já o tipo de layer mais comumente encontrado é aquele do tipo fully-connected layer (camada totalmente conectada). Nesse, os neurônios entre dois layers adjacentes se conectam dois a dois.

Esse tipo de arquitetura também é conhecida como Rede Neural Feedforward,pois apenas é permitido a um neurônio do layer li se conectar a um neurônio do layer li+1 , como ilustrado na figura abaixo.

O objetivo deste post é realizar na prática uma implementação por meio da biblioteca Keras. Para um introdução mais completa e detalhada sobre o assunto, assim como os conceitos básicos sobre deep learning, recomendo a leitura deste artigo, no qual indico 3 ótimos cursos online.

O que é MNIST

MNIST é um conjunto de dados que contém milhares de imagens manuscritas dos dígitos de 0-9. O desafio nesse dataset é, dada uma imagem qualquer, aplicar o label correspondente (classificar corretamente a imagem). O MNIST é tão estudado e utilizado pela comunidade, que atua como benchmark para comparar diferentes algoritmos de reconhecimento de imagens.

MnistExamples

O dataset completo é composto 70.000 imagens, cada uma de tamanho 28 X 28 pixels. A figura acima mostra alguns exemplares aleatórios do conjunto de dados, para cada um dos dígitos possíveis. Ressalta-se que as imagens já estão normalizadas e centralizadas.

Uma vez que as imagens estão em tons de cinza, ou seja, possuem apenas um canal, o valor relativo a cada pixel das imagens deve variar dentro do intervalo [0, 255].

Redes Neurais Multicamadas são aqueles nas quais os neurônios estão estruturados em duas ou mais camadas (layers) de processamento.

IAN GOODFELLOW

MNIST no Python

De tão utilizado, o conjunto de dados MNIST já está disponível dentro da biblioteca scikit-learn, e pode ser importado diretamente pelo Python com fetch_mldata("MNIST Original").

Para exemplificar como importar o MNIST completo e extrair algumas informações básicas, vamos rodar o código abaixo:

# importar as bibliotecas necessárias
from sklearn.datasets import fetch_mldata
import matplotlib.pyplot as plt
import numpy as np

# importar o conjunto de dados MNIST
dataset = fetch_mldata("MNIST Original")
(data, labels) = (dataset.data, dataset.target)

# Exibir algumas informações do dataset MNIST
print("[INFO] Número de imagens: {}".format(data.shape[0]))
print("[INFO] Pixels por imagem: {}".format(data.shape[1]))

# escolher um índice aleatório do dataset e exibir
# a imagem e label correspondente
np.random.seed(17)
randomIndex = np.random.randint(0, data.shape[0])
print("[INFO] Imagem aleatória do MNIST com label '{:.0f}':".format(labels[randomIndex]))

plt.imshow(data[randomIndex].reshape((28,28)), cmap="Greys")
plt.show()

Acima, podemos ver que de fato o array contendo as imagens possui 70.000 linhas (uma linha para cada imagem) e 784 colunas (todos os pixels da imagem 28 X 28). Também podemos ver uma das imagens escolhidas aleatoriamente. No caso desse dígito, nosso algoritmo teria tido sucesso se conseguisse classificar corretamente o dígito como ‘4’.

Implementando nossa Rede Neural com Python + Keras

Feita uma breve introdução sobre Redes Neurais, vamos implementar uma Rede Neural Feedforward para o problema de classificação MNIST.

Crie um novo arquivo em sua IDE preferida, com o nome rede_neural_keras.py, e siga os passos do código abaixo.

# importar os pacotes necessários
from sklearn.datasets import fetch_mldata
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.preprocessing import LabelBinarizer
from keras.models import Sequential
from keras.layers.core import Dense
from keras.optimizers import SGD
import numpy as np
import matplotlib.pyplot as plt

Acima, importamos todos pacotes necessários para criar uma Rede Neural simples, com a biblioteca Keras. Caso você tenha tido um erro ao tentar importar os pacotes, ou não tenha um ambiente virtual em Python dedicado para trabalhar com Deep Learning/Computer Vision, recomendo procurar um tutorial baseado no seu Sistema Operacional.

# importar o MNIST
print("[INFO] importando MNIST...")
dataset = fetch_mldata("MNIST Original")

# normalizar todos pixels, de forma que os valores estejam
# no intervalor [0, 1.0]
data = dataset.data.astype("float") / 255.0
labels = dataset.target

Após importar o conjunto de imagens, vou dividir entre conjunto de treino (75%) e conjunto de teste (25%), prática já bem conhecida no universo do Data Science. Mas atenção! O conjunto de treino e de teste  DEVEM SER INDEPENDENTES, para evitar diversos problemas, entre eles o de overfitting.

Apesar de parecer complicado, isso pode ser feito com apenas uma linha de código, pois graças à biblioteca scikit-learn, isso pode ser feito facilmente com o método train_test_split.

Nesta etapa de preparação dos nossos dados, será preciso também converter os labels – que são representados por números inteiros – para o formato de vetor binário. Para exemplificar o que é um vetor binário, veja o exemplo abaixo, que indica o label ‘4’.

4 = [0,0,0,0,1,0,0,0,0,0]

Nesse vetor, o valor 1 é atribuído ao índice correspondente ao label e o valor 0 aos outros. Essa operação , conhecida como one-hot encoding também pode ser feita facilmente com a classe LabelBinarizer.

# dividir o dataset entre train (75%) e test (25%)
(trainX, testX, trainY, testY) = train_test_split(data, dataset.target)

# converter labels de inteiros para vetores
lb = LabelBinarizer()
trainY = lb.fit_transform(trainY)
testY = lb.transform(testY)

Pronto! Com o dataset importado e processado da maneira correta, a gente pode finalmente definir a arquitetura da nossa Rede Neural com o Keras.

De maneira totalmente arbitrária, defini que a Rede Neural terá 4 layers:

  • O nosso primeiro layer (l0) receberá como input os valores relativos a cada pixel das imagens. Ou seja, como cada imagem possui tamanho igual a 28 X 28 pixels, l0 terá 784 neurônios.
  • Os hidden layers l1 e l2 terão arbitrariamente 128 e 64 neurônios.  
  • Por fim,  a última camada, l3, terá a quantidade de neurônios correspondente à quantidade de classes que o nosso problema de classificação possui: 10 (lembrando, são 10 dígitos possíveis).
# definir a arquitetura da Rede Neural usando Keras
# 784 (input) => 128 (hidden) => 64 (hidden) => 10 (output)
model = Sequential()
model.add(Dense(128, input_shape=(784,), activation="sigmoid"))
model.add(Dense(64, activation="sigmoid"))
model.add(Dense(10, activation="softmax"))

Dentro do conceito de arquitetura feedforward, a nossa Rede Neural é instanciada pela classe Sequential, o que quer dizer que cada camada será “empilhada” sobre outra, com o output de uma sendo o input da próxima. No nosso exemplo, todos layers são do tipo fully-connected layer.

Os hidden layers serão ativados pela função sigmoid, que recebe os valores reais dos neurônios como input e os joga dentro do range [0, 1]. Já para a última camada, como essa tem que refletir as probabilidades para cada uma das classes possíveis, será utilizada a função softmax.

Para treinar nosso modelo, vou usar o algoritmo mais importante para as Redes Neurais: Stochastic Gradient Descent (SGD). Quero fazer um post dedicado sobre o SGD no futuro (matemática + código), tamanha sua importância! Mas por enquanto, vamos usar o algoritmo já pronto de nossas bibliotecas.

A learning rate do SGD será igual a 0.01, e a loss function será acategorical_crossentropy, uma vez que o número de classes do output é maior que dois.

# treinar o modelo usando SGD (Stochastic Gradient Descent)
print("[INFO] treinando a rede neural...")
model.compile(optimizer=SGD(0.01), loss="categorical_crossentropy",
             metrics=["accuracy"])

H = model.fit(trainX, trainY, batch_size=128, epochs=10, verbose=2,
         validation_data=(testX, testY))

A força da Deep Learning vem basicamente de um único algoritmo muito importante: Stochastic Gradient Descent (SGD)

Chamando a model.fit, tem início então o treinamento da rede neural. Após um tempo que varia de acordo com sua máquina,  os pesos de cada nó são otimizados, e a rede pode ser considerada como treinada.

Para avaliar o desempenho do algoritmo, chamamos o método model.predict para gerar previsões em cima do dataset de teste. O desafio do modelo é fazer a previsão para as 17.500 imagens que compõe o conjunto de teste, atribuindo um label de 0-9 para cada uma delas:

# avaliar a Rede Neural
print("[INFO] avaliando a rede neural...")

predictions = model.predict(testX, batch_size=128)

print(classification_report(testY.argmax(axis=1), predictions.argmax(axis=1)))

Por fim, após o relatório de desempenho obtido, vamos querer plotar a accuracy e loss ao longo das iterações. Analisar visualmente permite que identifiquemos facilmente situações de overfitting, por exemplo:

# plotar loss e accuracy para os datasets 'train' e 'test'
plt.style.use("ggplot")
plt.figure()
plt.plot(np.arange(0,100), H.history["loss"], label="train_loss")
plt.plot(np.arange(0,100), H.history["val_loss"], label="val_loss")
plt.plot(np.arange(0,100), H.history["acc"], label="train_acc")
plt.plot(np.arange(0,100), H.history["val_acc"], label="val_acc")
plt.title("Training Loss and Accuracy")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")
plt.legend()
plt.show()

Executando a Rede Neural

Com o código pronto, é só executar o comando abaixo para ver nossa Rede Neural construída em cima da biblioteca Keras em pleno funcionamento:

carlos$ python neural_network_keras.py

Como resultado, o classification_report mostra que ao final das 100 epochs, a rede conseguiu atingir uma acurácia de 92%, o que é um bom resultado para este tipo de arquitetura. Apenas como curiosidade, as Redes Neurais Convolucionais têm o potencial de atingir até 99% de acurácia (!):

Obviamente há muitas melhorias que podem ser feitas para melhorar o desempenho da nossa rede, mas já dá para ver que mesmo uma arquitetura simples apresenta um ótimo desempenho.

Olhando o gráfico abaixo, note como as curvas referentes aos datasets de treino e validação praticamente estão sobrepostas. Isso é um ótimo indicativo de que não houve problemas de overfitting durante a fase de treinamento.

Resumo

Bem, chegando ao final do post, foram apresentados os conceitos básicos sobre Redes Neurais, assim como o conjunto de dados MNIST, muito utilizado para fazer benchmark entre algoritmos.

Ao testar o desempenho de uma rede neural com 4 layers (input+2 hidden layers + output), conseguimos obter 92% de precisão nas previsões realizadas.

A implementação foi feita em cima do Keras, para mostrar que com usando poucas linhas de código é possível construir ótimos modelos de classificação.

Por fim, gostaria de dizer que pretendo produzir artigos não com foco apenas na escrita de código/implementação pura, mas também entrar mais a fundo nos conceitos teóricos e matemáticos por trás de algoritmos e métodos de Machine Learning.

Acredito fortemente que a gente só evolui quando bota a mão na massa e vai a fundo atrás de algo mais. É isso que estou fazendo para mim, e espero poder compartilhar esses aprendizados aqui no blog.

Tags: deep learningkerasmachine learningmlpmnistmulticamadaspythonredes neuraistensorflow
Post Anterior

Aula 1: O caminho para você construir uma nova carreira em Visão Computacional

Próximo Post

Aprender Deep Learning: os 3 melhores cursos em Python

Carlos Melo

Carlos Melo

Engenheiro de Visão Computacional graduado em Ciências Aeronáuticas pela Academia da Força Aérea (AFA) e Mestre em Engenharia Aeroespacial pelo Instituto Tecnológico de Aeronáutica (ITA).

Relacionado Artigos

Como usar o DALL-E 2 para gerar imagens a partir de textos
Deep Learning

Como usar o DALL-E 2 para gerar imagens a partir de textos

por Carlos Melo
dezembro 25, 2022
Como a França usou Inteligência Artificial para detectar 20 mil piscinas
Deep Learning

Como a França usou Inteligência Artificial para detectar 20 mil piscinas

por Carlos Melo
dezembro 19, 2022
ChatGPT: A Inteligência Artificial que vai escrever seus códigos
Artigos

ChatGPT: A Inteligência Artificial que vai escrever seus códigos

por Carlos Melo
dezembro 18, 2022
7 livros essenciais para aprender Data Science em 2023
Artigos

7 livros essenciais para aprender Data Science em 2023

por Carlos Melo
dezembro 15, 2022
Como a banda Metallica usa Data Science
Artigos

Como a banda Metallica usa Data Science

por Carlos Melo
novembro 15, 2022
Próximo Post
Aprender Deep Learning: os 3 melhores cursos em Python

Aprender Deep Learning: os 3 melhores cursos em Python

Comentários 4

  1. Avatar elton fernando says:
    4 anos atrás

    Muito bom, parabéns. Gosto pastante dessa metodologia do python de ferramentas intuitivas, Porém quando se fala em redes neural tem muito conteúdo, mais eles sempre param aqui. Seria de estema importância um artigo que desmistifica-se isso, como importar uma rede e usar em uma aplicação na pratica. Acampanho seu trabalho, tem me agudado muito, Obrigado.

    Responder
    • Carlos Melo Carlos Melo says:
      6 meses atrás

      Muito obrigado pelo comentário! Normalmente abordo esses assuntos mais aprofundados em aulas públicas no YouTube (em lives) ou dentro da Escola de Data Science (https://escola.sigmoidal.ai). Um forte abraço!

      Responder
  2. Avatar Joab Santana says:
    4 anos atrás

    Excelente artigo, professor!
    Muito obrigado!

    Responder
    • Carlos Melo Carlos Melo says:
      6 meses atrás

      Muito obrigado pelo comentário!

      Responder

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Destaques Sigmoidal

Detector de Fadiga usando Python

Detector de Fadiga usando Python

outubro 6, 2020
7 Livros de Data Science em 2021

7 Livros de Data Science em 2021

outubro 8, 2021
NFT e artes criadas por Inteligência Artificial

NFT e artes criadas por Inteligência Artificial

junho 17, 2022
Especialização em Visão Computacional Especialização em Visão Computacional Especialização em Visão Computacional

Seguir

  • Camera Tracking, Reconstrução 3D e a Arte da Visão 🎥👁️‍🗨️

O “camera tracking” é uma técnica que permite a análise e reprodução do movimento da câmera em filmagens 2D. 

Esta análise fornece dados vitais sobre a posição e orientação da câmera ao longo do tempo, sendo essencial para a integração de elementos 3D virtuais em visuais 2D. 

A minha jornada acadêmica levou-me ao coração da engenharia de visão computacional, onde explorei tópicos cruciais como lens distortion, camera calibration e image processing. Dediquei-me a técnicas avançadas, abrangendo desde a utilização de filtros Gaussianos, conversão de imagens para grayscale até algoritmos de keypoint detection. 

No decorrer de meus estudos, tive a chance de trabalhar com métodos clássicos, como “Harris Corner Detection”, e também com abordagens mais contemporâneas como ORB, além de descritores como SIFT, SURF e BRISK.

Mas apesar da minha formação predominantemente técnica, centrada no mundo dos modelos quantitativos e da modelagem matemática, identifiquei um diferencial valioso na trilha da visão computacional.

🎨 Esse diferencial foi a capacidade de não se limitar apenas ao lado técnico. Ao contrário, busquei uma fusão entre a precisão técnica e a sensibilidade artística.

Compreendi que a verdadeira inovação surge quando se une o rigor técnico à visão criativa. Nessa intersecção, a arte e a ciência dançam juntas, produzindo resultados que são ao mesmo tempo precisos e emocionalmente impactantes.

Como o escritor A. D. Sertillanges expressou tão eloquentemente, nossa vocação como seres humanos exige que primeiro estejamos profundamente enraizados em nossa humanidade, viajando com confiança e solidez:

💬 “Toda ciência, quando cultivada isoladamente, não é apenas incompleta, mas também repleta de riscos.”

Serve como um lembrete constante de que dentro de cada tarefa computacional e linha de código existe uma miríade de histórias, prontas para serem reveladas e compartilhadas. 

#machinelearning #visãocomputacional
  • 🤖Você já testou essa ferramenta? 

Prece mentira, mas você pode gravar um vídeo seu agora mesmo, e subir nesse site para ele dublar para inglês e várias outras línguas! 🇺🇸🇪🇸🇧🇷🇩🇪

E não apenas isso! Ele sincroniza inclusive os seus lábios para ficar o mais real possível. 

O que você achou? Que tal testar agora mesmo e me mandar?

#machinelearning #inteligenciaartificial
  • ‘Eu nasci assim, eu cresci assim, vou sempre usar arquivos CSV…’ 🎶

Será mesmo? Se a síndrome de Gabriela te prende aos antigos e gigantes arquivos CSV, é hora de repensar! 🤔

Calma, não me entenda mal. Eu uso arquivos CSV para muitas coisas, mesmo! Mas permita-me apresentar um formato que já é bem conhecido pelos engenheiros de dados, mas que, por algum motivo, ainda não é muito famoso entre os cientistas de dados.

O principal problema do CSV é sua estrutura. Eles são armazenados como uma lista de linhas (conhecido como orientado a linhas), o que causa duas grandes complicações: eles são lentos para consultar e, para complicar ainda mais, SQL e CSV simplesmente não se dão bem.

Agora, entre em cena o Parquet: um formato orientado a colunas. Diferentemente dos CSVs, ele organiza seus dados por colunas, o que facilita e agiliza a consulta.

Além disso, é um formato de código aberto, licenciado sob Apache, o que o torna uma opção atrativa não apenas pela sua eficiência, mas também pela flexibilidade e transparência. Engenheiros de dados já se beneficiam das vantagens do Parquet há algum tempo, então por que os cientistas de dados não dariam uma chance também?

Se você é um cientista de dados e ainda não experimentou o Parquet, talvez seja o momento de se aventurar. E aí, já conhecia essa alternativa? Deixe seus comentários! 🚀

#machinelearning #datascience  #visaocomputacional
  • Eu não aprendi a estudar do dia para a noite.

Foram anos de aprimoramento e busca contínua por um método que me permitisse aprender qualquer coisa sozinho.

Nessa sequência de stories eu conto um pouco da minha trajetória, passando pela AFA, ITA e aprendizado de línguas. 

Se você ainda não tem o hábito da leitura, mas gostaria de aprender qualquer coisa rapidamente, como autodidata, você não pode perder a live de hoje. 

🔴AULA AO VIVO (hoje, às 20 horas)

✅Como criar uma rotina de estudo
✅Como criar resumos e notas de revisão
✅Como manter o foco e a concentração
✅Técnicas de Ultra-Aprendizado

Clique no link dos stories e ative a notificação da aula!
  • 📚Ao contrário do que o senso comum pode te induzir a pensar, você não pode querer apenas estudar livros técnicos. 

Ler e memorizar demandam a construção de múltiplas habilidades em diferentes dimensões. Afinal, você precisa crescer não apenas na vida profissional, mas também na humana, espiritual e familiar. 

No entanto, a escolha de livros errados podem prejudicar perigosamente a formação do conhecimento intelectual.

Por esse motivo, aqui vai uma sugestão de livros para aqueles que querem começar uma vida de estudos. 

E se você quiser aprender mais sobre como melhorar sua memória, elaborar resumos da maneira correta e manter o foco na leitura, mande uma mensagem por direct com a palavra “ESTUDO”. 

Depois que você enviar a palavra “estudo”, eu vou te encaminhar o link da aula exclusiva que eu farei sobre o assunto. 

Agora me diz, quais desses livros você já leu? Ou está na fila para leitura?

#leitura #estudos #machinelearning #computervision
  • ORB-SLAM é um sistema SLAM (Localização e Mapeamento Simultâneos) de última geração que utiliza uma combinação de métodos baseados em características e métodos diretos para alcançar desempenho em tempo real em diversas plataformas. Foi concebido por pesquisadores da Universidade de Zaragoza, Espanha, e agora é amplamente adotado tanto na academia quanto na indústria.

O nome ORB-SLAM deriva do seu uso de características Oriented FAST e Rotated BRIEF (ORB) para detectar e combinar pontos-chave em imagens. Essas características, juntamente com outras técnicas como fechamento de loop e otimização de pose, garantem uma localização e mapeamento robustos e precisos.

Graças à sua combinação de métodos baseados em características e diretos, juntamente com suas capacidades em tempo real e compatibilidade versátil de plataforma, ORB-SLAM destaca-se como um recurso inestimável para profissionais em visão computacional e robótica.

Ansioso para aprender como implementar o ORB-SLAM 3, desde sua instalação até a execução do sistema usando seus dados? Acesse o blog do sigmoidal e veja o tutorial com o passo a passo que eu preparei.

https://sigmoidal.ai

#visãocomputacional #machinelearning #slam #opencv
  • Filhos não são um direito, mas um dom de Deus. E hoje fomos abençoados com o nascimento da Bettina. 

Já te amamos muito, minha Pycotinha!
  • Sorria, você está sendo filmado (e analisado pela Visão Computacional)! Estimação de velocidade, fluxo óptico de pedestres e veículos, identificação de objetos abandonados, análise de comportamentos, cruzamento de dados com a base da polícia... quais outras possibilidades você enxerga?
Instagram Youtube LinkedIn Twitter
Sigmoidal

O melhor conteúdo técnico de Data Science, com projetos práticos e exemplos do mundo real.

Seguir no Instagram

Categorias

  • Artigos
  • Blog
  • Carreira
  • Colunistas
  • Cursos
  • Data Science
  • Deep Learning
  • Destaques
  • Entrevistas
  • Inglês
  • Iniciantes
  • Inteligência Artificial
  • Livros
  • Machine Learning
  • Notícias
  • Outros
  • Projetos
  • Python
  • Teoria
  • Tutoriais
  • Visão Computacional
  • Youtube

Navegar por Tags

camera calibration cancer carreira cientista de dados cnn computer vision Cursos dados desbalanceados data science data science na prática decision tree deep learning gis gpt-3 healthcare image formation iniciantes jupyter kaggle keras machine learning matplotlib medicina mnist nft opencv pandas personal branding portfólio profissão python redes neurais redes neurais convolucionais regressão logística salário seaborn sklearn tensorflow titanic tutorial vagas visão computacional vídeo youtube árvore de decisão

© 2023 Sigmoidal - Aprenda Data Science e Python na prática.

Sem Resultado
Ver Todos Resultados
  • Home
  • Cursos de Visão Computacional, Data Science e Python
  • Artigos
  • YouTube
  • Sobre Mim
  • Contato

© 2023 Sigmoidal - Aprenda Data Science e Python na prática.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In

Add New Playlist

Aprenda Python do Zero

50% Off

Oferta exclusiva de aniversário do Sigmoidal. Inscreva-se no curso Python do Zero hoje mesmo.

QUERO APROVEITAR O DESCONTO