< Return to Video

RDAG CAP02 2025 VA06 PYTHON APLICACAO CNN

  • 0:08 - 0:09
    Como podemos
  • 0:09 - 0:12
    utilizar uma CNN para classificar imagens
    como deep learning?
  • 0:13 - 0:14
    Nesse momento do curso você já conhece
  • 0:14 - 0:19
    o que é de sinais artificiais,
    o que é um pilar e também, e sobretudo,
  • 0:19 - 0:22
    que existem diversas arquiteturas
    para trabalhar com regionais profundas.
  • 0:22 - 0:26
    Aqui vamos dar um destaque na CNN,
    que são as bases para diversos
  • 0:26 - 0:30
    outros arquiteturas também,
    inclusive para treinar outros tipos
  • 0:30 - 0:34
    de tarefas mais complexas,
    como segmentação e detecção de objetos.
  • 0:34 - 0:37
    Então vamos começar o básico,
    que é classificar imagens.
  • 0:37 - 0:42
    Será que nessa imagem nós temos um objeto
    ou outro objeto sem se preocupar
  • 0:42 - 0:47
    a princípio, onde eles estão,
    em qual posição da imagem estão também?
  • 0:47 - 0:50
    O fato é saber a qual classe
    essa imagem pertence.
  • 0:51 - 0:52
    Vamos pro código.
  • 0:52 - 0:56
    Bom, aqui no ambiente
    eu estou com o código já programado,
  • 0:56 - 1:00
    mas como meu ambiente está desligado
    e eu irei fazer uma coisa diferente,
  • 1:01 - 1:04
    normalmente acabo utilizando o código
    pronto e vou
  • 1:04 - 1:07
    executando eles com vocês, indicando
    passo a passo o que está acontecendo.
  • 1:08 - 1:09
    Como esse código
  • 1:09 - 1:13
    é um pouco lento para ser reproduzido,
    eu já vou trazer o código executado
  • 1:13 - 1:18
    e vou fixar o ponto aqui
    de destaque do código e da saída.
  • 1:18 - 1:22
    Convido vocês a pegar um código pronto
    e reproduzir no seu ambiente também,
  • 1:23 - 1:26
    testarem com outros parâmetros
    e verificar o impacto disso na
  • 1:26 - 1:29
    em tempo de execução
    e também nos resultados.
  • 1:29 - 1:34
    a primeira tarefa a ser executada aqui
    esse pipe install para nós
  • 1:34 - 1:37
    estabelecemos as versões
    do TensorFlow e do caras.
  • 1:37 - 1:40
    É importante dar esse destaque
    para saber exatamente
  • 1:40 - 1:45
    qual versão das bonecas vão utilizar,
    porque dependendo da tipo de versão
  • 1:45 - 1:49
    que estamos utilizando, pode haver alguma
    incompatibilidade entre o código
  • 1:49 - 1:52
    da versão antiga e da versão nova,
    o que vai quebrar nossa execução.
  • 1:53 - 1:56
    Quando a gente estabelece exatamente
    qual versão de boteco nós vamos
  • 1:56 - 1:59
    utilizar,
    nós evitamos esse tipo de problema.
  • 1:59 - 2:02
    É claro que no desenvolvimento
    padrão de proteínas,
  • 2:02 - 2:07
    a evolução é natural e é constante,
    mas o desenvolvedor de bibliotecas
  • 2:07 - 2:10
    tendem a fazer uma versão compatível
    com as anteriores.
  • 2:10 - 2:15
    No entanto, alterações podem ocorrer
    quebrando códigos antigos,
  • 2:15 - 2:19
    então, nesse caso é sempre importante
    ficar de olho nas versões de bibliotecas
  • 2:19 - 2:21
    que estão utilizando
    para evitar problemas futuros.
  • 2:21 - 2:23
    No nosso código também.
  • 2:23 - 2:24
    esse comando vai instalar
  • 2:24 - 2:28
    que no nosso ambiente o TensorFlow é o
    queres nas versões aqui indicadas.
  • 2:28 - 2:32
    Se a gente não fala nada
    e ninguém executa essa célula aqui
  • 2:32 - 2:36
    já vai ter uma versão do TensorFlow
    e do queros instalados previamente.
  • 2:36 - 2:40
    O que nós queremos fazer aqui
    é o seguinte desinstale
  • 2:40 - 2:44
    a versão anterior
    e instale estas versões em nosso ambiente.
  • 2:44 - 2:47
    Note pela saída dessa célula
  • 2:47 - 2:50
    que é um tempinho
    para poder instalar o que necessário.
  • 2:51 - 2:54
    Esse erro aqui é natural,
    faz parte do processo de tentativa e erro.
  • 2:55 - 2:57
    Inclusive
    esse vai aparecer para o que está falando
  • 2:57 - 3:00
    o seguinte
    olha só, você pegou o ambiente já pronto,
  • 3:00 - 3:04
    você está desinstalando coisa,
    instalando novamente, Ou seja, reinicie
  • 3:04 - 3:07
    o ambiente, vai aparecer uma mensagem
    na tela pedindo, reinicie o ambiente
  • 3:07 - 3:11
    e tudo ok ou reiniciar
    E como estiver na sua tela
  • 3:11 - 3:16
    ele vai ligar novamente seu ambiente
    e ligar novamente esse ambiente.
  • 3:16 - 3:21
    Execução já com as teclas e instaladas
    nas versões que nós solicitamos.
  • 3:21 - 3:24
    Feito isso, nós
    podemos começar com o código de verdade
  • 3:24 - 3:28
    e aqui temos os impostos necessários
    para esse tipo de trabalho.
  • 3:28 - 3:30
    Vamos, portanto, insuflou.
  • 3:30 - 3:34
    Não parece bom para fazer alguns gráficos
    também da parte desse Kalanick,
  • 3:34 - 3:38
    vamos importar a matriz de confusão
    para exibir melhor
  • 3:38 - 3:41
    resultados da parte aqui de redes.
  • 3:41 - 3:46
    Vamos fazer alguns imports
    de cor de código específicos
  • 3:46 - 3:51
    para trabalhar com pincel flow
    para construir sistemas com de planning,
  • 3:51 - 3:54
    então rende sequenciais
    as camadas das camadas.
  • 3:54 - 3:57
    Vamos importar várias camadas
    que existem também.
  • 3:57 - 4:02
    O mecanismo de stopping scaling
    para mudar a dimensão das imagens também.
  • 4:03 - 4:08
    E note que aqui estou importando também
    a rede Ponto de VEJA de 16.
  • 4:08 - 4:12
    Poderia importar outra rede pré pronta
    também.
  • 4:12 - 4:13
    Isto é importante aqui.
  • 4:14 - 4:15
    O pré
  • 4:15 - 4:19
    processamento das entradas
    que vão alimentar essa rede.
  • 4:19 - 4:24
    Veja 16 Para pegar uma rede do zero,
    isso ainda não será necessário,
  • 4:24 - 4:25
    mas guarde essa informação
  • 4:25 - 4:28
    porque vamos voltar logo,
    logo quando falarmos de transfer learning.
  • 4:29 - 4:34
    Pois bem, então temos aqui
    as camadas, os modelos específicos.
  • 4:34 - 4:36
    Agora começa com o código de verdade.
  • 4:36 - 4:39
    1/1 de nosso código,
    Essa aqui é para carregar.
  • 4:39 - 4:45
    Ele está set para memória, ou seja,
    eu não vou subir um arquivo de dados aqui.
  • 4:45 - 4:49
    Essa base de categorias de flores
    são cinco alegorias possíveis.
  • 4:49 - 4:52
    Já está dentro do TensorFlow.
  • 4:52 - 4:54
    Isso é importante. Isso aqui para memória.
  • 4:54 - 4:59
    Então, estudando o Load,
    carregar o TensorFlow Flowers
  • 4:59 - 5:02
    tipo de flores
    já na proporção de treino e teste,
  • 5:02 - 5:05
    ele já vai carregar para gente
    uma divisão em duas tuplas,
  • 5:06 - 5:09
    a tupla de treinamento e a tupla de teste.
  • 5:09 - 5:12
    Tanto do ponto de vista do dado em si.
  • 5:12 - 5:15
    O dados de treinamento, o dado de teste
  • 5:15 - 5:18
    e o labor de treinamento
    e de teste também.
  • 5:18 - 5:21
    Note que até esse processo
    também demora um pouquinho.
  • 5:21 - 5:24
    Não muito, mas demora um pouquinho também
  • 5:24 - 5:27
    para ser carregado,
    porque é uma base grande de fato.
  • 5:27 - 5:31
    Aqui eu posso mostrar o tamanho
    aqui desses arquivos, então
  • 5:31 - 5:37
    meu arquivo de treino
    ele tem duas 1569 imagens
  • 5:38 - 5:41
    e a de teste tem 1101 imagens.
  • 5:41 - 5:46
    Não importa se estou no treino
    ou no teste, nós temos as mesmas dimensões
  • 5:46 - 5:50
    desses dados, ou seja,
    cada imagem é expressa originalmente
  • 5:50 - 5:53
    em quatro, quatro, dois por 1024 pixels
  • 5:53 - 5:56
    expressos em três canais RGB.
  • 5:56 - 5:59
    A mesma coisa para o treino,
    a mesma coisa para o teste.
  • 6:00 - 6:03
    Agora a gente começa pré
    processando esses dados.
  • 6:04 - 6:08
    Estou dizendo o seguinte eu vou trabalhar
    com o tamanho de 150% e 50, ou seja,
  • 6:08 - 6:12
    eu não vou trabalhar com imagem
    do tamanho original e vou escalá las
  • 6:12 - 6:16
    para ser tamanho de 150% e 50
    a exportação sequência.
  • 6:17 - 6:19
    Mas Michel, a imagem é retangular.
  • 6:19 - 6:22
    Você está escalando em algo
    quadrado, Não vai dar um problema
  • 6:23 - 6:23
    e não vai
  • 6:23 - 6:26
    ficar exatamente a mesma imagem
    com a mesma proporção.
  • 6:26 - 6:29
    Mas você vai preservar
    os elementos essenciais
  • 6:29 - 6:31
    que são necessários para reconhecer
  • 6:31 - 6:35
    se é uma rosa ou uma orquídea,
    ou qualquer outro tipo de flor.
  • 6:35 - 6:36
    Também.
  • 6:36 - 6:40
    Pois bem, dada essa
    e essa tamanho desejado, 150% e 50,
  • 6:40 - 6:44
    eu vou fazer um resize
    nos dados de treinamento,
  • 6:44 - 6:47
    passando o dado que eu
    quero tanto na mente quanto o teste
  • 6:48 - 6:51
    e gerando novos dados,
    digamos assim, já escalados.
  • 6:52 - 6:53
    E agora eu estou transformando.
  • 6:53 - 6:55
    Além de transformar o dado em si,
  • 6:55 - 6:59
    vou transformar o label para um formato
    categórico.
  • 6:59 - 7:03
    Ou seja, em vez de falar que temos
    a classe zero um, dois, três, quatro
  • 7:04 - 7:09
    cada, Lembo vai ser um vetor zinho com
    cinco posições com valores entre 0 e 1.
  • 7:09 - 7:12
    Cada posição indica um tipo de flor.
  • 7:12 - 7:15
    Ou seja, deixei o lobo categórico
    e mostrando aqui as novas dimensões.
  • 7:15 - 7:18
    Temos, por exemplo,
    aqui para o treinamento
  • 7:18 - 7:22
    continuam as mesmas duas 1569 imagens
  • 7:23 - 7:26
    e agora escaladas em 150% de pixels,
  • 7:26 - 7:29
    e também continuam expressas
    em três canais RGB.
  • 7:30 - 7:33
    E o leigo
    fica exatamente como tinha previsto.
  • 7:33 - 7:36
    Cada lembo cada linha
    aqui um Lembro de uma imagem diferente.
  • 7:36 - 7:39
    Então essa primeira coluna
    representa uma classe,
  • 7:39 - 7:42
    a segunda, terceira, quarta, quinta
    e assim por diante.
  • 7:42 - 7:47
    Ou seja, estou ativando a terceira classe
    entre aspas aqui e com I0 no resto.
  • 7:47 - 7:50
    Nesse ponto eu
    posso começar a construir nossos modelos,
  • 7:50 - 7:53
    então vou fazer o primeiro modelo
    tendendo do zero.
  • 7:53 - 7:57
    Eu vou definir a arquitetura e vou treiná
    la do zero a partir dessas imagens.
  • 7:57 - 7:59
    Ou seja, eu vou começar com uma rede
  • 7:59 - 8:03
    com pesos totalmente aleatórios
    e vou treinar do zero.
  • 8:03 - 8:07
    Como posicionar esses pesos para de fato
    aprender a classificar nessa imagem
  • 8:07 - 8:11
    de uma forma tipo um tipo dois,
    tipo três, quatro, tipo cinco?
  • 8:11 - 8:12
    Vamos ao processo.
  • 8:12 - 8:16
    Para isso então, essa célula aqui está
    um pouquinho grande, tem bastante código.
  • 8:16 - 8:18
    Vamos entender
    ponto a ponto o que estamos fazendo.
  • 8:19 - 8:23
    Nós sabemos que para definir o modelo
    profundo,
  • 8:23 - 8:26
    nós temos que definir
    a arquitetura desse modelo,
  • 8:26 - 8:29
    então ele vai ser um modelo
    sequencial, ou seja, sai de uma camada,
  • 8:29 - 8:32
    vai para a próxima, para a próxima,
    para a próxima.
  • 8:32 - 8:35
    É nesse modelo sequencial
    que eu chamo de rede módulo
  • 8:35 - 8:38
    rede modo,
    porque é o modelo que vou fazer a mão.
  • 8:38 - 8:39
    Vou fazer do zero.
  • 8:39 - 8:42
    Outras abordagens são transfer
    learning, fare tuning,
  • 8:42 - 8:44
    mas para o começo
    vamos começar de uma rede
  • 8:44 - 8:48
    simples, treinada do zero desenhado,
    uma captura a mão.
  • 8:49 - 8:51
    Então vamos lá, Eu vou desenhar a mão.
  • 8:51 - 8:53
    Essa arquitetura ela é sequencial.
  • 8:53 - 8:56
    Ela começa, vou adicionando camadas.
  • 8:56 - 8:59
    A primeira camada é uma camada de escalar
    o dado, ou seja,
  • 8:59 - 9:03
    entra uma imagem de 150% e 50 pixels.
  • 9:03 - 9:07
    Só que eu vou dividir cada pixel
    por dois, cinco, cinco
  • 9:07 - 9:09
    por quem vai fazer isso, lembra?
  • 9:09 - 9:13
    Cada pixel é expresso de zero até dois
    cinco cinco, então quando eu divido
  • 9:13 - 9:17
    esse número por dois cinco cinco,
    eu estou levando os dados da matriz
  • 9:18 - 9:21
    na matriz
    aqui de pixels da imagem entre 0 e 1
  • 9:21 - 9:25
    e fica um valor mais estável para a rede
    conseguir aprender melhor
  • 9:25 - 9:28
    onde posicionar esses pesos
    que modelam esse problema.
  • 9:29 - 9:30
    Beleza.
  • 9:30 - 9:33
    Então, no fundo, essa camada aqui
    é uma camada de normalização.
  • 9:33 - 9:37
    Depois eu já vou passar para uma camada
    congressional com 16 filtros
  • 9:37 - 9:41
    com ativação de linear
    retificada em kernel tamanho dez.
  • 9:41 - 9:45
    Nessa janela deslizante
    e vou engatar aqui uma camada de max,
  • 9:45 - 9:49
    porém depois faço uma outra camada
    com personal, outra camada de max,
  • 9:49 - 9:52
    com outra camada com personal,
    outra camada de Max Play.
  • 9:53 - 9:57
    E pronto,
    terminei aqui a minha arquitetura CNN,
  • 9:58 - 9:59
    ou seja, terminei aqui.
  • 9:59 - 10:02
    O encadeamento de camadas que extrai
  • 10:02 - 10:06
    características da minha imagem de entrada
    não está a camada inteira.
  • 10:06 - 10:10
    Ainda falta com uma decisão,
    mas fiz uma camada de extração de filters.
  • 10:11 - 10:13
    Será que essa é melhor
    que tudo o que eu poderia fazer?
  • 10:13 - 10:15
    Não sei, provavelmente não.
  • 10:15 - 10:18
    Mas uma camada inicial
    para indicar o seguinte arquitetura
  • 10:18 - 10:19
    é a gente que define.
  • 10:19 - 10:26
    Então eu decidi encadear
    três relações seguidas aqui de display.
  • 10:26 - 10:28
    Em cada uma delas Poderia fazer diferente?
  • 10:28 - 10:30
    Poderia caricatura
  • 10:30 - 10:33
    tem as suas possibilidades
    serem construídas com vantagens
  • 10:33 - 10:36
    e desvantagens
    aqui que são criar uma textura simples.
  • 10:37 - 10:38
    Vá essa parte de distração.
  • 10:38 - 10:41
    Vamos a parte de decisão, Ou seja,
  • 10:41 - 10:44
    quando saímos dessa última camada,
    nós temos uma ficha pronta.
  • 10:44 - 10:48
    Vamos então alimentar essa Fisher,
    extrair dos dados de entrada
  • 10:49 - 10:52
    para fazer a classificação do modelo.
  • 10:52 - 10:55
    Eu vou começar
    com uma camada de achatamento, ou seja,
  • 10:56 - 10:58
    não importa
    o que vai sair dessa última camada,
  • 10:58 - 11:02
    eu quero que subir um vetor,
    uma linha e tantas colunas.
  • 11:02 - 11:06
    Depois eu vou trazer duas camadas
    densas da camada densa,
  • 11:07 - 11:09
    fortemente conectadas
    e totalmente conectadas,
  • 11:09 - 11:12
    que são uma camada oculta de uma RMN
    tradicional.
  • 11:12 - 11:16
    E eu termino com uma outra camada densa
    totalmente conectada, no caso,
  • 11:16 - 11:20
    com cinco neurônios,
    porque nós temos cinco classes.
  • 11:20 - 11:23
    Então vai ser alguma delas que vai ser
    ativada.
  • 11:23 - 11:27
    Notem que minha função ativação aqui
    é um soft max, Ou seja,
  • 11:27 - 11:31
    cada um dos neurônios da última camada
    dos cinco neurônios vão ser ativados
  • 11:31 - 11:34
    alguma forma,
    alguns muito pouco e outros bem mais.
  • 11:35 - 11:36
    Qual vai ser o legado final?
  • 11:36 - 11:39
    Max O que está mais ativado,
    Mas eles são ativados.
  • 11:39 - 11:44
    Forma soft Cada um pode ser um pouquinho
    ativado caso em alguma confusão
  • 11:44 - 11:48
    entre as classes, mas lembre, o final
    é ativado pelo que foi mais ativado.
  • 11:48 - 11:51
    todas essas etapas aqui
    eu defini a captura completa
  • 11:51 - 11:54
    da rede desde a etapa de CNN
    Estação de turisticas
  • 11:54 - 11:58
    até etapa de aprendizado de fato,
    o que significa as características.
  • 11:58 - 12:02
    Agora eu vou compilar o modelo
    indicando qual é ser otimizador,
  • 12:02 - 12:05
    qual vai ser melhor,
    qual vai ser a métrica que otimiza bem.
  • 12:05 - 12:09
    Na sequência
    eu vou definir uma estratégia de stopping,
  • 12:09 - 12:15
    ou seja, eu vou monitorar a acurácia
    no conjunto de validação,
  • 12:15 - 12:18
    tendo uma paciência de cinco épocas
  • 12:19 - 12:22
    e quando o One Stopping for ativado eu vou
  • 12:23 - 12:26
    resgatar os melhores pesos
  • 12:26 - 12:27
    que isso quer dizer.
  • 12:27 - 12:29
    A gente quer dizer o seguinte
  • 12:29 - 12:31
    em tempo de treinamento
    a gente está constantemente
  • 12:31 - 12:34
    olhando o dado da avaliação,
    os acertos e os erros.
  • 12:35 - 12:39
    Eu estou
    avaliando a acurácia da validação,
  • 12:40 - 12:43
    Ou seja,
    se essa acurácia no curso de validação
  • 12:43 - 12:44
    não estiver melhorando
  • 12:44 - 12:48
    de forma significativa por cinco épocas
    consecutivas, eu vou parar o treinamento.
  • 12:48 - 12:49
    Ai mesmo.
  • 12:49 - 12:53
    Não importa em que época eu esteja, eu
    vou parar porque não há sinais de melhora.
  • 12:54 - 12:59
    E depois que defino todas estratégias, aí
    sim eu vou fazer o treinamento fitting
  • 12:59 - 13:03
    do modelo modelo aqui ensinado na mão,
    definindo na mão de fato,
  • 13:04 - 13:05
    utilizando o mágico.
  • 13:05 - 13:09
    Eu aqui vou treinar utilizando dado
    treinamento e seus lábios também.
  • 13:10 - 13:13
    Aqui só porque é um modelo que demora pra
  • 13:13 - 13:16
    rodar, eu coloquei bordar por no máximo
    cinco épocas.
  • 13:16 - 13:22
    Eu poderia colocar 50 para colocar
    as 500 aqui eu mantive pelo menos aqui.
  • 13:22 - 13:26
    Cinco
    é o mínimo do mínimo para o seguinte.
  • 13:26 - 13:31
    O dado o treinamento, utilize 20%
    para validação e selecione 32
  • 13:31 - 13:35
    entre duas imagens para fazer tamanho bate
    e tem algum callback?
  • 13:35 - 13:38
    Você tem algo que modifica essa
  • 13:39 - 13:41
    sim uma estratégia de stop.
  • 13:41 - 13:44
    Note que aqui já está executado,
    então também foi executando
  • 13:44 - 13:48
    a primeira época,
    a segunda, terceira, quarta, quinta.
  • 13:48 - 13:50
    Notem que em minha lógica,
    a função de perda,
  • 13:50 - 13:54
    os erros foram melhorando,
    a minha acurácia está aumentando,
  • 13:55 - 13:58
    a acurácia na validação está aumentando
    também.
  • 13:58 - 13:59
    É o que eu esperava.
  • 13:59 - 14:03
    Essa pequena saída já mostra
    que tem espaço para melhoria sim.
  • 14:03 - 14:04
    Se eu tivesse deixado
  • 14:04 - 14:07
    treinar por mais épocas,
    com certeza esse modelo ficaria melhor.
  • 14:08 - 14:10
    Mas aí
    a gente parou com cinco épocas mesmo,
  • 14:10 - 14:13
    porque já era o suficiente para entender
    um pouco dos resultados que essa rede
  • 14:14 - 14:19
    definida do zero poderia trazer
    enquanto vantagem ou desvantagem.
  • 14:19 - 14:21
    Como classificador de imagem.
  • 14:21 - 14:24
    Dado esse momento que a rede
    está treinada, temos que avaliá la.
  • 14:25 - 14:29
    Então vou dar um ponto evaluation
    passando dados e os lembro de teste
  • 14:29 - 14:32
    indicando qual vai ser
    e qual vai ser a acurácia.
  • 14:32 - 14:37
    Note a minha acurácia
    no conjunto de teste foi 54%.
  • 14:38 - 14:40
    Não está muito bom.
  • 14:40 - 14:44
    Ok, ela aprendeu alguma coisa,
    está um pouco acima do aleatório,
  • 14:44 - 14:44
    mas aprendeu
  • 14:44 - 14:49
    pouco, Ou seja, tem chance, tem chão
    para poder conseguir aprender mais.
  • 14:50 - 14:53
    Só que como nós treinamos por pouco tempo,
    o máximo que conseguiu aprender
  • 14:53 - 14:58
    foi para conseguir
    fazer esse tipo de acerto. 54%.
  • 14:59 - 15:03
    No entanto, acurácia
    pode ser uma métrica global meio vaga.
  • 15:03 - 15:08
    Ok, ela acertou 54% no teste,
    mas será que acertou mais de uma classe?
  • 15:08 - 15:09
    Mas de outra?
  • 15:09 - 15:12
    Nós podemos tirar essa dúvida
    com a matriz de confusão.
  • 15:12 - 15:14
    Aqui embaixo
    temos a matriz de confusão cotada
  • 15:14 - 15:19
    e olhem só a distribuição
    dos dados de teste nessa matriz.
  • 15:20 - 15:23
    Lembrem que a matriz,
    que a diagonal principal são os acertos.
  • 15:24 - 15:27
    Então temos 220 acertos aqui
  • 15:27 - 15:32
    e 33 aqui, 130 nessa outra célula
    e por aí vai.
  • 15:32 - 15:36
    Mas o que é fora da matriz
    da diagonal principal são os erros.
  • 15:36 - 15:37
    E tem muito erro.
  • 15:37 - 15:41
    Tem muita confusão
    entre as classes, ou seja,
  • 15:41 - 15:45
    não foi uma boa rede, não foi
    um bom extrator de características.
  • 15:45 - 15:46
    Podemos fazer melhor?
  • 15:47 - 15:48
    Com certeza.
  • 15:48 - 15:51
    É aí que entra uma estratégia muito
    importante, que é o Transfer Planning
  • 15:52 - 15:53
    Transfer Learning.
  • 15:53 - 15:58
    Eu transfiro o conhecimento de uma rede
    pré treinada para outra tarefa de destino,
  • 15:59 - 16:01
    aproveitando de pesos que foram bem
    escrutinados,
  • 16:01 - 16:04
    foram bem treinados,
    que foram bem construídos e posicionados.
  • 16:05 - 16:06
    Vamos ver como isso funciona.
  • 16:06 - 16:12
    Então, aqui vou começar a trabalhar
    com o transfer lane do modelo BG 16, então
  • 16:12 - 16:16
    eu vou voltar um pouquinho lá nos imports
    para reforçar uma coisa importante
  • 16:17 - 16:21
    se eu vou fazer um transfer da VG 16,
    é ela que eu tenho que importar,
  • 16:21 - 16:24
    Se vou trabalhar com uma outra rede,
    tipo uma marionete?
  • 16:24 - 16:27
    Ela ela seria
    ela queria importar aqui no caso
  • 16:27 - 16:31
    eu estou importando o pré processamento,
    não de uma rede qualquer,
  • 16:31 - 16:34
    mas da rede de 16,
    afinal é essa criatura que me interessa.
  • 16:35 - 16:36
    Dado isso,
  • 16:36 - 16:39
    vamos
    ver o processo de construção do transfer.
  • 16:42 - 16:43
    Pronto,
  • 16:43 - 16:44
    o primeiro passo
  • 16:44 - 16:48
    Eu estou reconstruindo internamente
    o teste e fazendo um pré processamento
  • 16:49 - 16:52
    dos dados de entrada
    do treinamento e do teste.
  • 16:52 - 16:54
    O que esse método faz?
  • 16:54 - 16:57
    Essa pré
    processando essas imagens da sua tarefa
  • 16:57 - 17:00
    na mesma escala daqueles dados grandes
  • 17:00 - 17:03
    que foram utilizados para treinar
    a rede de origem do transfer learning.
  • 17:03 - 17:04
    vamos lá.
  • 17:04 - 17:07
    Aí está o básico
    de fazer uma normalização dos dados
  • 17:07 - 17:12
    de treinamento e teste da nossa tarefa,
    levando os parâmetros de distribuição
  • 17:12 - 17:16
    dos dados que foram utilizados
    para determinar essa rede.
  • 17:17 - 17:19
    Nossa tarefa original.
  • 17:19 - 17:21
    E agora eu vou começar a fazer o transfer.
  • 17:21 - 17:25
    Aí de fato, eu vou criar o novo modelo,
    o modelo de base
  • 17:25 - 17:28
    que ele vem
    tendo de base, vendo que da BGG.
  • 17:29 - 17:31
    Ou seja, eu vou importar os pesos
  • 17:31 - 17:35
    que peso da rede vigente 16 pré treinado?
  • 17:35 - 17:39
    Imaginemos,
    eu vou incluir a tarefa de classificação.
  • 17:39 - 17:43
    As últimas camadas
    não devo defini la para minha tarefa?
  • 17:44 - 17:47
    E qual vai ser o input das imagens?
  • 17:47 - 17:51
    Qual o tamanho das imagens aqui no caso
    e o tamanho do conjunto de treinamento,
  • 17:51 - 17:52
    por exemplo?
  • 17:52 - 17:56
    Pegando o jeito, essa para ser condizente,
    de fato é outra coisa importante.
  • 17:56 - 17:59
    Meu bem, esse módulo é treinado,
    Ele é treinável?
  • 18:00 - 18:02
    Não, não é.
  • 18:02 - 18:03
    O que isso quer dizer?
  • 18:03 - 18:06
    Esse aqui é um ponto muito importante,
    que é a essência do transfer learning.
  • 18:06 - 18:08
    Eu peguei aquela mesma
  • 18:08 - 18:12
    rede, as mesmas camadas,
    copiando os mesmos pesos já pré treinados.
  • 18:12 - 18:14
    Imaginei ET e falei essa rede
    pode aprender.
  • 18:14 - 18:16
    Não, não pode.
  • 18:16 - 18:19
    Assim como você copiou esses pesos,
    mantém como estão
  • 18:19 - 18:24
    e vão utilizar esses pesos pré treinados
    para fazer uma extração de fichas
  • 18:24 - 18:28
    da minha data e meu dado de entrada,
    que é o conjunto de imagens de flores.
  • 18:29 - 18:33
    Eu posso inclusive verificar
    o resumo da arquitetura de base
  • 18:34 - 18:38
    e olha só que interessante,
    bem maior do que a outra é o modelo DDG,
  • 18:38 - 18:41
    então ele parte de um conjunto de entrada,
    no caso aqui
  • 18:41 - 18:45
    já em 150% e 50 pixels em três canais.
  • 18:45 - 18:50
    E aí começam no caso de duas camadas
    convencionais,
  • 18:50 - 18:55
    uma camada e mais duas convencionais,
    outro smartphone e assim sucessivamente.
  • 18:55 - 18:59
    Ou seja, eu não definir nada disso veio
    pronto da BGG.
  • 19:00 - 19:03
    Ele tem um total de mais de
  • 19:03 - 19:09
    14 milhões de parâmetros de pesos
    quando são treinava nenhum.
  • 19:09 - 19:15
    Ou seja, copia e cola
    usa esses pesos já bem avaliados,
  • 19:15 - 19:19
    bem construídos, uma rede bem treinada
    para extrair fichas para notas.
  • 19:19 - 19:20
    Nossa tarefa de destino.
  • 19:22 - 19:24
    O que
    falta fazer é colocar a camada de decisão,
  • 19:24 - 19:27
    porque minha tarefa de classificação
    é outra.
  • 19:27 - 19:31
    Lembra que eu imaginei que nós tínhamos
    20.000 classes, mais de 20.000
  • 19:31 - 19:35
    classes aqui eu tenho só cinco,
    então a decisão vai ser diferente mesmo.
  • 19:35 - 19:38
    Vou definir na camada de decisão,
    inclusive da mesma forma
  • 19:38 - 19:40
    que eu fiz anteriormente.
  • 19:40 - 19:44
    E uma camada de entrada de achatamento
    precisa criar um vetor de fichas,
  • 19:44 - 19:47
    duas camadas densas que são ocultas
  • 19:47 - 19:51
    e uma camada densa também
    com cinco neurônios, também soft max.
  • 19:51 - 19:54
    Ou seja, é a mesma camada do modelo
    feita a mão.
  • 19:54 - 19:57
    Aqui eu só mudei um pouquinho
    o formato fim dele.
  • 19:57 - 20:01
    Olha só, cada camada
    foi salva e uma variável.
  • 20:01 - 20:04
    O meu modelo de fato
    com transfer learning,
  • 20:04 - 20:08
    ele é composto
    do que uma sequência de camadas.
  • 20:08 - 20:11
    Eu tenho várias camadas no meu Buys módulo
  • 20:11 - 20:14
    que veio da BG 16,
    então aquelas várias camadas estão aqui.
  • 20:15 - 20:18
    Passo para uma camada de achatamento
    a camada densa um,
  • 20:18 - 20:21
    a segunda e a última
    é a camada de predição.
  • 20:21 - 20:26
    Pronto, estou com meu modelo
    pronto aqui eu mostro agora o resumo dele.
  • 20:26 - 20:27
    Olha como fica interessante
  • 20:28 - 20:30
    é a Veja 16 funcional.
  • 20:30 - 20:33
    Dizemos isso porque é exatamente
    a mesma arquitetura dela
  • 20:34 - 20:37
    passando para as camadas aqui de decisão.
  • 20:37 - 20:39
    Ele tem mais parâmetros
    ainda para serem aprendidos.
  • 20:39 - 20:42
    Passou de 14 milhões para 15 milhões.
  • 20:42 - 20:45
    Aqui, no caso, são 410.
  • 20:45 - 20:50
    São três novas, porque só quatro de dez
    são três naves, um conjunto de 15 milhões.
  • 20:50 - 20:55
    Porque a maior parte desses conjuntos
    de parâmetros nesses pisos e baias
  • 20:56 - 21:00
    vieram depois dizer já está pronta, já
    treinada, já não é treinável, está fixa.
  • 21:01 - 21:03
    Agora essa parte tem de ser aprendida.
  • 21:03 - 21:05
    É da tarefa de classificação.
  • 21:05 - 21:08
    Então, Então agora tem que compilar
    o modelo também.
  • 21:08 - 21:14
    Ou seja, vou dizer qual o seu otimizador
    Allons a métrica a ser acompanhada.
  • 21:14 - 21:18
    Também vou definir meu stop
    da mesma forma que fiz anteriormente.
  • 21:18 - 21:21
    É aí que eu vou de fato treinar o modelo.
  • 21:21 - 21:23
    note até antes de treinar o modelo.
  • 21:23 - 21:26
    As configurações são as mesmas do modelo
    feito à mão
  • 21:27 - 21:28
    para fazer uma comparação justa.
  • 21:28 - 21:31
    Ou seja, eu mudei a extração da fichas.
  • 21:31 - 21:33
    No primeiro modelo
    eu criei um estrutura de filters
  • 21:33 - 21:36
    feito por mim,
    uma captura que acabei de definir
  • 21:36 - 21:39
    e no segundo modelo
    eu vou utilizar uma extrator de filtros
  • 21:39 - 21:43
    da BG 16 já treinada por muito tempo,
    muito bem
  • 21:43 - 21:47
    construída, em cima de uma base de dados
    muito grande.
  • 21:47 - 21:50
    Agora sim, faço o treinamento
    também utilizando a CPU,
  • 21:51 - 21:55
    então vou treinar com os ensinamentos
    os leigos também para cinco épocas,
  • 21:55 - 21:58
    para ser uma comparação justa,
    mesmo esquema de validação
  • 21:59 - 22:01
    bet size e qual callback vou utilizar?
  • 22:01 - 22:06
    E aqui nós temos a saída também por cinco
    épocas.
  • 22:06 - 22:09
    Novamente essa saída de cinco épocas
  • 22:09 - 22:12
    nos mostram que tem espaço, melhoria.
  • 22:12 - 22:14
    Se eu tivesse deixado mais tempo
    para treinar essa rede,
  • 22:14 - 22:17
    provavelmente o resultado
    ficaria ainda melhor.
  • 22:18 - 22:21
    Notem Alonso está diminuindo a perda.
  • 22:21 - 22:25
    Acurácia está aumentando, A acurácia
    na validação também está aumentando.
  • 22:26 - 22:30
    Ou seja, quanto mais tempo o treinamento
    poderia melhorar, ainda mais.
  • 22:30 - 22:33
    Mas mesmo assim,
    mesmo com apenas cinco épocas,
  • 22:34 - 22:36
    esse modelo, quando avaliado,
  • 22:36 - 22:39
    é o mesmo código na essência.
  • 22:39 - 22:41
    Mas aqui eu estou verificando
  • 22:41 - 22:44
    capacidade preditiva do meu modelo
    feito por transport learning.
  • 22:44 - 22:50
    Olha a minha acurácia subiu para 92,
    ou seja, pensado muito melhor do que eu
  • 22:50 - 22:56
    tinha anteriormente, então eu tinha 54%,
    agora tem 92 inclusive.
  • 22:56 - 22:58
    Notem como ficou me uma grande confusão,
  • 22:58 - 23:01
    com muito mais acertos
    e muito menos erros.
  • 23:02 - 23:05
    Portanto, é modelo muito mais
    bem estável, digamos assim.
  • 23:06 - 23:07
    E qual é
  • 23:07 - 23:10
    de onde vem essa vantagem,
    essa estabilidade, esse poder punitivo,
  • 23:10 - 23:15
    desse modelo de utilizar a força
    do aprendizado de uma rede mais profunda,
  • 23:16 - 23:20
    que foi treinada numa base muito grande
    por muito tempo.
  • 23:21 - 23:26
    Quando nós utilizamos a BG 16
    como um extrator de fichas por modelo,
  • 23:26 - 23:30
    nós nos aproveitamos dos pesos e Bayes
    bem treinados para fazer esse benefício
  • 23:30 - 23:33
    muito mais poderoso
    do que aquele que eu defini anteriormente.
  • 23:33 - 23:36
    Então, só o fato de fazer
    transfer learning já gerou um resultado
  • 23:36 - 23:39
    muito melhor
    do que o modelo treinado do zero.
  • 23:39 - 23:41
    A última criatura é muito mais rasa.
  • 23:41 - 23:42
    Muito bom.
  • 23:42 - 23:46
    Nesse ponto nós temos a diferenciação
    entre treinar o modelo sem ir do zero
  • 23:47 - 23:47
    ou utilizar estratégia
  • 23:47 - 23:51
    de transfer learning para criar modelos
    mais sofisticados, com pouco esforço
  • 23:53 - 23:54
    daria para fazer algo diferente.
  • 23:54 - 23:57
    Sim, dá para combinar
    transfer, learning, coffee tuning.
  • 23:58 - 23:59
    O que isso quer dizer?
  • 23:59 - 24:04
    Quando nós fizemos o transfer Planning,
    nós pegamos a rede pré treinada
  • 24:05 - 24:09
    teve de 16 pontos a camada
    extração de sítios e congelamos os pesos.
  • 24:09 - 24:14
    Nós podemos falar o seguinte olha,
    até certa camada fica congelada.
  • 24:14 - 24:17
    Daí em diante pode refinar um pouquinho
    mais, ou seja, vou fazer um vale
  • 24:17 - 24:21
    tuning,
    um ajuste fino do modelo pré treinado
  • 24:21 - 24:25
    para minha tarefa de destino,
    no caso, classificação de flores.
  • 24:26 - 24:28
    Como nós implementamos isso
    da seguinte forma.
  • 24:28 - 24:32
    Aqui tem que dizer o seguinte
    O meu modelo baseline
  • 24:32 - 24:38
    modelo de base aqui que é uma engine 16,
    ela é treinável porque sim, Mas cuidado,
  • 24:38 - 24:41
    isso equilibraria o treinamento
    de todas as camadas.
  • 24:42 - 24:45
    Aqui eu posso falar o seguinte
    qual camada
  • 24:45 - 24:50
    nós vamos travar o treinamento é o modelo
    possui 19 camadas.
  • 24:51 - 24:54
    Vou fazer um fake tuning na camada
  • 24:54 - 24:59
    13 daí em diante, ou seja,
    eu vou pegar o Benz Model,
  • 24:59 - 25:02
    vou acionar
    quanto layers todas as camadas dele
  • 25:03 - 25:08
    e da primeira
    até esse ponto de corte até 13.ª.
  • 25:08 - 25:11
    Ela é treinável, não?
  • 25:11 - 25:13
    Ou seja, o que nós fizemos?
  • 25:13 - 25:17
    A princípio eu falei o seguinte 19
    camadas, todas são três naves.
  • 25:17 - 25:21
    Depois eu voltei
    corrigindo da primeira até a 13.ª.
  • 25:21 - 25:23
    Ela não é treinável
    não só para ser treinável.
  • 25:23 - 25:27
    A 13.ª em diante até as últimas.
  • 25:27 - 25:30
    Ou seja,
    o ajuste fino está nas últimas camadas.
  • 25:30 - 25:33
    Extração de características
    e porque eu quero fazer isso.
  • 25:33 - 25:37
    Porque eu quero dar liberdade para rede,
    ajustar extração de fichas,
  • 25:38 - 25:43
    não uma base qualquer, grande, robusta,
    como a imaginemos, mas para mim
  • 25:43 - 25:46
    é tarefa de destino, que é simplesmente
    classificar tipos de flores.
  • 25:47 - 25:49
    A partir disso, a gente.
  • 25:49 - 25:51
    Nós definimos também as mesmas camadas.
  • 25:51 - 25:54
    Aquele transfer comentado para falar
    vou utilizar exatamente
  • 25:54 - 25:57
    as que eu tinha anteriormente,
    nem preciso redefinir.
  • 25:58 - 26:00
    É o meu modelo com fine tuning
  • 26:00 - 26:04
    também modelo sequencial, ou seja,
    sai de uma camada para a próxima.
  • 26:04 - 26:08
    Ele parte de base
    modo que nós acabamos de alterar
  • 26:08 - 26:13
    conforme tuning e seguimos aqui
    para a camada de achatamento dos sítios,
  • 26:13 - 26:16
    as camadas ocultas e a camada de decisão.
  • 26:16 - 26:19
    Quando eu exploro o que que é esse resumo?
  • 26:20 - 26:23
    É uma leitura parecida,
    porque também temos aqui
  • 26:23 - 26:26
    a BGG como extrator de fichas
  • 26:26 - 26:29
    e também as camadas aqui de decisão.
  • 26:29 - 26:32
    E depois eu preciso
    fazer os mesmos processo anteriormente,
  • 26:33 - 26:36
    ou seja, não vou entrar detalhes aqui
    é o mesmo processo de comprar o modelo,
  • 26:36 - 26:41
    criar estratégia de stop e aí
    sim vou treinar essa rede.
  • 26:42 - 26:44
    Ou seja, vamos treinar essa
  • 26:44 - 26:49
    ideia do modelo com finitude também,
    com modelo, com condicionamento.
  • 26:49 - 26:54
    Esses leigos mesmo estratégia de épocas,
    mesmo divisão de validação
  • 26:54 - 26:57
    também de eu utilizando o histórico
    também.
  • 26:58 - 27:00
    E aqui, novamente,
    para ser uma comparação justa, eu
  • 27:00 - 27:03
    deixei assim de treinar por cinco épocas
    apenas.
  • 27:04 - 27:07
    De novo a Loss está melhorando
  • 27:07 - 27:11
    a acurácia na validação
    está aumentando também,
  • 27:11 - 27:14
    mas tem chão,
    tem bem espaço aqui para melhorar mais.
  • 27:15 - 27:18
    Se nós estivermos treinados
    para, por exemplo, 50 épocas,
  • 27:18 - 27:20
    porque então as épocas?
  • 27:20 - 27:23
    Quanto mais tempo pode ser
    que tenha refinado,
  • 27:23 - 27:26
    mais e menos tivesse colocado,
    Por exemplo, 5000 épocas.
  • 27:26 - 27:27
    É exagero.
  • 27:27 - 27:31
    A partir do momento que a rede
    percebe que ela não está melhorando mais,
  • 27:31 - 27:36
    o aprendizado, o mecanismo de estoque
    interromperia o treinamento antes
  • 27:36 - 27:41
    mesmo de chegar nesse nível exarcebado
    aqui de épocas, vou manter como cinco.
  • 27:42 - 27:45
    Quando nós testamos isso, nós
  • 27:45 - 27:48
    vemos que para aquele conjunto de teste
    nós temos o quê?
  • 27:48 - 27:49
    Que foi essa?
  • 27:49 - 27:53
    Mas a acurácia foi 62 um.
  • 27:53 - 27:55
    Pode parecer um pouco frustrante
  • 27:55 - 27:58
    porque ficou pior do que o modelo
    transform Learning.
  • 27:59 - 28:02
    Então vamos recapitular um pouquinho
    as métricas que nós temos aqui.
  • 28:02 - 28:05
    O modelo treinado do zero,
    com uma textura profunda,
  • 28:05 - 28:10
    mas não muito rebuscada
    e gerou uma couraça de 54%.
  • 28:11 - 28:14
    O modelo de transfer planning
    jogou esse estado para o 90,
  • 28:15 - 28:19
    mais de 90% de acerto
    e agora o transfer lane com o Facetune
  • 28:19 - 28:22
    e derrubou um pouquinho
    essa performance para 62%.
  • 28:24 - 28:26
    62 é melhor que 54.
  • 28:26 - 28:29
    Ou seja, fazer um transfer lane com tuning
  • 28:29 - 28:32
    é melhor do que treinar uma rede do zero.
  • 28:32 - 28:36
    No entanto, faltou
    tempo para refinar essa rede, ou seja,
  • 28:36 - 28:38
    quando eu vou fazer um transfer learning
  • 28:38 - 28:42
    com fine tuning eu tenho que ajustar
    os pesos, E o que isso quer dizer?
  • 28:42 - 28:44
    Que eu não consigo ajustar
  • 28:44 - 28:48
    todos esses pesos dessa rede profunda
    com apenas cinco épocas,
  • 28:48 - 28:50
    eu precisaria de mais tempo.
  • 28:50 - 28:54
    De fato, de forma geral,
    a medida performance
  • 28:54 - 28:57
    tende a ser, em teoria,
    da seguinte forma você treinar
  • 28:57 - 29:01
    uma rede do zero vai te dar uma resposta,
    uma certa taxa de acerto.
  • 29:01 - 29:04
    Quando você faz transfer learning
    de uma rede profunda,
  • 29:05 - 29:08
    bem treinada,
    esse resultado tende a melhorar bastante.
  • 29:08 - 29:12
    Quando você faz transfer lane
    conforme tune, o resultado melhora
  • 29:12 - 29:13
    um pouquinho mais.
  • 29:13 - 29:18
    Não vai ser um salto de área tão grande
    quanto do modelo simples para o transfer,
  • 29:19 - 29:21
    mas ele melhora um pouquinho.
  • 29:21 - 29:24
    No entanto, para verificarmos
    se é feito na prática, é necessário
  • 29:24 - 29:28
    tempo, ou seja, temos que deixar a rede
    treinando por mais tempo.
  • 29:28 - 29:29
    Portanto, por mais épocas.
Title:
RDAG CAP02 2025 VA06 PYTHON APLICACAO CNN
Video Language:
Portuguese, Brazilian
Duration:
29:33

Portuguese, Brazilian subtitles

Revisions Compare revisions