Deep Learning Keras - Reconhecimento de escrita manual com redes neurais convolucionais

แชร์
ฝัง
  • เผยแพร่เมื่อ 11 ธ.ค. 2024

ความคิดเห็น • 68

  • @ManualdoMachineLearning
    @ManualdoMachineLearning  4 ปีที่แล้ว +2

    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.

  • @LearningWorldChatGPT
    @LearningWorldChatGPT 3 ปีที่แล้ว +1

    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 !

  • @m4xcell
    @m4xcell 2 ปีที่แล้ว

    Didatica perfeita, me ajudou a resolver um problema. Obrigado!

  • @gauninha12
    @gauninha12 5 ปีที่แล้ว +3

    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.

  • @opressorgeek8244
    @opressorgeek8244 6 ปีที่แล้ว +1

    Parabéns pelo vídeo, gostei muito, vou recomendar seu canal, aprendi muito com você

  • @yanrodrigo3071
    @yanrodrigo3071 5 ปีที่แล้ว +2

    Cara, meus parabéns. Mto mto boa essa videoaula

  • @TensorFlow9966
    @TensorFlow9966 5 ปีที่แล้ว +1

    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.

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  5 ปีที่แล้ว

      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.

  • @LolProBolado
    @LolProBolado 5 ปีที่แล้ว +1

    Amigo,você está de parabéns !
    Ótima aula !

  • @isaquebrandao246
    @isaquebrandao246 ปีที่แล้ว

    Aula excelente

  • @bruno0camila0felipe
    @bruno0camila0felipe 6 ปีที่แล้ว +1

    Parabéns. Bom conteúdo. Pretendo desenvolver uma pesquisa no Doutorado e isso vai me ajudar bastante...

  • @barrosbr
    @barrosbr 5 ปีที่แล้ว +2

    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.

  • @marlonreis2409
    @marlonreis2409 6 ปีที่แล้ว +1

    Espetacular, gostei muito !

  • @TensorFlow9966
    @TensorFlow9966 5 ปีที่แล้ว +1

    Q video show. Excelente didática e abordagem.

  • @jeuel_alves
    @jeuel_alves 6 ปีที่แล้ว +1

    Excelente trabalho. Obrigado!

  • @alfredoalbelis1607
    @alfredoalbelis1607 5 ปีที่แล้ว

    Excelente aula. Obg!

  • @eliassoares89
    @eliassoares89 6 ปีที่แล้ว +1

    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.

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  6 ปีที่แล้ว

      Elias, tudo bem? Que bom saber que o vídeo te ajudou. Sobre o blog, a URL: luisfred.com.br

  • @BrunoAlmeida-ed4ko
    @BrunoAlmeida-ed4ko 5 ปีที่แล้ว +1

    @Luís Fred , Excelente vídeo, você teria algum exemplo ou material de importação e treinamento de um dataset próprio local?
    Obrigado!

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  5 ปีที่แล้ว

      Olá, Bruno. Vou ficar te devendo essa. No caso, você queria um dataset próprio nos moldes no MNIST?

  • @enzodoanti7329
    @enzodoanti7329 5 ปีที่แล้ว +2

    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.

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  5 ปีที่แล้ว +1

      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.

    • @enzodoanti7329
      @enzodoanti7329 5 ปีที่แล้ว +1

      @@ManualdoMachineLearning Valeu Luis

    • @enzodoanti7329
      @enzodoanti7329 5 ปีที่แล้ว

      @@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
      @enzodoanti7329 5 ปีที่แล้ว

      @@ManualdoMachineLearning Por onde posso estudar mais sobre o assunto? O que me indicaria?

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  5 ปีที่แล้ว

      @@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.

  • @erickrodriguesgoncalves2700
    @erickrodriguesgoncalves2700 5 ปีที่แล้ว +2

    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

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  5 ปีที่แล้ว

      erick rodrigues goncalves como vai? Veja se o conteúdo desta thread te ajuda github.com/keras-team/keras/issues/12649

    • @erickrodriguesgoncalves2700
      @erickrodriguesgoncalves2700 5 ปีที่แล้ว +2

      @@ManualdoMachineLearning funcionou, era um problema na vesão do Keras, obrigado

  • @joaovictormendes2293
    @joaovictormendes2293 4 ปีที่แล้ว +2

    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 é?

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  4 ปีที่แล้ว

      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.

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  4 ปีที่แล้ว

      Breno da Cunha manda o link do notebook Colab que você tá usando

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  4 ปีที่แล้ว

      @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.

    • @joaovictormendes2293
      @joaovictormendes2293 4 ปีที่แล้ว +1

      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

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  4 ปีที่แล้ว

      @@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.

  • @camus6525
    @camus6525 5 ปีที่แล้ว

    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 ...

  • @andreschaeffer
    @andreschaeffer 5 ปีที่แล้ว +1

    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.

  • @kallitamagalhaes8907
    @kallitamagalhaes8907 4 ปีที่แล้ว +1

    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!!!!

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  4 ปีที่แล้ว

      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

    • @kallitamagalhaes8907
      @kallitamagalhaes8907 4 ปีที่แล้ว +1

      @@ManualdoMachineLearning Boa noite, muito obrigada!! Funcionou perfeitamente. Grata pelo retorno.

  • @BluePandora1
    @BluePandora1 4 ปีที่แล้ว

    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 ?

  • @wlahyrtonmeireles5934
    @wlahyrtonmeireles5934 4 ปีที่แล้ว +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 ?

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  4 ปีที่แล้ว

      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.

  • @flaviosantos6
    @flaviosantos6 5 ปีที่แล้ว +1

    Como posso importar imagens do pc para o Colab ou Jupyter Notebook usando imread?

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  5 ปีที่แล้ว

      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)

  • @erickrodriguesgoncalves2700
    @erickrodriguesgoncalves2700 5 ปีที่แล้ว +3

    eu posso usar esse mesmo codigo para outros data set?

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  5 ปีที่แล้ว +1

      erick rodrigues goncalves Você pode usar o código com outros dados, mas terá que fazer as devidas adaptações para cada caso.

  • @erickrodriguesgoncalves2700
    @erickrodriguesgoncalves2700 5 ปีที่แล้ว +1

    onde posso encontrar datas set com imagens de palavras (chinesa, japonesa) escrita a mão

  • @emanueldiego2533
    @emanueldiego2533 6 ปีที่แล้ว

    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!

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  6 ปีที่แล้ว

      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 :-)

  • @wemyfelype8322
    @wemyfelype8322 6 ปีที่แล้ว

    Parabéns Fred, ótimo material. sobre o grupo do slack ainda existe?

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  6 ปีที่แล้ว

      Olá, Felype, como vai tudo? Sim, o grupo ainda existe. Clica no link que está na descrição, caso tenha interesse em participar :-).

    • @wemyfelype8322
      @wemyfelype8322 6 ปีที่แล้ว +1

      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

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  6 ปีที่แล้ว

      Opa! atualizei o link.

  • @marcosdavi7486
    @marcosdavi7486 5 ปีที่แล้ว +1

    Estou tendo problemas com o kernel, por algum motivo ele fica desconectando e reconectado, será q pode ma ajudar?

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  5 ปีที่แล้ว

      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

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  5 ปีที่แล้ว

      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.

    • @marcosdavi7486
      @marcosdavi7486 5 ปีที่แล้ว +1

      @@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

    • @ManualdoMachineLearning
      @ManualdoMachineLearning  5 ปีที่แล้ว

      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.

    • @marcosdavi7486
      @marcosdavi7486 5 ปีที่แล้ว +1

      @@ManualdoMachineLearning Entendi! Estou utilizando o Colab agora e os resultados estão similares aos do vídeo. Obrigado pela ajuda!

  • @KatorZChannel
    @KatorZChannel 5 ปีที่แล้ว

    Olá, tem como eu entrar em contato com você? preciso de um help

  • @anlpereira
    @anlpereira 4 ปีที่แล้ว

    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