CÓDIGO ATUALIZADO NO GITHUB Pessoal, considerem que esse vídeo já não é tão novo, e que há incompatibilidades entre o código escrito durante o vídeo e as versões mais recentes do Keras/Tensorflow. Portanto, peço que vejam a descrição do vídeo, onde está o link para o código atualizado no Github. Frequentemente atualizo para resolver incompatibilidades.
Muito obrigado pela aula. Muito bom como você construiu a sua CNN. No código eu tive que mudar o formato e deu certo: (1, 28, 28) --> (28, 28, 1). Obrigadão !
Pra quem teve dificuldades pra entender a função da linha "y_train= np_utils.to_categorical(y_train)", ele transformou as labels do treino (a saída respectiva a cada imagem de número feito mão, ou seja, se a imagem é um 4 manuscrito, a label (y_train) será o valor 4) em uma matriz one-hot (ou one-cold, caso eu tenha confundido, mas é quase a mesma coisa, rs). Ele categorizou cada valor de label de acordo com um valor one hot.
Excelente abordagem e didatica. O texto no medium tbm ficou sensacional. Quero usar CNN no meu doutorado na parte de modelos geoidais com sensoriamento remoto.
Olá, excelente trabalho, obrigado por compartilhar. As imagens novas que vc usou para testar que deram erro na predição, estam com escala de cinza invertido em relaçao as do Mnist. Executando o comando: img_pred = ~img_pred vc as coloca no mesmo padrão de cinza do Mnist a acurácia da rede, com isso, vai a 99% sem a necessidade de alterar a Rede.
Ei, parabéns pelo vídeo cara! Sua introdução foi muito foda, mostrando que sabe o que está falando! Já tinha até esquecido o que era uma combinação linear, 6 anos que não ouvia o termo :D Tô te seguindo no Medium ;) Ps: seu blog tá fora do ar. Abraço.
A variável alvo, o nosso Y, é uma matriz com (10000, 10). Ou seja, um formato 2D com 10k linhas e 10 colunas. Essas 10 colunas representam os números naturais de 0 à 9 que nós queremos classificar e, portanto, indicam que nós temos um conjunto de dados composto de 10 classes. Eu preciso informar esse número de classes na última camada da rede. Então, ou eu posso inserir esse valor "10" de maneira estática ou pegar ele automaticamente a partir do segundo índice da tupla `y_test.shape`. Assim: >>> print(y_test.shape) (10000, 10) >>> print(y_test.shape[1]) 10 Na arquitetura da rede, eu vou informar esse número 10 na última camada, a que tem a softmax: model.add(Dense(10, activation='softmax', name='predict')). Eu achei mais interessante, no lugar de inserir o 10 de maneira estática, pegar ele automaticamente e guardar na variável num_classes: model.add(Dense(num_classes, activation='softmax', name='predict')). Assim, nossa rede saberá que nós estamos classificando um conjunto de dados com 10 classes.
@@ManualdoMachineLearning Ou num programa de reconhecimento facial (ser ser em tempo real) funcionaria com o mesmo princípio? Se sim que mudanças me indicaria? Se não, a partir de que lugar posso aprender como montar um exemplar?
@@enzodoanti7329 seria diferente, mas haveria alguma interseção entre os conceitos, como a parte de arquitetura de rede. Eu nunca trabalhei com reconhecimento facial. Sugiro que você estude um pouco sobre arquiteturas para visão computacional.
boa tarde, quando eu uso a importação : import keras.backend as K K.set_image_dim_ordering('th') da o seguinte erro : module 'keras.backend' has no attribute 'set_image_dim_ordering' eu pesquisei mas não conseguir encontrar a solução, o que eu posso fazer para resolvê lo
Quando tento treinar o modelo no Google Colab dá esse erro: InvalidArgumentError: Default MaxPoolingOp only supports NHWC on device type CPU [[node sequential_6/max_pooling2d_5/MaxPool (defined at :1) ]] [Op:__inference_train_function_2979] Function call stack: train_function Alguém sabe o que é?
João Victor Mendes experimente alterar o runtime para GPU e certifique-se de está usando a versão mais atual do código, com link na descrição do vídeo.
@Breno da Cunha O código do vídeo está desatualizado. Atualizei no Github já tem algum tempo e disponibilizei o link na descrição. Esse mesmo link aqui: github.com/luisfredgs/keras-cnn-handwriting-mnist. Na descrição do código há um botão azul para você executar direto no google colab.
Depois de muito tentar, consegui resolver, o problema é quando alterava o backend pra "first", quando deixei "last" (o padrão) e formatei corretamente os dados o código rodou normal. Com o backend em "fist" dava esse erro mesmo com os dados devidamente formatados. Eu estava fazendo minha versão do código, não queria simplesmente copiar o seu, aí me deparei com o erro. Mas deu tudo certo, obrigado por se dispor a ajudar
@@joaovictormendes2293 "Eu estava fazendo minha versão do código, não queria simplesmente copiar o seu" -->É assim que fala! Esse é o espírito!!! Que bom que deu certo.
Oi, parabéns pelo vídeo!!! Onde encontro material para aprender como criar uma rede deep Q learning exclusivamente com Keras ? Só encontro vídeos e tutoriais que fazem uma salada mista de Tensorflow, Keras, Scikit Learn e Pytorch. Uma verdadeira torre de Babel ...
Luís, parabéns pelo vídeo. Queria fazer uma observação ... acredito que seu modelo não tenha reconhecido aqueles três exemplos de imagens muito bem porque as imagens do mnist usadas para o treinamento têm fundo preto escritas em branco, e não o contrário como você usou. Sds.
Boa noite Marcos, ótimo trabalho. Na parte da rede aparece o seguinte erro ao final AttributeError: module 'tensorflow._api.v2.config' has no attribute 'experimental_list_devices' mesmo pesquisando não encontrei uma solução, creio estar ligado a linha Covn2D [pesquisando alterei para model.add(Conv2D(30, (5,5), activation='relu', padding='same',input_shape=(1,28,28), data_format='channels_first')) ] também pode ser algo ligado a atualização do tensorflow. Mas também não funcionou. Poderia me ajudar? Muito obrigada!!!!
Olá, Kallita. Tudo em ordem? Realmente, havia uma pequena incompatibilidade entre esse código e a versão mais atual do Tensorflow. Já providenciei um ajuste e você pode tentar novamente: github.com/luisfredgs/keras-cnn-handwriting-mnist
Opa, nao seria no fully connected layer o caso de utilizar uma softmax como activation layer pq eh um caso de multiclassificacao ? Ou voce escolheria uma relu como funcao de activacao porque voce usou a funcao " keras.utils.to_categorize" que transforma a saida como 0 ou 1 ?
Muito bom, acabei comprando seu curso na Udemy. Fiquei com uma dúvida, sempre que eu submeto uma imagem, o modelo além de predizer ele aprende mais ? ou ele só aprendo no preríodo de treino quando é iniciado ?
Wlahyrton Meireles , como vai? Nesse caso, o modelo vai reconhecer o padrão e atribuí-lo a um grupo (classe) específico. Em seguida, a instância submetida será descartada. O modelo não é retroalimentado. Nesse caso específico, o modelo aprende uma vez durante o treino e depois vai fazer apenas inferências. Porém, é possível, de alguma forma, ir guardando essas instâncias para enriquecer a base de aprendizagem e você usá-las na próxima vez em que for treinar o modelo. Pode, ainda, descongelar os pesos e reiniciar o treino com essas novas instâncias partindo do ponto onde tinha parado, sem precisar treinar tudo do zero novamente. Algum esforço seria necessário na modificação do código para que isso ocorra, mas nada que uma boa pesquisada no Google não ajude. O Tensorflow possui um método chamado “model.load_weights()”, que você usa para carregar os pesos treinados anteriormente. Depois, usa um “model.fit()” para treinar os novos pesos sem descartar os anteriores, mas não sem antes incluir a nova instância no pipeline. Da uma pesquisada, vai achar uma ruma de links relevantes com tutoriais.
Opa! Tudo bem? Vou te passar um exemplo de como você pode fazer isto pelo Colab, sendo o que eu normalmente faço. Isto vai mostrar um botão pra você escolher a imagem no seu computador, então o upload é feito e a imagem é lida pelo imread. Use este código como um ponto de partida, adaptando-o conforme necessário: from google.colab import files uploaded = files.upload() for fn in uploaded.keys(): os.rename(fn, "image_name.jpg") img_pred = cv2.imread("image_name.jpg", 0)
Esse é material mais abrangente sobre o assunto que vi no YT. Parabéns pela iniciativa! Somente uma dúvida: se a acurácia do modelo está perto de 100% não é estranho esses erros nas imagens que você testou no final do vídeo? Eu implementei tudo e fazendo testes com entradas parecidas com as suas também obtive muitos erros, os quais não são compatíveis com uma acurácia de quase 100%. Achei estranho e então resolvi dar uma olhada nas imagens do MNIST que o Keras usa. Acontece que as imagens são compostas por fundo preto e traços brancos. O oposto do que vc e eu tentamos fornecer como entrada. A partir disso testei com entradas nesse padrão e os erros praticamente sumiram. Posso estar falando besteira, mas não seria o caso de que esse modelo só está treinado para classificar dígitos que estivessem exatamente nesse padrão? Mais uma vez obrigado pelo conteúdo!
Olá, Emanuel, tudo bem? Eu andei atualizando o código deste vídeo, lá no Github, depois de um tempo eu percebi alguns erros. Alguns problemas foram corrigidos e não está mais como no vídeo. Obrigado pelo feedback :-)
Oláa, Marcos. Tudo bem? Eu também tive esse mesmo problema quando usava o Jupyter no Windows e nunca consegui resolver. É algo que está mais relacionado com a instalação do seu ambiente Jupyter. Tente rodar o kernel no Google Colab, que vai funcionar bem. Aqui vai o link: colab.research.google.com/drive/1V392DmhiKa5Q6rK3-fV61W4P7k2zTCbR
Não esquece de subir os arquivos de imagem por meio do botão "upload" presente no menu lateral do notebook Colab, pra você poder testar o modelo. Às vezes pode ser preciso um número maior de epochs para ter uma precisão mais razoável, ou acrescentar mais camadas, etc. Bons estudos.
@@ManualdoMachineLearning Olá Luís! Este Google Colab é uma ferramenta semelhante ao Jupyter Notebook? Estou começando a me aventurar na área de deep learning agora e não sei muito o que está acontecendo kkkk
Marcos Davi O Colab é um ambiente da Google que roda notebooks na Cloud, por meio do qual você consegue desenvolver seus códigos como se fosse em um Jupyter notebook em sua máquina local. Uma grande diferença é que o Colab já tem instaladas praticamente todas as libs que você vai precisar e você ainda pode instalar outras por meio do comando $ pip install. Também tem a diferença de te oferecer GPU e TPU free.
Cara o vídeo é muito bom, mas eu não consigo ainda ver onde estão os dados pra treino. Onde vc salva as imagens que serão utilizadas pra treinar a rede? Muito obrigado
CÓDIGO ATUALIZADO NO GITHUB
Pessoal, considerem que esse vídeo já não é tão novo, e que há incompatibilidades entre o código escrito durante o vídeo e as versões mais recentes do Keras/Tensorflow. Portanto, peço que vejam a descrição do vídeo, onde está o link para o código atualizado no Github. Frequentemente atualizo para resolver incompatibilidades.
Muito obrigado pela aula. Muito bom como você construiu a sua CNN. No código eu tive que mudar o formato e deu certo: (1, 28, 28) --> (28, 28, 1). Obrigadão !
Didatica perfeita, me ajudou a resolver um problema. Obrigado!
Pra quem teve dificuldades pra entender a função da linha "y_train= np_utils.to_categorical(y_train)", ele transformou as labels do treino (a saída respectiva a cada imagem de número feito mão, ou seja, se a imagem é um 4 manuscrito, a label (y_train) será o valor 4) em uma matriz one-hot (ou one-cold, caso eu tenha confundido, mas é quase a mesma coisa, rs). Ele categorizou cada valor de label de acordo com um valor one hot.
Parabéns pelo vídeo, gostei muito, vou recomendar seu canal, aprendi muito com você
Cara, meus parabéns. Mto mto boa essa videoaula
Excelente abordagem e didatica. O texto no medium tbm ficou sensacional. Quero usar CNN no meu doutorado na parte de modelos geoidais com sensoriamento remoto.
Olá, Rodrigo, tudo em paz? Achei bem interessante a sua ideia. Se precisar de uma força, posso colaborar com o que estiver ao meu alcance.
Amigo,você está de parabéns !
Ótima aula !
Aula excelente
Parabéns. Bom conteúdo. Pretendo desenvolver uma pesquisa no Doutorado e isso vai me ajudar bastante...
Olá, excelente trabalho, obrigado por compartilhar. As imagens novas que vc usou para testar que deram erro na predição, estam com escala de cinza invertido em relaçao as do Mnist. Executando o comando: img_pred = ~img_pred vc as coloca no mesmo padrão de cinza do Mnist a acurácia da rede, com isso, vai a 99% sem a necessidade de alterar a Rede.
Espetacular, gostei muito !
Q video show. Excelente didática e abordagem.
Excelente trabalho. Obrigado!
Excelente aula. Obg!
Ei, parabéns pelo vídeo cara!
Sua introdução foi muito foda, mostrando que sabe o que está falando!
Já tinha até esquecido o que era uma combinação linear, 6 anos que não ouvia o termo :D
Tô te seguindo no Medium ;)
Ps: seu blog tá fora do ar.
Abraço.
Elias, tudo bem? Que bom saber que o vídeo te ajudou. Sobre o blog, a URL: luisfred.com.br
@Luís Fred , Excelente vídeo, você teria algum exemplo ou material de importação e treinamento de um dataset próprio local?
Obrigado!
Olá, Bruno. Vou ficar te devendo essa. No caso, você queria um dataset próprio nos moldes no MNIST?
Cara me responde uma dúvida, no minuto 53:28 porque "num_classes = y_test_shape[1]" é igual a 10? O que esse index significa? Estou no aguardo.
A variável alvo, o nosso Y, é uma matriz com (10000, 10). Ou seja, um formato 2D com 10k linhas e 10 colunas. Essas 10 colunas representam os números naturais de 0 à 9 que nós queremos classificar e, portanto, indicam que nós temos um conjunto de dados composto de 10 classes. Eu preciso informar esse número de classes na última camada da rede. Então, ou eu posso inserir esse valor "10" de maneira estática ou pegar ele automaticamente a partir do segundo índice da tupla `y_test.shape`. Assim:
>>> print(y_test.shape)
(10000, 10)
>>> print(y_test.shape[1])
10
Na arquitetura da rede, eu vou informar esse número 10 na última camada, a que tem a softmax: model.add(Dense(10, activation='softmax', name='predict')). Eu achei mais interessante, no lugar de inserir o 10 de maneira estática, pegar ele automaticamente e guardar na variável num_classes: model.add(Dense(num_classes, activation='softmax', name='predict')).
Assim, nossa rede saberá que nós estamos classificando um conjunto de dados com 10 classes.
@@ManualdoMachineLearning Valeu Luis
@@ManualdoMachineLearning Ou num programa de reconhecimento facial (ser ser em tempo real) funcionaria com o mesmo princípio? Se sim que mudanças me indicaria? Se não, a partir de que lugar posso aprender como montar um exemplar?
@@ManualdoMachineLearning Por onde posso estudar mais sobre o assunto? O que me indicaria?
@@enzodoanti7329 seria diferente, mas haveria alguma interseção entre os conceitos, como a parte de arquitetura de rede. Eu nunca trabalhei com reconhecimento facial. Sugiro que você estude um pouco sobre arquiteturas para visão computacional.
boa tarde, quando eu uso a importação :
import keras.backend as K
K.set_image_dim_ordering('th')
da o seguinte erro :
module 'keras.backend' has no attribute 'set_image_dim_ordering'
eu pesquisei mas não conseguir encontrar a solução, o que eu posso fazer para resolvê lo
erick rodrigues goncalves como vai? Veja se o conteúdo desta thread te ajuda github.com/keras-team/keras/issues/12649
@@ManualdoMachineLearning funcionou, era um problema na vesão do Keras, obrigado
Quando tento treinar o modelo no Google Colab dá esse erro:
InvalidArgumentError: Default MaxPoolingOp only supports NHWC on device type CPU
[[node sequential_6/max_pooling2d_5/MaxPool (defined at :1) ]] [Op:__inference_train_function_2979]
Function call stack:
train_function
Alguém sabe o que é?
João Victor Mendes experimente alterar o runtime para GPU e certifique-se de está usando a versão mais atual do código, com link na descrição do vídeo.
Breno da Cunha manda o link do notebook Colab que você tá usando
@Breno da Cunha O código do vídeo está desatualizado. Atualizei no Github já tem algum tempo e disponibilizei o link na descrição. Esse mesmo link aqui: github.com/luisfredgs/keras-cnn-handwriting-mnist. Na descrição do código há um botão azul para você executar direto no google colab.
Depois de muito tentar, consegui resolver, o problema é quando alterava o backend pra "first", quando deixei "last" (o padrão) e formatei corretamente os dados o código rodou normal. Com o backend em "fist" dava esse erro mesmo com os dados devidamente formatados. Eu estava fazendo minha versão do código, não queria simplesmente copiar o seu, aí me deparei com o erro. Mas deu tudo certo, obrigado por se dispor a ajudar
@@joaovictormendes2293 "Eu estava fazendo minha versão do código, não queria simplesmente copiar o seu" -->É assim que fala! Esse é o espírito!!! Que bom que deu certo.
Oi, parabéns pelo vídeo!!!
Onde encontro material para aprender como criar uma rede deep Q learning exclusivamente com Keras ?
Só encontro vídeos e tutoriais que fazem uma salada mista de Tensorflow, Keras, Scikit Learn e Pytorch.
Uma verdadeira torre de Babel ...
Luís, parabéns pelo vídeo. Queria fazer uma observação ... acredito que seu modelo não tenha reconhecido aqueles três exemplos de imagens muito bem porque as imagens do mnist usadas para o treinamento têm fundo preto escritas em branco, e não o contrário como você usou. Sds.
Isso mesmo, Andre. Valeu!
Boa noite Marcos, ótimo trabalho. Na parte da rede aparece o seguinte erro ao final AttributeError: module 'tensorflow._api.v2.config' has no attribute 'experimental_list_devices' mesmo pesquisando não encontrei uma solução, creio estar ligado a linha Covn2D [pesquisando alterei para model.add(Conv2D(30, (5,5), activation='relu', padding='same',input_shape=(1,28,28), data_format='channels_first')) ] também pode ser algo ligado a atualização do tensorflow. Mas também não funcionou. Poderia me ajudar? Muito obrigada!!!!
Olá, Kallita. Tudo em ordem? Realmente, havia uma pequena incompatibilidade entre esse código e a versão mais atual do Tensorflow. Já providenciei um ajuste e você pode tentar novamente: github.com/luisfredgs/keras-cnn-handwriting-mnist
@@ManualdoMachineLearning Boa noite, muito obrigada!! Funcionou perfeitamente. Grata pelo retorno.
Opa, nao seria no fully connected layer o caso de utilizar uma softmax como activation layer pq eh um caso de multiclassificacao ? Ou voce escolheria uma relu como funcao de activacao porque voce usou a funcao " keras.utils.to_categorize" que transforma a saida como 0 ou 1 ?
Muito bom, acabei comprando seu curso na Udemy. Fiquei com uma dúvida, sempre que eu submeto uma imagem, o modelo além de predizer ele aprende mais ? ou ele só aprendo no preríodo de treino quando é iniciado ?
Wlahyrton Meireles , como vai? Nesse caso, o modelo vai reconhecer o padrão e atribuí-lo a um grupo (classe) específico. Em seguida, a instância submetida será descartada. O modelo não é retroalimentado. Nesse caso específico, o modelo aprende uma vez durante o treino e depois vai fazer apenas inferências. Porém, é possível, de alguma forma, ir guardando essas instâncias para enriquecer a base de aprendizagem e você usá-las na próxima vez em que for treinar o modelo. Pode, ainda, descongelar os pesos e reiniciar o treino com essas novas instâncias partindo do ponto onde tinha parado, sem precisar treinar tudo do zero novamente. Algum esforço seria necessário na modificação do código para que isso ocorra, mas nada que uma boa pesquisada no Google não ajude. O Tensorflow possui um método chamado “model.load_weights()”, que você usa para carregar os pesos treinados anteriormente. Depois, usa um “model.fit()” para treinar os novos pesos sem descartar os anteriores, mas não sem antes incluir a nova instância no pipeline. Da uma pesquisada, vai achar uma ruma de links relevantes com tutoriais.
Como posso importar imagens do pc para o Colab ou Jupyter Notebook usando imread?
Opa! Tudo bem? Vou te passar um exemplo de como você pode fazer isto pelo Colab, sendo o que eu normalmente faço. Isto vai mostrar um botão pra você escolher a imagem no seu computador, então o upload é feito e a imagem é lida pelo imread. Use este código como um ponto de partida, adaptando-o conforme necessário:
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
os.rename(fn, "image_name.jpg")
img_pred = cv2.imread("image_name.jpg", 0)
eu posso usar esse mesmo codigo para outros data set?
erick rodrigues goncalves Você pode usar o código com outros dados, mas terá que fazer as devidas adaptações para cada caso.
onde posso encontrar datas set com imagens de palavras (chinesa, japonesa) escrita a mão
erick rodrigues goncalves vou ficar te devendo essa, tranquilo?
@@ManualdoMachineLearning tranquilo mano
Esse é material mais abrangente sobre o assunto que vi no YT. Parabéns pela iniciativa! Somente uma dúvida: se a acurácia do modelo está perto de 100% não é estranho esses erros nas imagens que você testou no final do vídeo? Eu implementei tudo e fazendo testes com entradas parecidas com as suas também obtive muitos erros, os quais não são compatíveis com uma acurácia de quase 100%. Achei estranho e então resolvi dar uma olhada nas imagens do MNIST que o Keras usa. Acontece que as imagens são compostas por fundo preto e traços brancos. O oposto do que vc e eu tentamos fornecer como entrada. A partir disso testei com entradas nesse padrão e os erros praticamente sumiram. Posso estar falando besteira, mas não seria o caso de que esse modelo só está treinado para classificar dígitos que estivessem exatamente nesse padrão? Mais uma vez obrigado pelo conteúdo!
Olá, Emanuel, tudo bem? Eu andei atualizando o código deste vídeo, lá no Github, depois de um tempo eu percebi alguns erros. Alguns problemas foram corrigidos e não está mais como no vídeo. Obrigado pelo feedback :-)
Parabéns Fred, ótimo material. sobre o grupo do slack ainda existe?
Olá, Felype, como vai tudo? Sim, o grupo ainda existe. Clica no link que está na descrição, caso tenha interesse em participar :-).
Luís ele diz que o link não está mais ativo e pede pra entrar em contato pra ver se não existe outro
Opa! atualizei o link.
Estou tendo problemas com o kernel, por algum motivo ele fica desconectando e reconectado, será q pode ma ajudar?
Oláa, Marcos. Tudo bem? Eu também tive esse mesmo problema quando usava o Jupyter no Windows e nunca consegui resolver. É algo que está mais relacionado com a instalação do seu ambiente Jupyter. Tente rodar o kernel no Google Colab, que vai funcionar bem. Aqui vai o link: colab.research.google.com/drive/1V392DmhiKa5Q6rK3-fV61W4P7k2zTCbR
Não esquece de subir os arquivos de imagem por meio do botão "upload" presente no menu lateral do notebook Colab, pra você poder testar o modelo. Às vezes pode ser preciso um número maior de epochs para ter uma precisão mais razoável, ou acrescentar mais camadas, etc. Bons estudos.
@@ManualdoMachineLearning Olá Luís! Este Google Colab é uma ferramenta semelhante ao Jupyter Notebook? Estou começando a me aventurar na área de deep learning agora e não sei muito o que está acontecendo kkkk
Marcos Davi O Colab é um ambiente da Google que roda notebooks na Cloud, por meio do qual você consegue desenvolver seus códigos como se fosse em um Jupyter notebook em sua máquina local. Uma grande diferença é que o Colab já tem instaladas praticamente todas as libs que você vai precisar e você ainda pode instalar outras por meio do comando $ pip install. Também tem a diferença de te oferecer GPU e TPU free.
@@ManualdoMachineLearning Entendi! Estou utilizando o Colab agora e os resultados estão similares aos do vídeo. Obrigado pela ajuda!
Olá, tem como eu entrar em contato com você? preciso de um help
Cara o vídeo é muito bom, mas eu não consigo ainda ver onde estão os dados pra treino. Onde vc salva as imagens que serão utilizadas pra treinar a rede? Muito obrigado