Aprendizagem profunda e redes neurais com Python | Frank Kane | Skillshare
Menu
Pesquisar

Velocidade de reprodução


  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Aprendizagem profunda e redes neurais com Python

teacher avatar Frank Kane, Machine Learning & Big Data, ex-Amazon

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Introdução ao curso

      2:15

    • 2.

      Introdução e pré-requisitos

      11:40

    • 3.

      A história das redes neurais artificiais

      11:14

    • 4.

      12:00

    • 5.

      Detalhes de aprendizagem em profunda

      9:29

    • 6.

      Como introduzir o tensorflow

      11:29

    • 7.

      Como usar o tensorflow para a reconhecimento de escrita à mão, parte 1

      13:11

    • 8.

      Como usar o tensorflow para a reconhecimento de escrita à mão, parte 2

      12:03

    • 9.

      Como introduzir o Keras

      13:33

    • 10.

      Como usar as as ações de e a e a

      12:05

    • 11.

      Redes neurais de a Convolutional

      11:28

    • 12.

      Como usar o CNNs para reconhecimento de escrita para escrita

      8:02

    • 13.

      Redes neurais de novos de recas

      11:02

    • 14.

      Como usar o RNN's para análise de sentimento

      9:37

    • 15.

      Aprendizagem de transferência

      12:14

    • 16.

      Como ajustar as redes neurais: a taxa de aprendizagem e os Batch de tamanho de

      4:39

    • 17.

      Regularization de aprendizagem em profunda com o abandono e encerramento de acesso à primeira

      6:21

    • 18.

      A ética do aprendizagem profunda

      11:02

    • 19.

      Auto-Encoders de diferentes de

      10:23

    • 20.

      VAE: manual com a moda

      26:31

    • 21.

      Redes publicitárias de e de Adversarial de geração de

      7:39

    • 22.

      Demonstração de GAN e treinamento ao vivo

      11:22

    • 23.

      GAN, a de mão com a moda com

      15:20

    • 24.

      Introdução de o projeto de aprendizagem em profundo

      4:48

    • 25.

      Solução de projeto de aprendizagem em profundo

      4:29

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

4.213

Estudantes

2

Projetos

Sobre este curso

É difícil de imaginar uma tecnologia mais quente do que a aprendizagem de profundos do de aprenda, inteligência artificial e redes de neurais artificiais. Se você tiver alguma experiência de Python em em seu cinto, este curso vai desfazer este campo interessante com todos os principais tópicos

Vamos abordar:

  • Redes neurais artificiais
  • Percepção de várias camadas
  • Tensorflow
  • Keras
  • Redes neurais de a Convolutional
  • Redes neurais de novos de recas
  • Auto-Encoders de diferentes de
  • Redes publicitárias de e de Adversarial de geração de

E não é apenas a teoria! Além do projeto do curso, enquanto você vai ter prática com algumas atividades e exercícios menores

  • Como criar redes neurais para reconhecimento de escrita à mão
  • Como prever o partido político de um político com base em seus votos
  • Como fazer uma análise de sentimento em avaliações de filmes de
  • Sua construção de redes neural profunda e experimentar com diferentes constructing
  • Como criar imagens sintéticas de roupas

Algumas horas é que é para que se faça para se chegar para a velocidade e aprenda no que é a sua de Se você tiver medo de AI, a melhor maneira de desfazer o medo é entendendo como de um de

Conheça seu professor

Teacher Profile Image

Frank Kane

Machine Learning & Big Data, ex-Amazon

Professor

Frank spent 9 years at Amazon and IMDb, developing and managing the technology that automatically delivers product and movie recommendations to hundreds of millions of customers, all the time. Frank holds 17 issued patents in the fields of distributed computing, data mining, and machine learning. In 2012, Frank left to start his own successful company, Sundog Software, which focuses on virtual reality environment technology, and teaching others about big data analysis.

Visualizar o perfil completo

Level: Beginner

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Introdução ao curso: Bem-vindo às redes neurais de aprendizagem profunda com Python. Eu sou seu instrutor, Frank Kane e eu passei nove anos na Amazon Dot com e eu sou Devi Dot com construindo e gerenciando alguns de seus recursos mais conhecidos. Recomendações de produtos. People Who Pot também comprou os melhores vendedores e recomendações de filmes que I. M. D. B. Todos esses recursos exigiam a aplicação de técnicas de aprendizado de máquina a conjuntos de dados do mundo real , e que é o que se trata deste curso. Não preciso te dizer que inteligência artificial, aprendizagem profunda e redes neurais artificiais são as habilidades técnicas mais valiosas que têm. Agora mesmo. Esses campos estão explodindo com o progresso em novas oportunidades. O curso de curta duração abordará a aprendizagem profunda. Do ponto de vista prático aplicado, não vamos ficar atolados em notação e matemática, mas você vai entender os conceitos por trás da IA moderna e ser capaz de aplicar as principais técnicas usando as ferramentas de software mais populares disponíveis. Hoje, vamos começar com uma atualização no Python e na biblioteca Pandas caso você seja novo para eles. Então vamos cobrir conceitos por trás de redes neurais artificiais. Em seguida, você mergulhará diretamente em usar a biblioteca Tensorflow para criar sua primeira rede neural do zero e usará a biblioteca de carícias. Para tornar a prototipagem de redes neurais ainda mais fácil, você entenderá e aplicará Perceptron multinível , redes neurais profundas convolução, todas as redes neurais e redes neurais recorrentes. No final deste curso, no final, um projeto final rápido permitirá que você pratique o que aprendeu. As atividades neste ar curso realmente interessante. Você vai realizar análise de sentimento de reconhecimento de escrita manual e prever os partidos políticos das pessoas usando redes neurais artificiais usando uma quantidade surpreendentemente pequena de código. Se você é um desenvolvedor de software ou programador procurando entender os desenvolvimentos emocionantes em um I nos últimos anos e como tudo funciona, este curso é para você transformar conceitos diretamente em código, usando python sem disparates e sem Fingimento acadêmico. Construir uma rede neural não é tão difícil quanto você pensa. Tudo o que você precisa de alguma experiência prévia em programação ou script para ser bem sucedido neste curso, o formato geral deste curso é introduzir o conceito usando alguns slides e exemplos gráficos. Então vamos olhar para o código python que implementa o conceito em alguns dados reais ou fabricados . Em seguida, você receberá algumas idéias sobre como modificar ou estender o código você mesmo, a fim obter alguma experiência prática com cada conceito. O código neste curso é fornecido como um arquivo de notebook python olho, que significa que, além de conter código python trabalhando riel com o qual você pode experimentar , ele também contém notas sobre cada técnica que você pode manter em torno de referência futura. Se você precisar de um lembrete rápido sobre como uma determinada técnica funciona, você achará que essa é uma maneira fácil de se atualizar sem assistir novamente a um vídeo inteiro. 2. Introdução e pré-requisitos: É difícil pensar em um tópico mais quente do que a aprendizagem profunda, e é sobre isso que vamos falar em profundidade e prática nas próximas horas, para mostrar como funcionam as redes neurais. Redes neurais artificiais, perceptrons, perceptrons multicamadas. E então vamos falar sobre alguns tópicos mais avançados como redes neurais convolucionais e redes neurais recorrentes. Nada disso significa nada para você agora. Mas o ponto final é se você está curioso sobre como aprendizado profundo e as redes neurais artificiais funcionam, você vai entender isso até o final das próximas horas. Então pense nisso como aprendizado profundo para as pessoas com pressa. Vou dar-te profundidade suficiente para seres perigoso. E haverá várias atividades práticas e exercícios para que você possa realmente ter alguma confiança e realmente aplicar essas técnicas e realmente entender como elas funcionam e para que servem. Eu acho que você vai descobrir que há muito mais fácil de usar e você pode ter pensado. Então vamos mergulhar e ver do que se trata. Esta seção do meu curso maior de aprendizado de máquina e ciência de dados também está disponível como um curso autônomo. Então, se você é novo neste curso aqui, você precisará instalar os materiais do curso e um ambiente de desenvolvimento se quiser acompanhar as atividades práticas nesta seção de aprendizagem profunda. Se você é novo e em cima de ponto imediato Sun cão traço, soft.com barra máquina traço aprendizagem ponto HTML. Preste atenção às capitalizações e traços em todos os assuntos. E você deve chegar a esta página aqui. Você encontrará aqui um link útil para os materiais do curso. Basta baixar isso e descompactá-lo. No entanto, você faz isso em sua plataforma e lembre-se onde você colocou. E nosso ambiente de desenvolvimento para este curso será Anaconda, que é um ambiente Scientific Python 3. Você pode instalá-lo a partir daqui é software livre. Certifique-se de instalar o Python 3.7 ou versão mais recente. Depois de instalar o Anaconda, você precisará instalar o pacote TensorFlow. Então, no Windows, você faria isso indo para o prompt Anaconda. Então vá para Anaconda no seu menu inicial e abra o Anaconda Prompt. No macOS ou Linux, você simplesmente iria para um prompt de terminal no e ele já estaria tudo configurado para você. A partir daí, você deve digitar Conda, instalar TensorFlow, e deixar que executar para instalar a estrutura TensorFlow que usaremos dentro do Anaconda. Se você tiver uma GPU NVIDIA, você pode obter melhor desempenho dizendo GPU conectada ao fluido do tensor, mas às vezes isso resulta em problemas de compatibilidade. Então não façam isso a menos que saibam o que estão fazendo, pessoal. Você não precisa instalar pi dot plus para esta seção particular da câmera do curso para fazê-lo, porém, isso também faz parte das instruções de configuração para o curso maior. E você também precisa entender como realmente iniciar os notebooks depois de instalá-los. Então, a partir desse Anaconda Prompt, aquele mesmo prompt Anaconda que falamos anteriormente para realmente lançar um dos cadernos neste curso, você primeiro mudaria seu diretório para onde quer que você instalasse os materiais do curso. Então, para mim, eu colocá-los em C cólon curso ML. E se eu fizer um DIR, você verá que todos os materiais do curso estão aqui. A partir daqui, se eu digitar em Jupiter caderno, Júpiter é soletrado engraçado com um y. Isso deve lançar seu navegador web com um diretório de todos os diferentes cadernos que fazem parte deste curso. Então, quando eu digo neste curso para abrir, por exemplo, eu não sei ponto de fluxo de tensorFlow PY e ser o Notebook TensorFlow, você iria rolar para baixo até esta lista, abrir TensorFlow dot IPO, enB. E para cima deve vir. Quando você terminar de experimentar e brincar com este caderno, você pode simplesmente ir para Arquivo, Fechar e Parar para sair dele. Quando você terminar com Júpiter inteiramente para esta sessão, basta sair e isso vai desligar tudo para você. Certo, então com isso fora do caminho, vamos seguir em frente. Vamos falar sobre alguns dos pré-requisitos matemáticos que você precisa para entender a aprendizagem profunda. Vai ser a parte mais desafiadora do curso, na verdade apenas alguns dos jargões matemáticos com os quais precisamos nos familiarizar. Mas uma vez que tenhamos esses conceitos básicos para baixo, podemos falar sobre eles um pouco mais facilmente. Acho que você vai descobrir que a inteligência artificial em si é realmente um campo muito intuitivo. E uma vez que você obtém esses conceitos básicos para baixo, é muito fácil de falar e muito fácil de compreender. A primeira coisa que queremos falar é descida de gradiente. Esta é basicamente uma técnica de otimização de aprendizado de máquina para tentar encontrar o conjunto mais ideal de parâmetros para um determinado problema. Então, o que estamos plotando aqui, basicamente algum tipo de função de custo, alguma medição do erro do seu sistema de aprendizagem. E isso se aplica ao aprendizado de máquina em geral, certo? Como se você tivesse que ter algum tipo de função que define o quão perto do resultado que você quer, seu modelo produz resultados para, certo? Então estamos sempre fazendo no contexto da aprendizagem supervisionada. Nós estaremos alimentando nosso algoritmo ou modelo, se você preferir, um grupo de parâmetros, algum tipo de maneiras que nós ajustamos o modelo. E precisamos identificar diferentes valores desses parâmetros que produzem os melhores resultados. Então a idéia com descida de gradiente é que você apenas escolher algum ponto aleatoriamente e cada um desses pontos representa algum conjunto de parâmetros. Seu modelo, talvez sejam os vários parâmetros para algum modelo que já falamos antes, ou talvez sejam os pesos exatos dentro de sua rede neural, seja lá o que for, tente alguns parâmetros para começar. E então mediremos o que quer que o ar produza no nosso sistema. E então o que fazemos é seguir em frente na curva aqui, certo? Então podemos tentar um conjunto diferente de parâmetros aqui. Novamente, apenas como se mover em uma determinada direção com diferentes valores de parâmetro. E, em seguida, medimos o erro que obtemos a partir disso. E neste caso, nós realmente alcançamos menos erros ao tentar este novo conjunto de parâmetros. Então nós dizemos, ok, eu acho que estamos indo na direção certa aqui. Vamos mudá-los ainda mais da mesma maneira. E continuamos fazendo isso em diferentes etapas até finalmente chegarmos ao fundo de uma curva aqui. E nosso erro começa a aumentar depois desse ponto. Então, nesse ponto, saberemos que realmente atingimos o fundo deste gradiente. Então você entende a natureza do termo aqui, descida de gradiente. Basicamente estamos escolhendo algum ponto aleatoriamente com um determinado conjunto de parâmetros que medimos o erro de quatro. E continuamos empurrando esses parâmetros em uma determinada direção até que o erro se minimize e comece a voltar para cima algum outro valor, ok, e é assim que a descida de gradiente funciona em poucas palavras, não indo entrar em toda a matemática hard-core dele. Tudo O conceito é o que é importante aqui, porque a descida de gradiente é como treinamos nossas redes neurais para encontrar uma solução ideal. Agora você pode ver que há algumas áreas de melhoria aqui para esta idéia. Primeiro de tudo, você pode realmente pensar nisso como uma espécie de bola rolando ladeira abaixo. Então, sobre a otimização que vamos falar mais tarde é usar o conceito de um impulso. Você pode realmente ter essa bola ganhar velocidade enquanto ela desce a colina aqui, se você quiser. E abrandar como ele atinge o fundo e, você sabe, meio que parte de baixo lá fora. Essa é uma maneira de convergir mais rapidamente quando você está fazendo as coisas, eu posso fazer o treinamento real de suas redes neurais ainda mais rápido. Outra coisa que vale a pena falar é o conceito de mínimos locais. Então, e se eu escolhesse um ponto aleatoriamente e acabasse aqui nesta curva, eu poderia acabar me estabelecendo nesse mínimo aqui, que não é realmente o ponto do menor erro. O ponto do menor erro neste gráfico está aqui. Isso é um problema. Quero dizer, isso é um problema geral em gradiente, descida de gradiente. Como você se certifica de que você não fica preso no que é chamado de minima local? Porque se você apenas olhar para esta parte do gráfico que parece ser a solução ideal. E se acontecer de eu começar de novo aqui, é aí que eu vou ficar preso. Agora, existem várias maneiras de lidar com esse problema. Obviamente, você pode começar de locais diferentes, então tente evitar esse tipo de coisa. Mas, em termos práticos, acontece que os mínimos locais não são muito importantes quando se trata de treinar redes neurais. É que não acontece com tanta frequência. Você não acaba com formas como esta na prática. Assim, podemos nos safar sem nos preocuparmos tanto com isso. Isso é muito importante. coisa boa porque por um longo tempo, as pessoas acreditam que a IA seria limitada por este efeito mínimo local. E, na prática, não é tão grande coisa. Outro conceito que precisamos para se familiarizar com algo chamado auto diff. E nós realmente não precisamos ir para a matemática hardcore de como auto def funciona. Só preciso saber o que é e por que é importante. Então, quando você está fazendo descida de gradiente, alguma forma você precisa saber qual é o gradiente, certo? Então precisamos medir qual é a inclinação que estamos tomando ao longo de nossa função de custo, nossa medição de erro, ou pode ser um erro padrão médio para tudo o que sabemos. E para fazer isso matematicamente, você precisa entrar em cálculo, certo? Se você está tentando encontrar a inclinação de uma curva e você está lidando com vários parâmetros e estamos falando de derivativos parciais, certo? Os primeiros derivados parciais a descobrir o declive em que estamos indo. Agora, verifica-se que isso é muito matematicamente intensivo e ineficiente para os computadores fazerem. Então, apenas fazendo a aproximação da força bruta para a descida de gradiente. Isso fica muito caro muito rapidamente. Auto diff é uma técnica para acelerar isso. Então, especificamente, usamos algo chamado “diff automática de modo reverso”. E o que você precisa saber é que ele pode calcular todas as derivadas parciais que você precisa apenas atravessando seu gráfico no número de saídas mais uma que você tem. E isso funciona muito bem em redes neurais. Porque em uma rede neural você tende a ter um neurônio artificial que tem muitas entradas, mas provavelmente apenas uma saída ou muito poucas saídas em comparação com as entradas. Então isso acaba por ser um bom truque de cálculo. É complicado. Pode ver como funciona. É uma coisa muito hardcore, mas funciona e isso é o que é importante. E o que também é importante é que é o que a biblioteca do TensorFlow usa sob o capô para implementar sua descida de gradiente. Então, novamente, você nunca vai ter que realmente implementar descida gradiente a partir do zero ou implementar zero automático diferente. Estes são todos assados nas bibliotecas que estamos usando. Bibliotecas como o TensorFlow para fazer aprendizagem profunda. Mas são termos que jogamos muito. Por isso, é importante que pelo menos saibas o que são e porque são importantes. Então, apenas para fazer backup um pouco, descida de gradiente é a técnica que estamos usando para encontrar os mínimos locais do erro de que estamos tentando otimizar para determinado conjunto de parâmetros. E auto diff é uma maneira de acelerar esse processo. Então não temos que fazer tanto matemática ou tanto cálculo para realmente medir esse gradiente da descida de gradiente. Uma das coisas que precisamos falar é sobre Softmax. Novamente, a matemática é tão complicada aqui. Mas, novamente, o que é realmente importante é entender o que é e para que serve. Então, basicamente, quando você tem o resultado final de uma rede neural, você acaba com um monte do que chamamos de pesos que saem da rede neural no final. Então, como fazemos uso disso? Como podemos fazer uso prático da saída de nossas redes neurais? Bem, é aí que entra a Softmax. Basicamente, converte cada um dos pesos finais que saem de sua rede neural em uma probabilidade. Então, se você está tentando classificar algo em sua rede neural, como, por exemplo, decidir se uma imagem é uma imagem de um rosto ou uma imagem de um cão ou uma imagem de um sinal de parada. Você pode usar softmax no final para converter as saídas finais dos neurônios em probabilidades para cada classe, ok? E então você pode simplesmente escolher a classe, ela tem a maior probabilidade. Então, é apenas uma maneira de normalizar as coisas, se quiserem, em uma faixa comparável. E de tal forma que se você realmente escolher o valor mais alto da função softmax das várias saídas, você acaba com a melhor escolha de classificação no final do dia. Então é apenas uma maneira de converter a saída final de sua rede neural para uma resposta real para um problema de classificação. Então, novamente, você pode ter o exemplo de uma rede neural que está tentando dirigir seu carro para você. E ele precisa identificar imagens de sinais de parada ou sinais de rendimento ou semáforos. Você pode usar Softmax no final de uma rede neural que tirará sua imagem e classificada como um desses tipos senos, certo? Então, novamente, apenas para recapitular, algoritmo de descida de gradiente para minimizar erros em várias etapas. Basicamente, começamos em algum conjunto aleatório de parâmetros, medir o erro, mover esses parâmetros em uma determinada direção, ver se isso resulta em mais erro ou menos erro. E apenas tente se mover na direção de minimizar o erro até que encontremos o fundo real da curva lá, onde temos um conjunto de parâmetros que minimiza o erro do que quer que seja que você está tentando fazer. Auto diff é apenas um truque de cálculo para tornar a descida de gradiente mais rápida. Isso torna mais fácil encontrar os gradientes na descida de gradiente apenas usando alguns truques de cálculo. E Softmax é apenas algo que aplicamos em cima de nossa rede neural no final para converter a saída final de nossa rede neural para uma escolha real de classificação, dado vários tipos de classificação para escolher. Está bem? Então esses são os termos matemáticos básicos ou termos algorítmicos que você precisa entender para falar sobre redes neurais artificiais. Então, com isso sob o nosso cinto, vamos falar sobre redes neurais artificiais a seguir. 3. A história das redes neurais artificiais: Vamos mergulhar em redes neurais artificiais e como eles funcionam em um alto nível mais tarde vai realmente sujar nossas mãos e realmente criar algumas. Mas primeiro precisamos entender como eles trabalham de onde vieram. Então é uma coisa muito legal. Quero dizer, todo esse campo de inteligência artificial é baseado em uma compreensão de como nossos próprios cérebros funcionam. Então, você sabe, ao longo de milhões de anos de evolução, natureza veio com uma maneira de nos fazer pensar. E se fizermos engenharia reversa da maneira como nossos cérebros funcionam, podemos obter algumas percepções sobre como fazer máquinas que pensam assim dentro de seu cérebro. Especificamente seu córtex cerebral, que é onde eu moro, você está pensando que acontece. Você tem um monte de neurônios, células nervosas individuais do ar, e eles estão conectados uns aos outros via Exxon e dendritos. Você pode pensar nisso como conexões. Você sabe, fios, se você quiser, que conectam diferentes sotaques juntos. Agora, um neurônio individual disparará ou enviará um sinal para todos os neurônios que estão conectados quando suficiente de sua entrada sinaliza ar ativado para que o nível de neurônio individual seja um mecanismo muito simples. Você só tem essa cela. Isso é neurônio que tem um monte de sinais de entrada entrando nele. E se um número suficiente desses sinais de entrada atingir um certo limiar, ele, por sua vez, disparará um conjunto de sinais para os neurônios que, por sua vez, está conectado a uma ondulação. Mas quando você começa a ter muitos, muitos, muitos desses neurônios conectados de muitas maneiras diferentes com diferentes pontos fortes entre cada conexão, as coisas ficam muito complicadas. Então esta é uma espécie de definição de comportamento emergente. Você tem um conceito muito simples, modelo muito simples. Mas quando você empilhar um número suficiente deles juntos, você pode criar um comportamento muito complexo no final do dia, e isso pode produzir um comportamento de aprendizagem. Isto é, na verdade, isto funciona e não só funciona no seu cérebro, mas também nos nossos computadores. Agora pense na escala do seu cérebro. Você tem bilhões de neurônios, cada um deles com milhares de conexões, e isso é o que é preciso para criar uma mente humana. E esta é uma escala que você sabe que ainda podemos sonhar no campo da aprendizagem profunda e inteligência artificial. Mas é o mesmo conceito básico. Você só tem um monte de neurônios com um monte de conexões que individualmente se comportam de forma muito simples. Mas uma vez que você começa o suficiente deles juntos com fios complexos e maneiras suficientes você pode realmente criar pensamentos muito complexos, se você quiser, e até mesmo consciência. A plasticidade do seu cérebro está basicamente ajustando para onde essas conexões vão e quão forte cada uma é, e é aí que toda a magia acontece, se preferir. Além disso, analisamos mais profundamente a biologia do seu cérebro. Você pode ver que dentro de seu córtex, os neurônios parecem estar dispostos em pilhas ou colunas corticais que processam informações em paralelo. Assim, por exemplo, em seu córtex visual, diferentes áreas do que você vê podem estar sendo processadas em paralelo por diferentes colunas ou colunas corticais de neurônios. Cada uma dessas colunas é, por sua vez, feita dessas muitas colunas de cerca de 100 neurônios por muitas colunas que o ar então organizadas nessas hiper colunas maiores e dentro de seu córtex há cerca de 100 milhões dessas muitas colunas, então, novamente, eles apenas somam rapidamente. Coincidentemente, este é um dedo de arquitetura semelhante. Coincidentemente, Como funciona a placa de vídeo, a placa de vídeo três d no computador. Ele tem um monte de várias unidades de processamento simples, muito pequenas que são responsáveis pela computação. Como pequenos grupos de pixels em sua tela são computados no final do dia, e acontece que essa é uma arquitetura muito útil para imitar como seu cérebro funciona. Então é uma espécie de feliz acidente que a pesquisa que aconteceu para fazer jogos de vídeo se comportar muito rapidamente ou jogar Call of Duty ou o que quer que seja que você gosta de jogar se presta à mesma tecnologia que tornou possível a inteligência artificial em um grande escala e a baixo custo. As mesmas placas de vídeo que você está usando para jogar seus videogames também podem ser usadas para realizar aprendizado profundo e criar redes neurais artificiais. Pense sobre o quão melhor seria se nós realmente fez chips que foram propósito construído especificamente para uma simulação de redes neurais artificiais. Bem, acontece que algumas pessoas estão projetando naves assim agora. Quando você assistir isso, eles podem até ser uma realidade. Acho que o Google está trabalhando em um enquanto falamos, então em um ponto alguém disse, “ Ei, a maneira como pensamos que os neurônios funcionam é bem simples. Na verdade, não seria muito difícil replicar isso nós mesmos e talvez tentar construir nosso próprio cérebro. E essa idéia remonta a 1943 pessoas propuseram uma arquitetura muito simples onde se você tem um neurônio artificial, talvez você possa configurar uma arquitetura onde esse neurônio artificial dispara se mais do que um certo número de suas conexões de entrada estão ativas e quando eles pensaram sobre isso mais profundamente em um contexto de ciência da computação, as pessoas percebem que você pode realmente criar expressões lógicas expressões booleanas fazendo isso. Então, dependendo do número de conexões provenientes de cada neurônio de entrada e se cada conexão ativa ou suprime a honra, e você pode realmente fazer ambos que funcionam dessa maneira na natureza também. Você pode fazer diferentes operações lógicas, então este diagrama específico está implementando uma operação ou. Então imagine que nosso limiar para o nosso neurônio era que se você tem duas ou mais entradas ativas , você vai por sua vez disparar um sinal. Neste conjunto aqui, temos duas conexões com o neurônio A e nos voltamos para conexões vindas do neurônio B. Se qualquer um desses neurônios, produzir e inserir sinal que realmente causará nem no mar fogo. Então você pode ver que criamos um relacionamento ou aqui onde, se nem em um ou neurônio B alimenta neurônio, veja os sinais de entrada que farão com que eles sejam retirados de um fogo e produzam uma saída verdadeira. Então nós implementamos aqui a Operação Booleana C é igual a A ou B, apenas usando a mesma fiação que acontece dentro de seu próprio cérebro, e eu não vou entrar nos detalhes, mas também é possível implementar e não em meios semelhantes. Então começamos a construir sobre essa ideia. Criamos algo chamado Unidade Limiar Linear, ou LTU, para abreviar em 1957. Isso apenas construído sobre as coisas atribuindo pesos a essas entradas. Então, em vez de apenas ligar e desligar interruptor é, agora temos a capacidade do conceito de ter esperas em cada uma dessas entradas, bem como que você pode sintonizar mais e novamente. Isto está a trabalhar mais para a nossa compreensão da biologia. Diferentes conexões entre diferentes neurônios podem ter diferentes pontos fortes, e podemos modelar esses pontos fortes em termos desses pesos em cada entrada que entra em nosso neurônio artificial. Nós também vamos ter a saída ser dada por uma função passo. Então, isso é semelhante em espírito a como estávamos usando antes. Mas em vez de dizer que vamos disparar se um certo número de entradas estão ativas, bem, não há mais conceito de ativo, não são ativos. Há pesos chegando. Esses pesos podem ser positivos ou negativos. Então, diremos que se alguns desses pesos forem maiores que zero, iremos em frente e atiraremos por conta própria da lição ou das lições. Zero. Não vamos fazer nada. Então, apenas uma ligeira adaptação ao conceito de um neurônio artificial aqui onde estamos introduzindo pesos em vez de apenas um simples botão binário ligar e desligar é então vamos construir sobre isso ainda mais e vamos criar algo chamado Perceptron. E um perceptron é apenas uma camada de múltiplas unidades lineares. Agora estamos começando a entrar em coisas que podem realmente aprender. Certo, então, reforçando os pesos entre estes. O uso que produziu o comportamento que queremos, podemos criar um sistema que aprende ao longo do tempo como produzir a saída desejada. E, novamente, isso também está trabalhando mais para nossa crescente compreensão de como o cérebro funciona dentro do campo da neurociência. Há um ditado que diz as células que disparam juntas arame juntas. E isso é meio que falar com o mecanismo de aprendizagem acontecendo em nosso perceptron artificial aqui, onde se tivermos pesos que estão levando ao resultado desejado que queremos, você sabe, eles poderiam pensar naqueles pesa novamente como pontos fortes de conexões entre neurônios. Podemos reforçar esses pesos ao longo do tempo e recompensar as conexões que produziram o comportamento que queremos. Ok, então você vê, aqui temos nossas entradas entrando em pesos, assim como fizemos em It anos antes. Mas agora temos vários grupos de uso juntos em uma camada, e cada uma dessas entradas é conectada a cada neurônio individual nessa camada, ok? E nós, em seguida, aplicar a função passo cada um. Talvez isso se aplique a, você sabe, classificações. Talvez isso seja um perceptron que tenta classificar uma imagem em uma de três coisas ou algo assim. Outra coisa que introduzimos aqui é algo chamado de nêutron viés lá à direita. E isso é apenas algo para fazer a matemática funcionar. Às vezes precisa adicionar um pouco fixo, valor constante que pode ser outra coisa que você pode otimizar para nós. Bem, então isso é um perceptron. Pegamos nossa rede artificial. Mova isso para uma unidade de limiar linear. E agora colocamos várias unidades lineares de limiar juntas em uma camada para criar um perceptron, e já temos um sistema que pode realmente aprender. Você sabe, você pode realmente tentar otimizar esses pesos, e você pode ver que há muito desse ponto se você tem cada uma dessas entradas indo para cada uma das LTU em sua camada, eles se somam rapidamente, e é daí que vem a complexidade da aprendizagem profunda. Vamos dar um passo adiante e teremos um perceptron multicamada. É anunciado uma única camada de perceptron de seu uso. Nós vamos ter mais de um, e nós realmente temos agora uma camada escondida no meio lá, então você pode ver que são entradas de ar entrando em uma camada na parte inferior. A saída começou camada no topo, e no meio temos esta camada oculta de lt adicional usado em suas unidades limite que podem executar o que chamamos de aprendizagem profunda. Então aqui já temos o que chamaríamos hoje de uma rede neural profunda. Agora há desafios de treinar essas coisas porque elas são mais complexas. Mas falaremos sobre isso mais tarde. Isso pode ser feito. E mais uma vez a coisa que o dedo realmente aprecia aqui é esta quantas conexões existem? Então, mesmo que tenhamos apenas um punhado de neurônios artificiais aqui, você pode ver que há muitas conexões entre eles, e há muitas oportunidades para otimizar os pesos entre cada conexão. Ok, então é assim que um Perceptron multi-camada funciona. Você pode ver isso de novo. Temos comportamento emergente aqui, e unidade de limiar linear individual é um conceito bastante simples. Mas quando você colocá-los juntos nessas camadas e você tem várias camadas todas conectadas juntas, você pode obter um comportamento muito complexo porque há muitas possibilidades diferentes para todos os pesos entre todos aqueles diferentes conexões. Finalmente, vamos falar sobre uma rede neural profunda moderna, e realmente, isso é tudo o que há para ela. Sabes, o resto deste curso vamos falar de formas de implementar algo assim. OK, então tudo o que fizemos aqui é que substituímos essa função de passo por algo melhor. Falaremos sobre funções alternativas de ativação. Este aqui está ilustrando algo chamado rela você que falaremos mais tarde. O ponto-chave ali. Aqueles que uma função passo tem um monte de propriedades matemáticas desagradáveis, especialmente quando você está tentando toe descobrir suas encostas em seus derivados. Então, acontece que outras formas funcionam melhor e permitem que você converja mais rapidamente quando você está tentando treinar. Uma rede neural também aplicará soft max à saída, sobre a qual falamos na palestra anterior. Isso é apenas uma maneira de se converter. As saídas finais da nossa rede neural são uma rede neural profunda em probabilidades de onde podemos escolher a desclassificação com a maior probabilidade. E também treinaremos essa rede neural usando descida gananciosa ou alguma variação dela. Existem vários deles para escolher. Falaremos sobre isso com mais detalhes também. Talvez isso use auto diff, que também falamos anteriormente para realmente tornar esse treinamento mais eficiente. Então é basicamente isso. Sabe, nos últimos cinco minutos ou mais que estivemos conversando, dei-lhe toda a história, praticamente de redes neurais profundas em aprendizagem profunda. E esses são os principais conceitos. Não é tão complicado, certo? Essa é realmente a beleza disso. É um comportamento emergente. Você tem blocos de construção muito simples. Mas quando você coloca esses blocos de construção juntos de maneiras interessantes, muito complexas e francamente misteriosas, coisas podem acontecer. Então eu fico muito empolgado com essas coisas. Vamos mergulhar em mais detalhes sobre como ele realmente funciona a seguir. 4. : Agora que entendemos os conceitos de redes neurais artificiais e aprendizagem profunda, vamos mexer com isso. É surpreendentemente fácil de fazer. As pessoas por trás do Tensorflow no Google criaram um pequeno site chamado Playground dot tensor fluido consciente que nos permite experimentar com a criação de nossas próprias redes neurais e você não escreve uma linha de código para fazê-lo. Então, é uma ótima maneira de obter uma espécie de, ah, mãos sobre e sentir como eles funcionam. Então vamos mergulhar então vá para o playground dot tensorflow dot org e você deve ver uma tela como esta que você pode seguir por aqui ou apenas me ver fazer isso. Mas eu definitivamente encorajo você a brincar com isso você mesmo e ter uma espécie de, ah, mãos intuitivas na sensação de como a aprendizagem funciona profundamente. Esta é uma coisa muito poderosa se você pode entender o que está acontecendo nesta página da Web. Então o que estamos tentando fazer aqui é classificar um monte de pontos apenas com base em sua localização nesta imagem de dois D. Então este é o nosso treinamento, dizem dados, se quiserem. Temos um monte de pontos aqui e os do meio são classificados é azul, e os do lado de fora são classificados como laranja. Então nosso objetivo é criar uma rede neural que, sem conhecimento prévio, possa realmente descobrir se um determinado ponto deve ser azul ou laranja e prever com sucesso quais classificações devem ser. Então pense nisso são nossos dados de treinamento. Sabemos antecipadamente quais são as classificações corretas para cada um desses pontos. E vamos usar essa informação para treinar nossa rede neural para que saibamos que as coisas no meio devem ser azuis, e as coisas do lado de fora devem ser laranja. Agora, aqui temos um diagrama da própria rede neural, e podemos brincar com isso. Podemos manipulá-lo. Podemos adicionar camadas para tirar camadas. ADM ou neurônios. Duas camadas. O que quer que você queira fazer, vamos rever o que está acontecendo aqui. Então, primeiro de tudo, estamos selecionando o conjunto de dados com o qual queremos jogar onde ele está começando com esse padrão, um que é chamado Circle the Input Air. Simplesmente, o X e Y coordenam a posição vertical e horizontal de cada ponto de dados, assim como nossa rede neural recebe um ponto para classificar. Tudo o que tem que trabalhar são esses dois valores, sua posição horizontal e sua posição vertical. E o início é igualmente ponderado sendo horizontal uma vertical, para que possamos definir a posição de qualquer um desses pontos em termos de seu resultado e posição vertical. Por exemplo, este ponto aqui teria uma posição horizontal de um negativo em uma posição vertical de cerca de cinco negativos, e então nós alimentá-lo em nossa rede. Você pode ver que essas notas de entrada têm conexões para cada um desses quatro neurônios e são camada oculta. E podemos manipular os pesos entre cada uma dessas conexões para criar o aprendizado que queremos. Aqueles, por sua vez, se alimentam em dois neurônios de saída aqui que acabarão por decidir quais classificações queremos no final do dia. Então tenha em mente, este é um problema de classificação Byeon Eri. Ou é azul ou laranja, então, no final do dia, só precisamos de um sinal único, realmente, e é isso que vem nesta saída aqui. Vamos em frente, tocar no play e ver o que acontece. O que vai fazer isso começou um monte de iterações onde ele aprende com esses dados de treinamento. Então vamos continuar alimentando a entrada deste conjunto de dados de treinamento. E à medida que ele gera através dele, você começará a reforçar as conexões que levam às classificações corretas através de Grady no centro. Algum mecanismo semelhante, certo? E se fizermos isso vezes suficientes, deve convergir para uma rede neural capaz de classificar essas coisas de forma confiável . Vamos jogar. Apenas assista em ação. Então fique de olho nessa imagem à direita. Tudo bem, você pode ver que nós já convergimos em uma solução. Eu posso ir em frente e pausar isso agora e coisas muito legais para que você possa ver que ele criou com sucesso este padrão onde as coisas que se encaixam nesta área média aqui são classificadas como azul , e as coisas do lado de fora são classificadas como laranja, então podemos mergulhar no que realmente aconteceu aqui. Essas espessuras de todas essas conexões representam seus pesos para que você possa ver os pesos individuais que estão conectados entre cada um desses neurônios. Começamos aqui, você vê esse ar mais ou menos igualmente ponderado. Uh, bem, não exatamente. Igualmente, alguns deles são meio fracos. Mas o que? Pelo menos dois é esse comportamento no meio? Então começamos com coordenadas X e Y igualmente ponderadas. Aqueles vão para esta camada aqui. Então, por exemplo, esta camada escondida aqui este neurônio está dizendo que eu quero esperar as coisas um pouco mais pesadas neste canto, ok? E coisas que são como no canto inferior esquerdo, nem tanto. E então este outro está escolhendo coisas em cima e em baixo. Este é um pouco mais diagonal para o fundo, certo? E este é mesmo mawr inferior direito pesado. E se você combinar essas coisas juntos, nós subimos com essas camadas de saída que se pareciam com isso. Ok? E assim nós temos Nós acabamos com essas duas coisas blobby onde nós estamos tipo de dar um impulso para as coisas à direita e dar um impulso para as coisas que estão dentro de uma espécie de isso. Ah, mais área circular blobby. E então combinamos esses juntos e acabamos com a nossa saída final. Isso se parece com isso. Agora, isso pode parecer diferente de corrida para corrida. Você sabe, há algum aleatório, alguma aleatoriedade em como tudo isso é inicializado. Será que realmente precisamos de uma rede neural profunda para fazer isso, embora uma coisa de otimização é remover camadas e ver se você se safa com isso. Talvez nem precisemos de aprendizagem profunda. Quero dizer, sério, isto é uma coisa simples. Sabe, as coisas no meio são azuis. As coisas do lado de fora são laranja. Vamos em frente e remover um desses neurônios da camada de saída novamente. Tudo o que precisamos é uma compra de um resultado de qualquer maneira. Ainda pode funcionar? Ele faz. Na verdade, é apenas rápido. Então, eu preciso mesmo dessa camada? Vamos em frente e remover a camada final ainda funciona, certo? Então, para este problema muito básico para fora mesmo necessidade de aprendizagem profunda. Tudo o que tenho aqui é uma única camada. Então isso é apenas Não é mesmo um perceptron multicamada. É só um perceptron. Preciso de neurônios lá dentro? Bem, eu acho que talvez eu saiba, mas este aqui não está fazendo muito certo. Tudo o que está fazendo é basicamente fazê-lo passou, e as entradas que entram nele de foram ponderadas para praticamente nada. Então é melhor eu nem precisar dessa. Vamos nos livrar dele. Ainda funciona. Isso não é legal? Quero dizer, pense nisso. Nós só temos três neurônios artificiais, e isso é tudo o que é preciso para fazer esse problema. Quero dizer, compare isso com os bilhões de neurônios que existem dentro de sua cabeça. Agora provavelmente não podemos escapar com menos do que isso. Vamos em frente e tentar voltar para os neurônios e ver o que acontece. Sim, isso não vai acontecer, certo? Então, para esse problema em particular, tudo que você precisa é de três neurônios para não cortá-lo. Vamos brincar mais um pouco. Vamos tentar um conjunto de dados mais desafiador. Ok, então aqui está um padrão espiral, e você pode dizer que isso vai ser mais difícil porque nós não podemos apenas dizer coisas neste canto vai ser esta, uh, esta classificação, como se precisássemos de uma maneira muito mais fina de, como identificar essas espirais individuais. E novamente vamos ver se poderíamos treinar e Earl Network para descobrir essa regra por conta própria. E, bem, obviamente, os sintonizadores vão cortá-lo. Vamos voltar para quatro. Vamos ver se é o suficiente. Aposto que não é. Você pode ver que está tentando, mas está realmente lutando. Podemos deixar isso funcionar por um tempo, e você pode ver que está começando a chegar lá. Você sabe, as áreas azuis estão convergindo para algumas áreas azuis, e está realmente tentando duro, mas não é apenas neurônios suficientes para fazer este fora. Vamos em frente e adicionar outra camada. Vamos ver se isso ajuda. Você pode ver que está fazendo coisas mais complicadas agora que tem mais neurônios para trabalhar. Mas ainda não consigo chegar onde precisa estar. Vamos adicionar mais alguns neurônios a cada camada. De um modo geral, você pode adicionar mais neurônios a uma camada. Adicione mais camadas. Vai produzir os mesmos resultados. Vai produzir os mesmos resultados. Mas pode afetar a velocidade em que converge, dependendo da abordagem a tomar. Simplesmente fascinante. Assistindo este trabalho, não é? Tudo bem, este ficou preso. Ainda não consegue tirá-lo. Vamos adicionar mais uma camada. Este é, na verdade, um padrão muito comum. Você vai ver você começar com um monte de camadas no início e eles tipo de como reduzi-los para baixo como você vai. OK, então nós vamos para uma camada inicial de entrada de seis neurônios para uma camada oculta de quatro neurônios e, em seguida, uma camada de dois neurônios que acabará produzindo uma saída binária no final. Bem, acho que está chegando lá. Aqui, Rio. Uau. Ok, então, tecnicamente, ainda é como se refinar, mas meio que fez certo. Quero dizer, agora isto é o que chamamos de “adequação” até certo ponto, sabe? Quero dizer, obviamente tem. Ele é como o ar cortando por aqui, e isso não faz parte do padrão que estamos procurando. Mas ainda está indo . Aquelas tendrils o ar meio que está ficando mais fraco e mais fraco. Então, você sabe, ele ainda não tem neurônios suficientes para fazer exatamente o que faríamos intuitivamente. Mas ainda assim, quero dizer, este é um problema de classificação bastante complicado. Descobriu e talvez se encaixe um pouco mais. Mas eu descobri, e tudo o que temos é o quê, 12 neurônios aqui? Quero dizer, isso é loucura agora. Outra coisa que eu quero falar aqui, também. é que ele meio que ilustra o fato de que uma vez que você entra em várias camadas, torna-se muito difícil entender intuitivamente o que está acontecendo dentro da rede neural. Isso fica meio assustador, sabe? Quero dizer, o que essa forma realmente significa? Quero dizer, uma vez que você tem neurônios suficientes, é tipo um dedo duro dentro de sua própria cabeça. O que os padrões de todos realmente representam. Quero dizer, a primeira camada é bem simples. Você sabe, é basicamente dividir a imagem em diferentes seções. Mas à medida que você entra nessas camadas escondidas, as coisas começam a ficar um pouco estranhas à medida que se combinam. Vamos em frente e adicionar mais um caminho. Eu deveria ter dito mais dois para esta camada de saída e adicionar mais uma camada no final. Vamos ver se isso ajuda as coisas a convergir um pouco mais rápido. Sim, tudo bem. Comece a lutar um pouco. Veja isso como se tivesse uma forma espiral acontecendo aqui agora. Então, com esses neurônios extras, foi capaz de fazer algo mais interessante. Ainda temos isto. Ah, este pequeno pico aqui que está fazendo a coisa errada, e parece que não pode pensar que sua maneira de sair desse deu mais alguns no Irã, embora possa descobrir. Estes também estão mal classificados. Mas eu acho interessante que ele realmente criou um padrão espiral aqui por conta própria. Assim, com mais alguns neurônios ou mais uma camada, você poderia realmente criar uma solução ainda melhor. Mas deixarei isso como um exercício para você. Agora, você sabe, para brincar com isso, eu realmente encorajo você a apenas mexer em torno dele e ver que tipo de resultados você pode obter. Este padrão espiral é, em particular, um problema interessante. Apenas explique alguns dos outros parâmetros aqui. Estamos fazendo uma classificação aqui. É onde vamos fazer ao longo desta secção. A função de ativação que falamos sobre não usar uma função de passo e usar outra coisa , alguns outros que são populares Rally foi realmente muito popular agora da função de realização que ainda não falamos. A taxa de aprendizagem é basicamente o tamanho do passo no ingrediente Descendentes que estamos fazendo, então você pode ajustar isso se você quiser, bem, vamos ver se realmente bem realmente faz a diferença que eu esperaria para apenas, você sabe, afetar a velocidade. Oh, meu Deus. Olhe para isso. Isso é muito perto do que queremos, certo? Quero dizer, há além deste pequeno pico aqui que não está realmente lá um pouco de excesso de encaixe indo lá. Mas nós basicamente criamos essa forma espiral apenas a partir deste punhado de neurônios. Scott, eu poderia fazer isso o dia todo, pessoal. E eu espero que você, você sabe, apenas jogar fora isso é muito divertido, e isso te dá uma compreensão tão concreta do que está acontecendo sob o capô. Quero dizer, olhe para esta camada escondida aqui. Vamos onde essas formas espirais estavam começando a emergir e se unindo. E quando você pensa sobre o fato de que seu cérebro funciona da mesma maneira, é literalmente meu empregador de qualquer maneira. Brincar com isso. É um ótimo exercício e espero que você se divirta com ele. 5. Detalhes de aprendizagem em profunda: Tudo bem. Eu sei que você provavelmente está ansioso para mergulhar em algum código agora, mas há um pouco mais de teoria que precisamos cobrir com aprendizagem profunda. Eu quero falar um pouco sobre exatamente como eles são treinados e algumas dicas para ajustá-los agora que você teve um pouco de experiência com eles usando o playground Tensorflow . Então, como você treina um Perceptron multicamada? Bem, está usando uma técnica chamada retropropagação. Não é tão complicado, na verdade. Em um nível conceitual, tudo o que estamos fazendo é Grady em dissidência como falamos antes, usando aquele truque matemático de auto def modo reverso. Para que isso aconteça de forma eficiente para cada etapa de treinamento, nós apenas calculamos o erro de saída para os pesos que temos atualmente em vigor para cada conexão entre cada neurônio artificial. E então foi aqui que a propagação traseira aconteceu. Como há várias camadas para lidar, temos que pegar esse erro que é computado no final da nossa rede neural e propagado de volta para baixo na outra direção, empurrá-lo de volta através da rede neural para trás, Ok, E assim podemos distribuir esse erro de volta através de cada conexão todo o caminho de volta para as entradas usando os pesos que estamos usando atualmente nesta etapa de treinamento. Ok, então um conceito bem simples. Só pegamos o ar. Usamos os pesos que estamos usando atualmente em nossa rede neural para propagar nosso erro para conexões individuais. E então podemos usar essa informação para ajustar os pesos através de Grady e dissidência para realmente tentar chegar a um valor melhor na próxima passagem na próxima época, se você quiser, de nossos passes de treinamento. Então está tudo de volta. Propagação é executarmos um conjunto de pesos, medimos o erro, propagamos novamente esse erro. Usar isso espera as coisas em que ele está, ótimo, enviado. Tente de novo e continuamos fazendo isso uma e outra vez. Até o nosso sistema convergir. Devíamos falar um pouco sobre a função de ativação. Então, em nosso exercício anterior, usando o playground Tensorflow, estávamos usando a função de ativação tangente hiperbólica por padrão. E então mudamos para algo chamado Rela, e vimos que os resultados eram um pouco melhores. O que estava acontecendo lá? Bem, a função de ativação é apenas a função que determina a saída de um neurônio, dada a algumas de suas entradas. Então você pega a soma de todos os pesos das entradas que entram em um neurônio. A função de ativação é o que leva que alguns e o transforma em um sinal de saída. Agora, como falamos sobre caminho de volta na palestra um usando uma função passo é o que as pessoas fizeram originalmente. Mas isso realmente não funciona com Grady e dissidência porque não há nenhum Grady int lá. Se é uma função de passo, não há inclinação. Ou está ligado ou desligado. Sabe, é direto ou para cima e para baixo. Não há nenhum derivado útil lá. É por isso que funções alternativas funcionam um pouco melhor na prática. Existem algumas outras chamadas de Função Logística, a função tangente hiperbólica que produz mais de uma curva curva. Se você pensar sobre como é uma tangente hiperbólica, é ah mais de Ah, ele não tem aquele corte afiado fora de seu zero a origem, então isso pode funcionar muito bem. Há também algo chamado Unidade Linear Exponencial, que também é um pouco mais curvilínea. Mas o que acabamos usando, , foi o Rallo. Isso significa unidade linear rectificada. E isso é o que este gráfico aqui está mostrando basicamente zero se for menor que zero, e se for maior que zero, ele sobe em um ângulo de 45 graus. Então é só, você sabe, conseguindo o real. Algumas das entradas aguardam como sua saída se essa saída for maior do que zero. Ok, então a vantagem que Rela tem é que é muito simples, muito fácil e muito rápido de calcular. Portanto, se você está preocupado em convergir rapidamente e seu recurso de computação é, rela é realmente uma boa escolha. Agora há variantes de rela que funcionam ainda melhor se você não se importa tanto com eficiência quando é chamado de rela vazamento. E tudo o que é é, em vez de ser plana esquerda de zero, ele realmente tem um pouco de uma inclinação lá também, uma inclinação muito pequena e novamente, isso é para fins matemáticos ter uma derivada significativa real lá para trabalhar com , para que possa proporcionar uma convergência ainda melhor. Também é algo chamado rela barulhenta, que também pode ajudar na convergência. Mas, ah, esses dias gritam você. A unidade linear exponencial muitas vezes produzirá aprendizagem mais rápida. Isso é meio que está ganhando popularidade agora que o recurso de computação está se tornando cada vez menos preocupante agora que você pode realmente fazer aprendizado profundo em um cluster de PCs na rede na nuvem. Então é isso que as funções de ativação são todas sobre. Você também pode escolher diferentes funções de otimização. Você sabe, nós conversamos em termos muito gerais sobre Grady e dissidência, mas há várias variações de Grady em algo que você pode usar também. Falamos um pouco mais cedo sobre a otimização momentum. Basicamente, a idéia que há para acelerar as coisas é que você está descendo uma colina e abrandar as coisas enquanto você começa a se aproximar desse mínimo. Então é uma maneira de apenas fazer a grade para enviar aconteceu mais rápido por tipo de saltar sobre aquelas partes mais íngremes da sua curva de aprendizagem. Bem, eu nunca usei a curva de aprendizagem de palavras no contexto. Palavra significa algo matematicamente significativo. Mas de qualquer forma, há também algo chamado Nesterov acelerou Grady em, que é apenas um ajuste em cima da otimização de momentum. Basicamente, está olhando para frente um pouco para o Grady e na sua frente para levar essa informação em conta. Então isso funciona ainda melhor. Há também algo chamado RMS prop, que está usando apenas uma taxa de aprendizagem adaptável que novamente ajuda a apontar você na direção certa para o mínimo. Lembre-se de volta de como a saudação para enviados funciona. Nem sempre é óbvio em que direção você vai seguir, dada uma mudança nos parâmetros. Então, nosso adereço de bagunça é apenas uma maneira mais sofisticada de tentar descobrir a direção certa . Finalmente, há algo chamado Adam representa a estabilização do momento adaptativo. Basicamente, é o otimizador Mo mentum e RMS prop combinado tipo de dá-lhe o melhor de ambos os mundos, e que é uma escolha popular hoje porque funciona muito bem. É muito fácil de usar novamente a biblioteca que você vai usar para este material para um nível muito alto e muito fácil de usar. Então não é como se você tivesse que implementar o luto acelerado do Nesterov do zero . Você só vai dizer que otimizador é igual a Adam e ser feito com isso. Sabe, é só uma questão de escolher aquele que faz sentido para o que você está tentando fazer. Faça suas próprias trocas entre velocidade de ah, convergência e recursos computacionais e tempo necessário para realmente fazer essa Convergência. Vamos falar sobre o encaixe também. Você pode ver que muitas vezes acaba com padrões como este onde você sabe que você não está realmente recebendo uma solução limpa. Sabe, como esses espinhos estranhos às vezes e às vezes se você deixar as coisas demorarem um pouco , acaba reforçando esses picos. Sabe, aquelas áreas muito ajustadas onde você não está realmente ajustado ao padrão que você está procurando. Você só está se encaixando nos dados de treinamento que você recebeu. Ok, então há maneiras de combater isso. E, obviamente, se você tem milhares de pesos para ajustar, você sabe que essas conexões entre cada neurônio e cada camada de seus neurônios podem se somar muito rapidamente. Por isso, é muito fácil para cima encaixe dedo acontecer. Há maneiras de lidar com isso quando é chamado de parar cedo. Então, assim que você vê o desempenho começar a cair, isso pode ser um jeito de dizer que talvez seja hora de você parar de aprender . Sabe, neste momento, talvez você esteja apenas se encaixando. Há também termos de regularização. Você pode adicionar à função de custo durante o treinamento. Você sabe que pode basicamente gostar da viragem de preconceito que falamos antes que poderia ajudar . Mas uma técnica surpreendentemente eficaz é chamada de abandono, e um Kennison é um exemplo de uma ideia muito simples que é muito eficaz. A idéia é apenas ignorar, digamos, metade dos neurônios aleatoriamente cada etapa de treinamento, fingir que eles não existem tudo. E a razão pela qual isso funciona é porque força seu modelo a espalhar seu aprendizado. Se basicamente você está tirando metade de seu cérebro, se você fizer em cada etapa de treinamento você vai forçar a metade restante desses neurônios a fazer o máximo de trabalho possível. Então isso impede coisas onde você tem neurônios individuais assumindo mais do trabalho do que deveriam. Você até viu em alguns dos exemplos que corremos no playground Tensorflow, que às vezes não fazemos com neurônios que mal foram usados tudo, e usando abandono que teria forçado esse neurônio a ser usado mais Efetivamente. Conceito muito simples muito eficaz para garantir que você está fazendo pleno uso de sua rede neural. Vamos falar sobre ajustar sua topologia outra maneira de melhorar os resultados de sua rede de aprendizado profundo é apenas jogar jogos com quantos neurônios você tem e quantas camadas de neurônios você tem. Uma maneira de lidar com isso é apenas tentativa e erro. Sabe, é o que fizemos no Tensorflow Playground, mas sabe, pode haver uma metodologia para isso. E até você pode começar com a estratégia de avaliar uma rede menor com menos neurônios nas camadas ocultas, onde você pode avaliar uma rede maior com mais camadas. Então, basicamente, você quer ver. Posso fugir com uma rede menor e ainda obter bons resultados e continuar a torná-la cada vez menor até encontrar o menor, pode ser seguro, ou você pode tentar tornar sua rede maior e maior e ver você sabe em que ponto ele pára de fornecer mais benefícios para você. Então, você sabe, basta começar a dimensionar as coisas de forma diferente e ver o que funciona e o que não funciona novamente. Há um aspecto assustador de como tudo isto funciona em conjunto. É muito difícil entender intuitivamente o que está acontecendo dentro de uma rede neural, uma rede de aprendizagem profunda em particular, então às vezes você só tem o dedo do pé. Use sua intuição para tentar ajustar a coisa e chegar ao número certo de recursos é que você precisa também, você sabe, novamente nos ambientes de computação modernos de hoje. Às vezes você não se importa tanto. Provavelmente está tudo bem. dedo do pé tem uma rede neural profunda que tem mais neurônios que ele realmente precisa, certo? Quero dizer, qual é o verdadeiro caro envolvido nisso hoje em dia? Provavelmente não muito. Direi que mais camadas muitas vezes produzirão aprendizado mais rápido do que ter mais neurônios e menos camadas. Então, se você se importa com velocidade de convergência, adicionar mais camadas é muitas vezes a coisa certa a fazer. Ou você também pode usar algo chamado zoológicos modelo. Existem, na verdade, bibliotecas de rede neural para pedir desculpas por problemas específicos . Então, se você não acha que é a primeira pessoa no mundo a resolver um problema específico de classificações ou qualquer outra coisa, você está tentando aplicar uma rede neural profunda para talvez devesse checar uma. Os modelos escorrem lá fora para ver se alguém já descobriu a topologia ideal para você tentar alcançar em vez de tentar reinventar a roda. Ok, as pessoas compartilham essas coisas por uma razão, e isso pode te poupar muito tempo. Então isso é teoria suficiente. Já chega de conversa. Em nossa próxima palestra, vamos sujar as mãos com tensorflow e começar a escrever algum código python real para implementar nossas próprias redes neurais. 6. Como introduzir o tensorflow: Se você já fez alguma pesquisa anterior em deep learning, provavelmente já ouviu falar da biblioteca do TensorFlow. É uma estrutura muito popular desenvolvida pelo pessoal do Google. E eles foram gentis o suficiente para torná-lo open source e livremente disponível para o mundo. Então vamos falar sobre o que é TensorFlow e como ele pode ajudá-lo a construir redes neurais artificiais. A coisa que me surpreendeu quando encontrei o TensorFlow pela primeira vez foi que ele não foi realmente construído para o aprendizado profundo no início, ou mesmo para redes neurais em geral. É uma ferramenta de uso muito mais geral que o Google desenvolveu e que acaso é útil para o desenvolvimento de redes neurais e de aprendizagem profunda. Mais geralmente, é uma arquitetura para executar um gráfico de operações numéricas. Não se trata apenas de redes neurais. Você pode ter qualquer sequência de operações e definir um gráfico de como essas operações se encaixam. O que o TensorFlow realmente faz é descobrir como distribuir esse processamento entre os vários núcleos de GPU em seu PC ou em várias máquinas em uma rede. E certifique-se de que você pode fazer grandes problemas de computação de forma distribuída. esse respeito, parece muito com Apache Spark. Se você fez outros cursos de mim, provavelmente já me ouviu falar sobre o Spark. É uma tecnologia muito excitante. E o Spark também está desenvolvendo capacidades próprias de aprendizado de máquina e IA e aprendizagem profunda. Então, de certa forma, o fluxo de tensor é um concorrente do Apache Spark. Mas há algumas diferenças fundamentais sobre as quais devemos falar. Não se trata apenas de distribuir gráficos de computação em um cluster ou em sua GPU. Você também pode executar o TensorFlow em praticamente qualquer coisa. Então, uma coisa que é especial sobre TensorFlow é que eu posso até executá-lo no meu telefone se eu quiser. Não se limita a executar em computadores em um cluster em algum data center. Isso é importante porque no mundo real você pode querer empurrar esse processamento para o dispositivo do usuário final. Vamos dar o exemplo de um carro autônomo. Você não iria querer que seu carro batesse de repente em uma parede só porque ele perdeu sua conexão de rede com a Nuvem. Agora você faria? A maneira que ele realmente funciona é que você pode empurrar a rede neural treinada real até o próprio carro e realmente executar essa rede neural no computador que está funcionando embutido dentro de seu carro. Porque o trabalho pesado da aprendizagem profunda é treinar essa rede. Então você pode fazer esse treinamento off-line, empurrar os pesos dessa rede para baixo para o seu carro, que é relativamente pequeno. E então execute essa rede neural completamente dentro do seu próprio carro. Ao ser capaz de executar o TensorFlow e uma variedade de dispositivos, ele abre muitas possibilidades sobre realmente fazer aprendizado profundo na borda, nos dispositivos reais onde você está tentando usá-lo. Tensorflow é escrito em C plus plus sob o capô, enquanto Spark é escrito em Scala, que em última análise é executado em cima de uma JVM, descendo para o nível C Plus Plus com TensorFlow, que vai lhe dar maior eficiência. Mas, ao mesmo tempo, tem uma interface Python. Então você pode falar com ele exatamente como você faria qualquer outra biblioteca Python que torna fácil de programar e fácil de usar como um desenvolvedor, mas muito eficiente e muito rápido sob o capô. A outra diferença importante entre o TensorFlow e algo como o Spark é que ele pode funcionar em GPUs. Uma GPU é apenas sua placa de vídeo, a mesma placa de vídeo que você está usando para jogar Fortnite ou seja lá o que for que você joga. Você pode realmente distribuir o trabalho entre os núcleos de GPU em seu PC. E é uma configuração muito comum ter até várias placas de vídeo em um único computador e realmente usar isso para obter mais desempenho em clusters criados especificamente para aprendizado profundo. Além disso, o TensorFlow é gratuito e é feito pelo Google. Apenas o fato de que ele é feito pelo Google levou a um monte de adoção. Existem bibliotecas concorrentes no TensorFlow, notavelmente Apache MXNet. Tensorflow a partir de agora ainda é de longe o mais popular. Instalar o TensorFlow é muito fácil. Tudo o que você precisa fazer é usar os comandos Conda em seu ambiente Anaconda para instalar o TensorFlow. Ou você pode usar o Anaconda Navigator para fazer tudo isso através de uma interface gráfica do usuário. Há também um pacote de GPU traço TensorFlow que você pode instalar se você quiser aproveitar a aceleração da GPU, se você estiver executando isso no Windows, eu não iria lá ainda. Tive alguns problemas para fazer com que a GPU TensorFlow funcionasse no meu próprio sistema Windows. Você descobrirá que muitas dessas tecnologias são desenvolvidas principalmente para sistemas Linux rodando em um cluster. Então, se você estiver executando em um computador específico em um cluster no EC2 ou algo feito para aprendizado profundo. Vá em frente e instale TensorFlow traço GPU, embora ele provavelmente vai ser instalado para você Tudo pronto. Vamos falar sobre o que é o TensorFlow. O que é um tensor, afinal? Bem, este é outro exemplo de terminologia pretensiosa que as pessoas usam para parecer inteligentes. No final do dia, um tensor é apenas um nome extravagante para uma matriz ou uma matriz de valores. É apenas uma coleção estruturada de números e é isso. Isso é tudo que um tensor é. Usando. Tensorflow pode ser um pouco contra-intuitivo, mas é semelhante a como algo como Apache Spark também funcionaria. Você não executa as coisas imediatamente. Em vez disso, você constrói um gráfico de como deseja que as coisas sejam executadas. E então quando você estiver pronto para executá-lo, você diz, ok, TensorFlow vai fazer isso. Tensorflow descobrirá a maneira ideal de distribuir e paralelizar esse trabalho em todo o conjunto de GPUs e computadores no cluster. Então vamos dar uma olhada aqui no aplicativo TensorFlow mais simples do mundo em Python. Tudo isso vai fazer é adicionar um mais dois juntos. Mas é um bom exemplo ilustrado do que realmente está acontecendo sob o capô. Começamos importando a biblioteca TensorFlow. Vamos nos referir a ele como tf como uma abreviação. Vamos começar dizendo uma variável igual tf dot um nome vírgula igual a. E tudo o que está fazendo é configurar uma variável no TensorFlow, um objeto variável que contém um único valor um e que está indo pelo nome de a. nome é o que aparecerá nas ferramentas de visualização para o seu gráfico se você estiver usando esse tipo de coisa. Mas internamente também irá atribuir isso a uma variável em Python chamada a. Então nós configuramos uma variável B que é atribuído ao valor dois e dado o nome B. Aqui é onde a magia começa a acontecer. Dizemos que F é igual a mais b. E você pode pensar que colocará o número três na variável f, mas não. F é, na verdade, o seu gráfico. É a conexão que você está construindo entre os tensores A e B para adicioná-los juntos. Então f é igual a mais b não faz nada exceto estabelecer essa relação entre a e B e sua dependência juntos no gráfico f que você está criando. Nada realmente acontece até que tentamos acessar o valor de f, em que pontos TensorFlow 2 usa algo chamado execução ansiosa para realmente executar esse gráfico nesse ponto, ele vai dizer, ok, eu preciso criar um gráfico que leva a uma variável que contém um e a variável B que contém dois e adicioná-los juntos. Ele descobrirá como distribuir essa operação incrivelmente complicada. Estou sendo sarcástico, em todo o seu grupo. E isso acabará por imprimir o valor três na forma de um novo tensor. Então, acabamos de criar a maneira mais complicada imaginável de computar um mais dois. Mas se estes eram tensores maiores lidando com conjuntos de dados maiores ou, por exemplo, uma enorme matriz ou uma matriz de pesos em uma rede neural, essa distribuição do trabalho torna-se importante. Então, embora adicionar 1 mais 2 não seja um exercício útil para fazer com o TensorFlow. Uma vez que você escalar isso para as muitas, muitas conexões em uma grande rede neural, torna-se muito importante ser capaz de distribuir essas coisas de forma eficaz. Então, como vamos estender essa ideia às redes neurais? Bem, o problema com o TensorFlow é que ele não é apenas feito para redes neurais, ele pode fazer coisas como multiplicação de matriz. E acontece que você pode pensar em aplicar todos os diferentes pesos e somas que aconteceram dentro uma única camada de um perceptron e modelo que é apenas uma multiplicação de matriz. Você pode simplesmente pegar a saída da camada anterior em seu perceptron multicamada e fazer uma multiplicação de matriz com uma matriz que descreve os pesos entre cada neurônio das duas camadas que você está computando. Em seguida, você pode adicionar em um vetor que contém os termos de polarização também. Então, no final do dia, você pode modificar este diagrama extravagante aqui de um perceptron se parece e apenas modelá-lo como uma multiplicação de matriz em adição vetorial. Volte e leia sua álgebra linear se quiser saber mais sobre como isso funciona matematicamente. Mas esta é apenas uma operação de multiplicação de matriz direta com a adição de vetor no final para os termos de polarização. Usando as APIs de nível inferior do TensorFlow. Estamos fazendo isso da maneira difícil, mas há APIs de nível mais alto no TensorFlow que tornam muito mais simples e intuitivo definir redes neurais profundas à medida que estamos descrevendo TensorFlow em um nível baixo agora, seu propósito na vida é apenas para distribuir operações matemáticas em grupos de números são tensores. E cabe a nós descrever o que estamos tentando fazer em termos matemáticos. Acontece que não é tão difícil fazer com a rede neural para nós realmente computar uma rede completa de aprendizagem profunda de ponta a ponta. Há mais do que calcular os pesos entre diferentes camadas de neurônios. Temos que treinar essa coisa de alguma forma e executá-la quando terminarmos. Então, a primeira coisa que precisamos fazer é carregar os dados de treinamento que contêm os recursos que queremos treinar e os rótulos de destino. Para treinar uma rede neural, você precisa ter um conjunto de entradas conhecidas com um conjunto de respostas corretas conhecidas que você pode usar para realmente descer, convergir sobre a solução correta de pesos que levam ao comportamento que você deseja. Depois disso, precisamos associar algum tipo de otimizador à rede. Tensorflow torna isso muito fácil de fazer. Pode ser descida gradiente ou alguma variação dos mesmos, como átomo. Em seguida, executaremos nosso otimizador usando nossos dados de treinamento. E novamente, o fluxo de tensão torna isso muito fácil de fazer também. Finalmente, avaliaremos os resultados da nossa rede de treinamento usando nosso conjunto de dados de teste. Para recapitular em um nível alto, vamos criar uma determinada topologia de rede e ajustar os dados de treinamento usando descida de gradiente para realmente convergir sobre os pesos ideais entre cada neurônio em nossa rede. Quando terminarmos, podemos avaliar o desempenho dessa rede usando um conjunto de dados de teste que nunca foi visto antes e ver se ele pode classificar corretamente os dados nos quais não foi treinado. Um outro. Apanhei-te. Quando você está usando redes neurais, é muito importante certificar-se de que seus dados de entrada são normalizados, que significa que são todos dimensionados para o mesmo alcance. modo geral, você deseja certificar-se de que seus dados de entrada têm um valor médio de 0 e variância de unidade. Essa é a melhor maneira de fazer as várias funções de ativação funcionarem matematicamente. O que é realmente importante é que seus recursos de entrada são comparáveis em termos de magnitude. Caso contrário, é difícil combinar esses pesos de forma significativa. Suas entradas estão todas no mesmo nível na parte inferior de sua rede neural e se encaixam nessa camada inferior, é importante que sejam comparáveis em termos de magnitudes. Então você não acaba distorcendo as coisas esperando coisas de maneiras estranhas. Por exemplo, se eu já criei uma rede neural que tente classificar as pessoas com base em sua idade e sua renda. idade pode variar de 0 a 100, mas a renda pode variar de 0 a um milhão. Essas são faixas muito diferentes. Então, esses vão levar a problemas matemáticos reais que eles não são reduzidos para o intervalo correto no início. Felizmente, Python scikit-learn biblioteca tem um pacote scaler padrão que você pode usar que irá automaticamente fazer isso com apenas uma linha de código. Tudo que você tem que fazer é lembrar de usá-lo. E muitos conjuntos de dados que usamos durante a pesquisa serão normalizados para começar. Um que estamos prestes a usar o dele já normalizado, então não precisamos fazer isso. Mas mais tarde no curso, vou mostrar-lhe um exemplo de realmente usar escalar padrão. Conversamos sobre como tudo isso funciona em um nível baixo. E no TensorFlow 2, ainda é possível implementar uma rede neural completa basicamente do zero. Mas no TensorFlow 2, eles substituíram grande parte dessa funcionalidade de baixo nível por uma API de nível superior chamada Keras. Há valor em entender como tudo funciona sob o capô primeiro. Então vamos trabalhar através de um exemplo simples de uma rede neural usando as APIs de nível inferior. Em seguida, depois disso, veremos como a API Keras simplifica as configurações comuns de rede neural e aumenta muito dessa complexidade de você. 7. Como usar o tensorflow para a reconhecimento de escrita à mão, parte 1: Ok, então vamos brincar com o fluxo de tensor usando seu nível inferior AP, I Então você tem mais de uma apreciação ah do que está acontecendo sob o capô, se você quiser. No Windows começará indo ao nosso menu Iniciar e encontrando o grupo de três Anaconda. E a partir daí, abra sua anaconda. Avisar cavala em X, é claro, você só vai abrir um terminal, é claro, você só vai abrir um terminal,pedindo que você vai ser bom. A primeira coisa que você quer fazer é certificar-se de que você realmente instalou o próprio tensorflow . Então, se você ainda não cuidou disso, você pode apenas dizer Kanda instalar tensorflow. E eu já fiz isso, então não vou fazer nada por mim. Mas se você precisar instalá-lo ou atualizá-lo, isso solicitará que você faça isso. Dê um segundo só para verificar tudo bem, parece que estamos bem. Próximo. Deseja ver o no diretório onde você instalou os materiais do curso? Então, para mim, isso vai ser CD C dois-pontos, barra invertida,curso ml, curso ml, e de dentro do diretório de materiais do curso em Júpiter com um caderno de mentiras. Eu deveria trazer o seu navegador favorito da Web daqui encontrar o caderno Tensorflow e ir em frente e abrir isso e vamos começar a jogar, então vamos começar executando o aplicativo de fluxo de tensor mais simples do mundo que olhamos no foram apenas adicionar os números um mais dois Juntos usando tensorflow, começamos importando a própria biblioteca Tensorflow e dar-lhe-emos o nome. TF, como uma abreviação, criará duas variáveis no fluxo de tensor uma chamada AM uma chamada Be the Variable A terá o número um associado a ele, e a variável B será inicializada com o número dois. Então dizemos que F é igual a mais. B, que não coloca o número três em F f apenas representa o gráfico que estamos definindo . Isso diz F, representa a adição do que está em A e B juntos. Então nada aconteceu aqui, exceto para construir esse gráfico. É somente quando dizemos TF dot print procurando a saída de F que Tensorflow usará o que é chamado de execução ansiosa para sair e realmente executar esse gráfico e avaliar seus resultados. Então, nesse ponto, ele dispara e diz, Ok, nós temos esta nave construída de A e B A contém um. B contém dois. Vamos adicioná-los juntos e obter a saída do gráfico F e imprimir isso. E ele poderia realmente distribuir isso em um cluster inteiro se precisasse. Mas, obviamente, por apenas adicionar um mais dois, não há necessidade de tudo isso. Mas vamos ver se funciona. Vá em frente e aperte Shift entrar dentro daquele bloco depois de clicar dentro dele, e devemos pegar o número três. Certeza suficiente para alguns dos três da NBA. Ei, funciona. Então vamos fazer algo um pouco mais interessante. Vamos realmente fazer reconhecimento de caligrafia usando fluxo de tensor. Este é um exemplo bastante comum para usar quando as pessoas estão aprendendo tensorflow. Basicamente, é um conjunto de dados de 70.000amostras de caligrafia onde cada amostra representa alguém tentando desenhar os números de zero a nove. Então temos 70.000 imagens que são 28 por 28 imagens de pessoas desenhando o número zero a nove. E nosso desafio é criar uma rede neural que olhe para essas imagens e tente descobrir o número que elas representam. Agora, este é um exemplo muito comum quando as pessoas estão aprendendo tensorflow talvez um pouco comum demais . Mas há uma boa razão para isso. Está embutido no fluxo de tensão. É fácil enrolar sua cabeça. É muito bom para aprender. E nossa pequena reviravolta nele, que você não vai ver em muitos outros lugares, está usando olhos PA de nível inferior para implementar essa rede neural para começar. Então vamos mergulhar aqui. Então vamos percorrer realmente carregando esses dados e convertendo-os para o formato que precisamos . A primeira coisa que vamos fazer é importar as bibliotecas que precisamos, e nós vamos estar usando torta entorpecida e também tensorflow em si e o M. Este conjunto de dados em si é parte de fluxos tensores carregar pacote de conjuntos de dados de estoque, então nós apenas importamos que direito e ter que os dados acessíveis para nós irá definir algumas variáveis convenientes. Aqui. Classes numb é 10 que representa o número total de classificações para cada uma dessas imagens. Então, novamente, estes podem representar os números de zero a nove, e isso é um total de 10 classificações possíveis. Nossas características são 784 em número, e percebemos isso dizendo que cada imagem é uma imagem de 28 por 28, certo, então temos 28 vezes 28 que é 784 pixels individuais para cada imagem de treinamento que temos . Então, nossos recursos de treinamento são cada pixel individual de cada imagem individual que estamos usando para treinar nossa rede neural. Vamos começar carregando o conjunto de dados em si, então vamos dizer e Sr em dados de carga para realmente recuperar esses dados de TENSORFLOW. E vamos colocar o conjunto de dados resultante nessas variáveis aqui. Então, a convenção que normalmente usamos esse versículo extra refere-se aos seus dados de feição. Este é o seu, ah, no nosso caso, as próprias imagens. E por que se refere aos seus rótulos? Então isso representará se essa imagem representa os números de zero a nove. Além disso, dividimos as coisas em conjuntos de dados de treinamento e teste. Então, com anistia, temos 60.000amostras de treinamento e 10.000amostras de teste. Isso significa que nós só vamos treinar nossa rede neural usando esse conjunto de 60.000amostras de treinamento e estamos segurando um lado de 10.000amostras de teste para que possamos realmente testar o quão bem são treinados rede funciona em dados que nunca viram antes. É assim que evitamos o excesso de encaixe. Na verdade, avaliamos nosso modelo com base em dados que o modelo nunca viu antes, então ele não teve a chance de se encaixar nesses dados para começar. Em seguida, precisamos converter isso em valores de ponto flutuante de 32 bits, porque é isso que Tensorflow espera. Então começamos criando esses raios de pira entorpecidos dos dados de treinamento e teste subjacentes e convertendo isso para acabar com os 32 tipos de dados. Em seguida, achatamos essas imagens para baixo para que ele venha em duas dimensões 28 por 28 imagens. E há maneiras de construir redes neurais. Posso lidar com dados bidimensionais. Vamos chegar lá. Mas, por enquanto, vamos manter as coisas simples e apenas tratar. Cada imagem é uma matriz unidimensional ou vetor ou tensor, se você preferir, De Senador em 84 características 184 pixels. Neste caso, o comando remodelar é o que faz isso, dizendo remodelar negativo um entorpecimento apresenta algumas características. Mais uma vez, é 784 que vai nivelar estes raios bidimensionais para um 784 10 senhores unidimensional . Então isso vai ter um novo trem X e um novo teste X que pode conter esses sensores unidimensionais de 784 pixels . Em seguida, precisamos normalizar nossos dados. Nós conversamos sobre isso nos slides também. Assim, os dados brutos provenientes deste conjunto de dados tem todos os representantes de pixel e valor inteiro entre zero e 2 55 zero representa um pixel preto 255 representa um pixel branco, e os valores entre representam vários tons de cinza. Precisamos reduzir isso para o intervalo de 0 a 1. Então, para fazer isso, muito simplesmente, nós apenas dividimos tudo por 55 nós terminamos. Tudo bem. Então nós preparamos, limpamos e limpamos nossos dados aqui. Vamos fazer mais coisas com ele. Vamos começar por envolver nossas cabeças em torno de como esses dados se parecem. Portanto, é sempre uma boa ideia visualizar seus dados com os quais você vai treinar e entender suas peculiaridades e nuances antes de realmente tentar implementar um algoritmo. Isso é o que estamos fazendo nesta função de amostra de exibição aqui. Vai nos levar a entrada. Um número específico de uma amostra de nossos dados de treinamento que queremos analisar, e vamos apenas extrair o rótulo dele. Então, por que treinar de novo? Os rótulos de treinamento são o número zero a nove que essa imagem representa? E então vamos remodelar isso de volta para um bidimensional 28 por 28 minutos para que possamos realmente exibi-lo na tela. Vamos dar-lhe um título, vai mostrar que duas imagens dimensionais grande escala e apenas mostrá-lo. Então vamos em frente e começar isso. Na verdade não iniciamos esse mercado anterior com, não é? Então, antes que esqueçamos, volte para este bloco onde preparamos nossos dados e turnos enter para executar isso. E agora que fizemos isso, poderíamos realmente visualizar os dados que carregamos Clique aqui e desloque Enter. E aqui está um exemplo de ponto de conjunto de dados. Então a amostra número 1000 é esta imagem aqui, e podemos ver que ela deve representar o número zero e, bem, parece um zero. Portanto, este não é particularmente desafiador para aprendermos. Espero que você possa brincar por aqui. Experimente números de amostra diferentes é obter uma melhor sensação de como é o estado. Então vamos tentar 1500. Acontece que esse é o número nove, um, um, um tipo de estranho olhar nove, então isso pode ser um pouco de desafio. Que tal, sei lá, 1700. Esse é o único. Parece um. Mas se você continuar, sabe, bisbilhotando por aqui e tentando valores diferentes, eventualmente você vai encontrar alguns estranhos. Por exemplo, isso é um olhar muito engraçado. Mas você sabe, você pode ver que há uma grande variedade de recursos de caligrafia de pessoas que fizeram esses dados de teste . Então essa é uma boa maneira de entender o que estamos lidando. Seguindo em frente. Poderíamos levar essa visualização para o próximo passo e realmente visualizar aqueles raios unidimensionais que estavam treinando nossa rede neural. Então isso nos dará uma imagem melhor da entrada que nossa rede neural vai ver e meio que nos fará apreciar o que está acontecendo aqui e quão diferente ele, ah, aspas, pensa assim. O que vamos fazer aqui é reformular tudo de volta para matrizes unidimensionais de 784 pixels. Leve isso em um de nossos conjuntos de dados de treinamento aqui, e nós vamos comer através das primeiras 500amostras e podemos capitalizar oito cada imagem individual para aquela imagem original lá de zero. Então não estamos. Pegue basicamente as primeiras 500 imagens de treinamento, achate-as até matrizes unidimensionais de jornada central para valores de epístola e, em seguida, combine tudo isso em uma única imagem bidimensional que irá traçar. Vamos em frente e clicar nisso e mudar enter para executá-lo. E isto é interessante. Então isso está mostrando a entrada que está indo para nossa rede neural real para cada imagem individual para as primeiras 500 imagens, e você pode ver que seu cérebro não faz um trabalho muito bom em tudo de descobrir o que essas coisas Representar, certo? Então, cada linha desta imagem representa os dados de entrada que entram em nossa rede neural. Então nossa rede neural será capaz de pegar cada uma dessas linhas de dados unidimensionais e tentar descobrir qual número que representa no espaço bidimensional você possa ver que ele está pensando no mundo ou percebendo o mundo. Receber estas imagens mais especificamente de uma forma muito diferente do que o seu próprio cérebro. Então você sabe, às vezes é uma suposição perigosa pensar que as redes neurais funcionam da mesma forma que o seu cérebro. Elas são inspiradas pelo seu cérebro, mas nem sempre funcionam da mesma maneira. Distinção tão importante lá. Tudo bem, vamos realmente começar a configurar nossa rede neural então vamos começar definindo alguns parâmetros ou hiper parâmetros, se você quiser, que definiram como o treinamento vai realmente funcionar. A taxa de aprendizagem é basicamente como rapidamente vai descer através Grady e dissidência em tentar encontrar os valores de outono. A espera ideal para nossas etapas de treinamento de rede neural é basicamente quantos treinamentos na Box realmente conduzirão quantas vezes vão realmente passar por cima e iterar sobre toda essa rede neural tentando treiná-lo tamanhos de morcegos. Quantas amostras aleatórias serão retiradas de nossos dados de treinamento durante cada etapa e deslocadas para cima é apenas quantas vezes irá exibir nosso progresso enquanto treinamos esta rede neural e sublinhar Hidden representa quantos neurônios ocultos terão em nossa camada oculta de modo que a camada média de neurônios e nossa rede neural terá 512 neurônios dentro dela. E você pode brincar com esse número. Veja qual número funciona melhor para você. Estes são todos hiper parâmetros, e o pequeno segredo sujo do aprendizado de máquina é que Ah, muito do seu sucesso depende de quão bem você pode adivinhar os melhores valores para estes. Muito disso é apenas tentativa e erro, tentando encontrar o valor certo da taxa de aprendizagem, o número certo de neurônios ocultos. Estes números são basicamente determinados através da experimentação. Então, você sabe, não é exatamente a ciência que você pode pensar que é ISS. Vamos em frente e executar essa mudança de bloco. Entrar. E também vamos dividir ainda mais nosso conjunto de dados aqui e prepará-lo ainda mais para treinar o fluxo de tenso do usuário. Então vamos usar ah TFT desatualizado conjunto de dados para criar o que é chamado de objeto de conjunto de dados dentro do tensorflow a partir de nossas imagens de treinamento e rótulos de treinamento. Em seguida, usaremos esse conjunto de dados para criar nossos lotes individuais com os quais usamos para treinar a rede neural. Então embaralhar 60.000 significa que eu vou embaralhar todas as 60.000 imagens de treinamento que eu tenho apenas aleatoriamente embaralhar todas elas. Vou então batê-los em lotes de 250 pré buscar o primeiro lote. Então eu tenho isso pronto para ir. É tudo o que está acontecendo aqui. Shift Enter. Muito bem, agora vamos começar a construir a nossa própria rede neural começará criando as variáveis que armazenarão os pesos e termos tendenciosos para cada camada da nossa rede neural. Então começamos por, ah, ah, inicializando todas as variáveis com variáveis aleatórias apenas para ter certeza de que temos um conjunto de configurações aleatórias iniciais lá para nossos pesos. Queremos começar com algo, e por falta de algo melhor começará com valores aleatórios. Na verdade, sua escolha de valores de inicialização de ah pode fazer uma grande diferença no desempenho de suas redes neurais . Então vale a pena investigar como escolher os valores iniciais certos para um determinado tipo de rede neural. Nós configuramos nossos pesos aqui para a camada oculta, vamos chamar esses pesos H e vamos usar nossa função aleatória, normal que acabamos de definir aqui. Para inicializar esses pesos aleatoriamente e ocultos como você pode se lembrar novamente, vamos olhar aqui novamente. Cinco anos 12. Então isso criará 512 variáveis que continham os pesos para neurônios ocultos. Nós também precisamos de um conjunto de pesos em nossa camada de saída de 10 neurônios de saída. Então a saída será de 10 neurônios onde cada neurônio representa a probabilidade de que seja que dadas classificações de zero a nove, também precisamos ter preconceitos associados a ambas as camadas, então será o conjunto de preconceitos com a nossa camada oculta. Mais uma vez, haverá 5 a 12 desses. E também temos preconceitos associados com sua camada de saída de neurônios tenores na camada de saída também. Estes serão zeros inicializados. Ok, então um pouco diferente lá para os preconceitos por padrão. Queremos que nossos preconceitos sejam zero. Vamos em frente e executar isso. Tudo bem, seguindo em frente. 8. Como usar o tensorflow para a reconhecimento de escrita à mão, parte 2: Agora vamos configurar a topologia da nossa própria rede neural. Então é isso que a rede neural aqui faz. E como dissemos nos slides, você pode definir essas redes neurais extravagantes é apenas uma matriz simples, multiplicação e funções de adição aqui, certo? Então vamos começar dizendo TF dot mate Mole. Isso é apenas uma multiplicação de matriz de nossos neurônios de entrada, que são os valores brutos de 784 pixels com os 512 pesos em nossa camada oculta de neurônios lá que a multiplicação de matriz esteja multiplicando cada um desses valores de entrada pelos pesos naquela camada oculta. Em seguida, dizemos TF dot add a adicionar nos termos tendenciosos, que novamente são armazenados na variável B que acabamos de definir acima. Ok, seguir, precisamos aplicar uma função sigmóide na saída dessa camada oculta. Então essa é basicamente a função de ativação em cada oculto ou em Ok, isso é tudo o que está acontecendo. Eles são muito simples. A camada de saída fará isso novamente, então vamos dizer, faça uma multiplicação de matriz com nossos pesos de saída e a camada oculta, e então adicionaremos esses vieses de saída no final também, e chamaremos soft Max para realmente normalizar esses neurônios de saída para uma probabilidade final de cada classificação individual. Max tão suave de novo. É apenas um truque matemático para pegar as saídas dessas redes neurais e converter esses valores de neurônios de saída para o que podemos interpretar como uma probabilidade de cada classificação individual que esses neurônios representam estar correta. Vá em frente e execute isso. E isso também é rápido. Lembrem-se, tudo o que estamos a fazer é definir o nosso gráfico. Neste ponto, não estamos treinando nada ou executando qualquer coisa ainda, mas sim, você aproveita o tempo para fazer macarrão nisso? Basicamente construímos o pedido de desculpas da própria rede neural. A próxima coisa que não precisamos fazer é descobrir como treinar essa rede neural , certo? Então, novamente, estamos fazendo isso da maneira mais difícil, então temos que escrever isso à mão. Vamos começar definindo nossa função de perda e sua chamada entropia cruzada. Basicamente, é uma maneira de fazer Grady e dissidência é fornecer uma escala log arrítmica, e isso tem o efeito de penalizar classificações incorretas muito mais do que aquelas que estão próximas da resposta correta. Isso é uma propriedade útil para fazer o treinamento ir rapidamente. Então dentro desta função vai passar para as coisas. Por quê? Pred são os valores previstos que estão saindo de nossa rede neural e por que true são os rótulos verdadeiros conhecidos que estão associados a cada imagem. Então nós temos que falar sobre uma codificação quente neste ponto. Falamos sobre isso quando falamos de engenharia de recursos no curso, mas para poder comparar esse valor conhecido que rótulo conhecido, que é um número de 0 a 9 para a saída desta rede neural. Lembre-se, a saída da rede neural é na verdade 10 neurônios diferentes onde cada um representa a probabilidade de uma determinada classificação. Ele realmente compara isso com o valor correto conhecido. Precisamos converter esse número correto conhecido para um formato similar, então vamos usar uma codificação quente. É melhor entendido com um exemplo. Então, digamos que sabemos que a resposta para o rótulo correto conhecido para uma imagem é uma. Gostaríamos de uma codificação quente que como uma matriz de valor 10 aqui, onde cada valor representa a probabilidade de ah, que dadas classificações, vez que sabemos com 100% de certeza que esta imagem era uma. Podemos dizer que para as classificações zero, há 0% de chance disso para a classificação 1, há 100% de chance de um ponto. Oh, e para dois vai ser zero para 30 assim por diante e assim por diante. Então essa é uma codificação quente. Você está apenas criando uma representação binária de um valor inteiro, se preferir. Então o número um é representativo. 0100000 Cada um desses slots na matriz representa um valor de classificação diferente , e isso apenas torna mais fácil para a matemática trabalhar fora e construir coisas. Tudo bem, então começamos, como codificar, aquele rótulo conhecido para um único array codificado. Em seguida, fazemos alguns recortes deles para evitar alguns problemas numéricos matemáticos que registram zero. E então nós poderíamos apenas comparar isso Ah, e calcular o verdadeiro termo de entropia cruzada fazendo reduzir alguns para ir através de todo o conjunto de todos os valores dentro deste patch e usando esta comparação log arrítmica como dissemos para realmente fazer cruzar entropia sem log propriedade arrítmica. Então vamos em frente e ah, shift, shift, Enter Para fazer isso de novo, as principais coisas aqui são reduzidas a mim e reduzir alguns, que significa que vamos aplicar isso em todo o lote de uma só vez. Tudo bem. Em seguida, precisamos definir o que é chamado de otimizador, e neste caso, vamos usar um Grady estocástico e dissidência. Nós já falamos sobre isso antes, e vamos usar nosso parâmetro hiper de taxa de aprendizado, que novamente vai querer sintonizar através da experimentação mais tarde. Teoh, defina esse otimizador. Precisamos escrever uma função para realmente executar essa otimização. E novamente com o nível inferior do tensorflow ap olhos. Nós meio que temos que fazer isso da maneira mais difícil. Vamos usar algo chamado fita radiante para fazer isso automaticamente. O que isso está fazendo é que você pode ver aqui ele está realmente chamando nossa função de rede neural que define a topologia de nossa rede neural. Vamos calcular a função de perda são função de entropia cruzada que definimos acima também. Então isso está amarrando tudo e realmente nos permitindo otimizar essa rede neural dentro dessa função aqui. Então não é muito importante entender o que está acontecendo aqui em um nível baixo você pode meio que entender aqui através dos comentários, nós, uh nós estamos atualizando nossas variáveis enquanto passamos por isso. Passo aqui. Calculamos o Grady INTs e, em seguida, atualizamos nossos pesos e vieses na etapa de treinamento fácil. Então este código é o que está computando novos pesos e preconceitos através de cada passagem de treinamento novamente, Isso vai ser muito mais fácil usando a carícia de nível superior AP I Então agora estamos apenas mostrando isso para dar uma apreciação do que está acontecendo em O capô. Vamos em frente e mudar. Digite esse também. Tudo bem, agora temos tudo o que precisamos. Temos a topologia da nossa rede definida. Temos as variáveis definidas para nossos pesos e vieses. Temos uma função perdida definida, que é entropia cruzada, e temos uma função de otimização que liga tudo junto chamada otimização Run. Vamos começar a treinar essa coisa. Então é isso que está acontecendo aqui. Oh, espere. Mais uma coisa. Precisamos de uma métrica de precisão também, então uma função de perda não é suficiente. Nós também queremos exibir a precisão real em cada estágio dois e tudo que essa métrica de precisão faz é dizer, vamos comparar o argumento máximo real de cada array de saída que vai corresponder ao nosso valor codificado quente. E compare isso com o único valor conhecido, codificado e conhecido que temos para esse rótulo. Então esta é apenas uma maneira de ficar. Vamos ligar, reduzir-me para calcular a precisão de cada previsão individual e média que em todos os dias definidos. Então é isso que nossa métrica de precisão aqui faz também. Shift, entra. E agora nós podemos realmente chutar para que você possa ver que nós fizemos todo o trabalho pesado. Agora é bastante simples fazê-lo. Então, para cada etapa de treinamento, vamos pegar um lote de nossos dados de treinamento. Lembre-se de que criamos esses lotes anteriormente usando um conjunto de dados nas etapas de treinamento. Isso vai ser ah, 3000. Acho que dissemos que era. E para cada lote, cada etapa de treinamento, vamos executar a otimização. Então isso é chamar essa função que temos que amarrou tudo junto para aplicar nossa otimização em toda a nossa rede neural para calcular os pesos e vieses ideais em cada etapa e sim, cada 100 passos. Isso é o que é a etapa de exibição. Vamos colocar o nosso progresso à medida que avançamos. Então, a cada 1/100 epoch, nós vamos realmente, uh, executar nossa rede neural aqui no lote atual e obter um conjunto de previsões para esse lote de 250 valores lá e computar entropia cruzada sobre isso para obter um instantâneo de nossa função de perda atual e precisão computacional sobre isso também. Tash, você obtém uma métrica de nossa precisão em cada estado para que possamos ver isso convergir ao longo do tempo para cada 100 passos ao longo de nossas 3000 etapas de treinamento ou aquela caixa, se preferir. Vamos em frente e chutar isso fora. E é aqui que a ação está acontecendo. Então isso vai iterar sobre uma caixa de 1 sobre 3000 F e podemos ver essa precisão mudando medida que avançamos. É interessante ver isso porque a precisão está flutuando um pouco como nós vamos Medo Então você sabe, você pode dizer este tipo de talvez se instalando em um pouco de minima local aqui e trabalhando seu caminho para fora desses e encontrar melhores soluções ao longo do tempo. Mas como vai, ele vai começar a convergir para valores melhores e melhores. Então, você sabe, começamos com Justin 84% de precisão. Neste momento, estamos a cerca de 90 4%, mas ainda está por todo o lado. Vamos dar mais tempo com firmeza nos anos noventa neste momento. Então, isso é bom. 90 três, eu diria que até 2000 aquela caixa. Agora lembre-se, nós vamos subir para 3000 e novamente, você sabe, você sabe, você só vai ter que assistir isso e ver onde ele começa a convergir. Poderíamos fazer uma parada mais cedo para descobrir em que ponto nós realmente parar de obter uma melhoria. Mas você meio que tem que olhar o primeiro para ter uma noção de quantas varíola você realmente precisa. Estamos quase lá e parece que não vamos fazer muito melhor do que 93% de precisão. Então, lá temos. Nós mais 3000 que caixa acabamos com uma precisão de 92,8% e isso é realmente lembrar usando nosso conjunto de dados de treinamento. Então, há uma possibilidade de que estamos mais ajustados aqui para realmente avaliar o quão bem este modelo faz. Queremos avaliá-lo no conjunto de dados de teste em dados que ele nunca viu antes. Então vamos em frente e usar esse conjunto de dados de teste que nós reservamos no início e executar a rede neural nele e realmente chamar nossa função de precisão para ver o quão bem ele faz em imagens de teste de dados que nunca viu antes. 93%. Não tão ruim, você sabe. Quero dizer, poderíamos fazer melhor. Mas para uma visão muito simples de usar tensorflow e configurar uma rede neural muito simples com apenas uma camada oculta, isso não é tão ruim. Faremos melhor ao longo do curso. Vamos tentar técnicas diferentes, mas estamos começando bem de novo. É bom entender seus dados, visualizar coisas, ver o que realmente está acontecendo sob o capô. Então vamos dar uma olhada em algumas dessas imagens mal classificadas e ter mais uma sensação de como nosso modelo realmente é bom. Vamos dar uma olhada em alguns exemplos de imagens que ele não classificou corretamente e ver quão perdoável esses erros são. Então é isso que esta função está fazendo. Basicamente, estamos passando por 200 imagens que eram conhecidas por estarem incorretas. Dando uma olhada no valor real previsto, tomando assim art max na matriz de saída lá da camada de neurônio de saída. E comparando isso com os rótulos corretos conhecidos. E, se não estiver correto, irá imprimi-lo com o rótulo original e o dedo do pé do rótulo previsto. Tenha uma idéia do que está acontecendo aqui. Shift entrar. Tudo bem, então estes são alguns exemplos bem confusos neste exemplo. Sabíamos que esse cara estava tentando desenhar cinco. Pensamos que era 1/6. Sim, eu não consigo entender isso. Sim, quero dizer, isso é realmente desagradável olhar cinco, e é um bom caso para dizer que foi na verdade um seis. Então esse é um caso em que seu cérebro humano não poderia realmente fazer muito melhor. Eu não conseguiria isso. Isso é um cinco, assim como parece um rabisco. Este para o nosso melhor palpite para o meu modelo foi um seis. A pessoa destinada a quatro que não parece um quatro para mim. Quero dizer, parece metade de um quatro, basicamente como se eu não soubesse o que aconteceu com o braço do cara quando ele estava desenhando. Mas mais uma vez, você sabe que isso permite que você aprecie o quão bem está fazendo ou não. Ah, este aqui. Não sei como nosso modelo pensou que era um 7 de novo. É um seis muito estranho, mas parece um sete, mas parece um sete, de qualquer maneira, aquele, também meio desagradável, parece um dois no cérebro. qualquer maneira, aquele, de qualquer maneira, aquele, também meio desagradável, É realmente engraçado, espremido, estranho olhar, mas ah, mas ah, este é um exemplo de onde seu cérebro faz um trabalho melhor do que uma simples rede neural. Mas no geral, você sabe, estes são erros em grande parte perdoáveis. Alguém onde eu estraguei eram alguns exemplos bem estranhos e confusos como, o que é isso? Hum, eu acho que é suposto ser um dois. Achamos que era um nove. Você sabe, eu poderia realmente ver isso indo de qualquer maneira. Então, Então, não são caras tão maus, sabe? De qualquer forma, se quiser brincar com ele, encorajo-o a fazê-lo. Veja se consegue melhorar as coisas. Então, como conversamos, há muitos parâmetros hiper diferentes aqui para brincar com a taxa de aprendizado. Quantos neurônios escondidos temos? E então tente valores diferentes. Experimente diferentes taxas de aprendizagem. Tenta mais neurónios, menos neurónios. Veja o efeito que tem apenas brincar com ele. Porque no mundo real, é isso que você tem que fazer. Tente adicionar uma segunda camada oculta tamanhos de lote iguais ou diferentes ou um número diferente dessa caixa. Basta sujar suas mãos e obter uma boa sensação de como esses diferentes parâmetros afetam a saída nos resultados finais que você obtém. Então dê uma chance. E se você conseguir obter mais de 93% de precisão, gostaríamos de ouvir sobre isso nas Q e A. 9. Como introduzir o Keras: Então, demos uma olhada no desenvolvimento de redes neurais usando tensorflow tipo olhos PA de nível inferior . Onde em vez de realmente pensar em neurônios ou unidades, você está pensando mais em 10. Senhores e maitresse facilidade e multiplicá-los diretamente, e essa é uma maneira muito eficiente de fazê-lo. Mas não é muito intuitivo. Pode ser um pouco confuso, especialmente quando você está começando a tentar implementar uma rede neural nesses termos. Felizmente, há, ah, ah, nível mais alto AP que eu chamei de carícia que agora está incorporado no Tensorflow. Costumava ser um produto separado que estava no topo do Tensorflow. Mas a partir do fluxo de tensor 1.9, ele foi realmente incorporado no próprio fluxo de tensor como uma alternativa, nível mais alto a p I que você pode usar. E é muito bom porque é feito de propósito para a aprendizagem profunda. Então todo o código é muito construído em torno do conceito de redes neurais artificiais, e torna muito fácil construir as camadas de rede neural e conectá-las e usar diferentes funções de otimização nelas. É muito menos código e muito menos coisas que podem dar errado. Como resultado, outro benefício da carícia em, além de sua facilidade de uso é a sua integração com facilidade. Psiquiatria aprendeu biblioteca. Então, se você está acostumado a fazer machine learning em python, você provavelmente usa psíquico aprender muito e usando carícia. Você pode realmente integrar suas redes neurais profundas com o aprendizado psíquico. E você deve ter notado em nossa palestra anterior que nós meio que perdemos sobre o problema de realmente fazer testes treinados ou validação cruzada em nossa rede neural porque teria sido um tipo de uma grande dor no saco, mas seria Psiquiatria que aprenda. É muito fácil fazer a validação cruzada e, tipo, realizar análises e avaliação adequadas desta rede neural. Isso torna mais fácil avaliar o que estamos fazendo e integrá-lo com outros modelos ou até mesmo rede ah, rede neural com outras técnicas de aprendizado profundo ou aprendizado de máquina. Há também muito menos em que pensar, e isso significa que muitas vezes você pode obter melhores resultados sem sequer tentar. Você sabe, com o fluxo de tensão, você tem que pensar em cada pequeno detalhe em um nível de álgebra linear de como essas redes neurais são construídas porque ele realmente não suporta nativamente redes neurais fora da caixa. Você tem que descobrir, Como faço para multiplicar todos os pesos juntos? Como faço para adicionar nos termos de viés? Como faço para aplicar um otimizador a ele? Como definimos uma função de perda? Coisas assim, enquanto quilates podem cuidar de muitos desses detalhes para você. Então, quando há menos coisas para você estragar tudo e mais coisas que carícia pode assumir para você em termos de otimização de coisas onde você realmente está tentando fazer, muitas vezes você pode obter melhores resultados sem nos fazer muito trabalho, que é ótimo. Por que isso é importante? Bem, quanto mais rápido você pode experimentar e protótipo coisas, melhores serão seus resultados. Então, se é muito mais fácil para você tentar diferentes camadas em sua rede neural, você sabe, diferentes desculpas, diferentes otimizadores, diferentes variações. Vai ser muito mais fácil e rápido para você convergir para o tipo ideal de rede neural para o problema que está tentando resolver. Considerando que Tensorflow está colocando um monte de obstáculos para você ao longo do caminho. No final do dia, você só tem muito tempo para dedicar a esses problemas, certo? Assim, quanto mais tempo você pode gastar na topologia e ajuste de sua rede neural, e quanto menos na implementação dela, melhores serão seus resultados no final do dia. Agora você pode descobrir que Paris é, em última análise, uma ferramenta de prototipagem para você. Não é tão rápido como ir direto para Tensorflow. Então você sabe, às vezes você quer convergir para a topologia desejada, então voltar e implementar isso na camada de fluxo de tensor. Mas novamente, apenas que o uso de prototipagem por si só vale bem a pena. Torna a vida muito mais fácil. Então vamos dar uma olhada mais de perto. E novamente carícia é apenas uma camada sobre o fluxo de tensor que torna a aprendizagem profunda muito mais fácil . Tudo o que precisamos fazer é começar importando essas coisas que precisamos. Então vamos importar a biblioteca de carícias e alguns módulos específicos dela. Temos os dados de anistia aqui que vamos experimentar com o modelo sequencial , que é uma maneira muito rápida de montar as camadas de uma rede neural. Nós vamos importar as camadas densas e abandonadas também, que possamos realmente adicionar algumas coisas novas nesta rede neural para torná-la ainda melhor e evitar o excesso de encaixe . E vamos importar o otimizador de problemas RMS, que é o que vamos usar para o nosso Grady e dissidência. Shift, digite e você pode ver que eles já carregaram carinho apenas importando essas coisas. Ele está usando Tensorflow é o back-end. Vamos em frente e carregar o conjunto de dados de anistia que usamos no exemplo anterior. A versão de Paris é um pouco diferente, na verdade tem 60.000amostras de treinamento em vez de 55.000 ainda 10.000amostras de teste, e isso é apenas uma operação de uma linha. Tudo bem, então agora precisamos, como antes, converter isso para a forma que Tensorflow espera sob o capô. Então vamos remodelar as imagens de treinamento para 60.000 por 784. Mais uma vez, vamos tratar estas como imagens de um D. Vamos achatar tudo isso no reboque uma rosa D de 784 pixels para cada imagem de 28 por 28 . Nós também temos nosso conjunto de dados de teste de 10.000 imagens, cada uma com 784 pixels de paz e nós explicitamente lançaremos as imagens como valores flutuantes de 0,32 bits , e isso é apenas para tornar a biblioteca um pouco mais feliz. Além disso, nós vamos normalizar essas coisas por 2 55 Então os dados da imagem aqui são na verdade oito bits na fonte, modo que 0 a 2 55 Então para converter isso para 01 o que estamos fazendo, basicamente aqui está convertendo para um número de ponto flutuante primeiro a partir de que 0 para 2 55 imager e, em seguida, dividindo-o por 2 55 para re escala que os dados de entrada 20 para 1. Já falamos antes sobre a importância de normalizar seus dados de entrada, e isso é tudo o que estamos fazendo aqui. Estamos apenas pegando dados que começaram como dados de 8 bits 0 a 2 55 e convertendo isso em valores de ponto flutuante de 32 bits entre zero e um. Está sempre acontecendo lá como antes, vamos converter rótulos ARD em um formato quente, então isso é o que muito categórico faz por você. Ele apenas converte os dados do rótulo tanto no treinamento quanto na data do teste é definida. Teoh um quente 0 10 valores. Vamos seguir em frente e executar o bloco anterior lá antes que esqueçamos e vamos correr. Isto está bem outra vez. Estou só a fazer um turno. Digite depois de selecionar os blocos de código apropriados aqui. Tudo bem, como antes, vamos visualizar alguns dos dados apenas para ter certeza de que eles foram carregados com sucesso. Isso é praticamente o mesmo que o exemplo anterior. Vamos apenas olhar para os dados de entrada para um número de amostra. 1234 e pudemos ver que são um hot label aqui está mostrando um e posição para e desde que começamos a contá-lo, 00123 Isso indica rótulo três. Usar não são Max. Isso nos devolve o rótulo legível por humanos. E reformulando essa matriz de 768 pixels em uma forma de dois D, podemos ver que esta é a tentativa de alguém de desenhar o número três. OK, até agora, então bons dados de armadura parece que faz sentido e foi carregado corretamente. Lembrem-se disso, quando lidamos com fluxo de tensão, tivemos que fazer um monte de trabalho para configurar nossa rede neural. Vamos ver o quão mais fácil é com carícia tudo o que precisamos fazer é dizer que estamos configurando um modelo, um modelo sequencial. E isso significa que podemos adicionar camadas individuais à nossa rede neural uma camada de cada vez , sequencialmente, se quiserem. Então vamos começar adicionando uma camada densa de 512 neurônios com uma forma de entrada de 784 neurônios. Então esta é basicamente a nossa primeira camada que pega os nossos 784 sinais de entrada de cada imagem um para cada pixel e a alimenta em uma camada oculta de 512 neurônios. E esses neurônios terão a função de ativação rela oh associada a, hum Então, com uma linha de código, fizemos um monte de trabalho que tivemos que fazer no fluxo de tensor antes, e então, em cima disso, colocaremos uma ativação máxima suave em cima dela para uma camada final de 10 que irá mapear para a nossa classificação final do que um número deste representa de 0 a 9. Ok, então não foi tão fácil. Podemos até pedir cuidado é nos trazer de volta um resumo do que criamos apenas para garantir que as coisas fiquem do jeito que esperávamos. E com certeza, temos duas camadas aqui, você sabe, você sabe, uma que tem 512 e, em seguida, indo para uma camada de 10 neurônios para a classificação final. E isso meio que omite a camada de entrada. Mas nós temos essa forma de entrada de 784 feições indo para a primeira camada. Tudo bem agora, você também deve se lembrar que foi uma espécie de dor na bunda para obter a otimização e perda de função configurado no Tensorflow novamente. É um forro único em carícia. Bem, temos que fazer é dizer que são perdidos Função é entropia cruzada categórica, e ele vai saber o que fazer lá. Vamos usar o otimizador de prop RMS só por diversão. Poderíamos usar qualquer um que quiséssemos. Poderíamos ver Adam se você quisesse. Ou há outras opções, como a Oito. Um SG graduado pode ler sobre aqueles neste link aqui se você quiser, e vamos medir a precisão à medida que avançamos. Então esse é todo aquele ditado, vamos em frente e acertar isso e isso irá construir o gráfico subjacente que queremos executar no fluxo de tensor. Tudo bem, então agora nós realmente temos que executá-lo. E mais uma vez, isso é apenas uma linha de código com carícia. Tudo o que precisamos fazer é dizer que eles estavam indo para caber este modelo usando esses dados de treinamento definir esses ar os recursos de entrada, as camadas de entrada que estavam indo para treinar com. Queremos usar tamanhos de lote de 100. Vamos fazer isso 10 vezes. Eu vou definir de nível de verbosidade de dois porque isso é o que funciona melhor com um notebook noite olho Python e para validação, vamos fornecer o conjunto de dados de teste também. Então, em vez de escrever essa grande função que considera aprender à mão como fizemos na carícia do fluxo de tensor faz tudo por nós. Então vamos em frente e bater, mudar, mudar, entrar e chutar aquele escritório. Bem, agora a carícia é mais lenta que o fluxo de tensão, e você sabe que está fazendo um pouco mais de trabalho sob o capô, então isso vai levar mais tempo, mas você verá que os resultados são realmente bons. Quero dizer, mesmo naquela primeira geração, já combinamos a precisão que obtivemos após 2000 iterações em nossa implementação de fluxo de tensor codificado manualmente . Já estamos na Epoch 6 e estamos nos aproximando de 99% de precisão em nossos dados de treinamento. Tenha em mente que isso está medindo a precisão no conjunto de dados de treinamento, e estamos quase lá, mas sim. Quero dizer, mesmo com apenas 10? - varíola? Fizemos muito melhor do que usar o fluxo de tensão. E mais uma vez, você sabe, carícia é meio que fazer um monte de coisas certas para você automaticamente, sem fazer você sequer pensar sobre isso. Esse é o poder da carícia. Mesmo que seja mais lento, pode lhe dar melhores resultados em menos tempo no final do dia. Agora, aqui está algo que não poderíamos realmente fazer facilmente com o fluxo de transferência. É possível. Eu só, você sabe, não entrei porque aquela palestra foi longa o suficiente. É waas? Mas lembre-se que nós podemos realmente integrar carícia com aprendizagem psíquica para que possamos apenas dizer modelo de ponto avaliar. E isso é como um modelo psíquico aprendido. Como faras Pythons preocupação e realmente medir com base em nossos dados de teste, definir qual é a precisão e usar o conjunto de dados de teste como um benchmark, ele teve uma taxa de sucesso de 98% classificar incorretamente essas imagens, então isso não é ruim. Agora, lembre-se, muita pesquisa vai para otimizar isso, e esse problema de conjunto de dados em 98% não é realmente considerado um bom resultado. Como eu disse mais tarde no curso, vamos falar sobre algumas abordagens melhores que podemos usar. Mas, ei, isso é muito melhor do que tivemos na palestra anterior, não é? Como antes, vamos em frente e dar uma olhada em alguns dos que ele errou apenas para ter uma sensação de onde ele tem problemas as coisas que estão. rede neural tem desafios. O código aqui é semelhante. Nós vamos apenas passar pelas primeiras 1000 imagens de teste aqui, e como ele tem uma taxa de precisão muito maior, nós temos que ir mais fundo nisso. Testado para encontrar exemplos de coisas que deram errado irá remodelar cada dado cada imagem e fazer uma matriz plana de 784 pixels, que é o que são rede neural espera é entrada. Ligue para o nosso Max sobre a classificação resultante e um formato quente e veja se essa classificação prevista corresponde ao rótulo real para esses dados. Se não imprimir. Tudo bem, então você pode ver aqui que este modelo realmente está indo melhor. O que disse que está a errar são muito vacilantes. Certo, então, neste caso, nós previmos que este era o número nove. E se eu mesmo olhasse para isso, eu diria que era um nove também. Acontece que essa pessoa estava tentando desenhar o número quatro, mas, você sabe, este é um caso em que até mesmo um cérebro humano está começando a ter problemas sobre o que essa pessoa estava realmente tentando escrever. Eu não sei o que isso deveria ser. Aparentemente, eles estavam tentando desenhar o número quatro. Nosso melhor palpite foi o número seis não irracional, dada a forma das coisas. Aqui está alguém que estava tentando desenhar, também. Mas parece muito mais com um sete de novo. Eu estaria muito seguro sobre isso. Então, você sabe, mesmo que nós nivelemos esses dados para uma dimensão, esta rede neural que nós construímos já está rivalizando com o cérebro humano em termos de reconhecimento de caligrafia nesses números. Quero dizer, isso é incrível que um, e eu provavelmente teria adivinhado um três naquele, mas novamente. Você pode ver que a qualidade do material que tem problemas com é realmente escassa. O que é isso, um escorpião? Aparentemente, era para ser um oito. E nosso melhor palpite foi dois. Mas isso é muito Uau. Ok, sim, algumas pessoas realmente não podem. Certo? Isso é um sete. Sim. Quero dizer, você entende o ponto aqui, então só usando carícia sozinha, conseguimos uma precisão melhor. Temos um resultado melhor porque há menos em que pensar. Tudo bem. E você provavelmente pode ter melhorado sobre isso ainda mais novamente como antes. Com fluxo de tensão. Eu quero que você volte e veja se você realmente melhora esses resultados. Tente usar um otimizador diferente do RMS prop try. Você sabe, desculpas diferentes. E a beleza com carícia é que é muito mais fácil tentar essas diferentes desculpas agora, certo? Cenouras realmente vem em sua documentação com um exemplo de uso de anistia, e esta é a topologia real que eles usam em seus exemplos. Então, volte. Experimente, veja se é melhor ou não. Veja se consegue melhorar as coisas. Uma coisa que você pode ver aqui é que eles estão realmente adicionando camadas de abandono para evitar excesso ajuste. Portanto, é muito fácil adicionar esses tipos de recursos aqui. Basicamente, nós fizemos aqui é em uma mesma camada densa, 512 neurônios escondidos pegando 17 84 características. E então vamos retirar 20% dos neurônios que a próxima camada para forçar o aprendizado a ser espalhado mais e evitar o excesso de ajuste. Então, pode ser interessante ver se isso realmente melhora seus resultados no conjunto de dados de teste adicionando essas camadas de abandono. Tudo bem, então vá brincar com a mãe volte. Faremos coisas ainda mais interessantes usando carícia. 10. Como usar as as ações de e a e a: Então foi muito mais fácil usar carícia, não foi? Agora, os dados M NIST dizem, é apenas um tipo de problema que você pode resolver a rede neural. É o que chamamos de classificação multi-classe, multi classe, porque as classificações que estávamos ajustando variam do número zero até nove. Então, neste caso, tínhamos 10 diferentes valores de classificação possíveis, e isso torna isso um problema de classificação de várias classes. Agora, baseado na carícia é documentação e exemplos. Eles têm conselhos gerais sobre como lidar com diferentes tipos de problemas. Então, aqui está um exemplo de como eles sugerem a configuração de um problema de classificação de várias classes em geral. Então você pode ver aqui que nós temos para ele camadas. Aqui temos uma dimensão de entrada de quantos recursos você tem vindo para o sistema. Neste exemplo, há 20, mas dependendo da natureza do seu problema, pode haver mais. Está configurando para camadas de função de ativação rela, cada uma com 64 neurônios cada uma e outra vez, isso é algo que você gostaria de uma melodia, dependendo da complexidade do que você está tentando alcançar, ele grudando em um camada de abandono para descartar metade dos neurônios e cada etapa de negociação novamente. Isso é para evitar o excesso de encaixe. E no final, ele está usando uma ativação máxima suave para um dos 10 valores de saída diferentes neste exemplo. Ok, então é assim que eles resolvem o problema da anistia dentro de sua própria documentação. Eles então usam um otimizador SG em uma função de perda cruzada e entropia categórica. Então, novamente, você poderia apenas se referir ao aumento do carrossel para algum ponto de partida geral em algum lugar começar a partir de pelo menos quando você está enfrentando um tipo específico de problema novamente, o número real de neurônios e o número de camadas, o número de entradas e saídas. Bem, obviamente, muito dependendo do problema, você está tentando resolvê-lo. Esta é a orientação geral que eles lhe dão sobre o que a função de perda correta é para começar . Qual o otimizador certo para começar pode ser outro tipo de problema de classificação é comprar uma reclassificação? Talvez você esteja tentando decidir se imagens ou pessoas são fotos de machos ou fêmeas podem estar tentando decidir se o partido político de alguém é democrata ou republicano. Se você não tem nenhum ou tipo de problema, então isso é o que chamamos de problema de classificação binária, e você pode ver aqui. Recomendação aqui é usar uma função de ativação sigmóide no final em vez de soft max , porque você realmente não precisa da complexidade do soft max se você está apenas tentando, tipo, ir entre zero e um. Então sigmóide é a função de ativação de escolha. No caso de classificações binárias, eles também estão recomendando o otimizador de prop RMS, e a função perdida neste caso será entropia cruzada binária em particular tão poucas coisas que são especiais sobre como fazer a classificação binária como em oposição a multi classe. Finalmente, eu quero falar um pouco mais sobre usar carícia com a psicose. Ele aprende. Isso faz com que seja muito mais fácil fazer coisas como validação cruzada. E aqui está um pequeno trecho de código de como isso pode parecer. Então aqui está uma pequena função que cria um modelo que pode ser usado com a psicologia, aprendeu. Basicamente, temos ah criar função modelo aqui que cria nossa rede neural real. Então estamos usando um modelo sequencial, colocando uma camada densa com quatro entradas e seis neurônios e essa camada que se alimenta para outra camada oculta de quatro neurônios. E finalmente ele está indo para um classificador binário no final com uma função de ativação sigmóide . Então, um pequeno exemplo de criação de um pouco comprando classificações Eri rede neural. Podemos então configurar um estimador usando a função classificador de carícia lá, e isso nos permite recuperar um estimador compatível com psicologia. Ele aprende. Então você vê no final lá nós estamos realmente passando esse estimador para psíquico aprende a função de pontuação cruzada Val e isso permitirá que a psique aprenda a executar sua rede neural como se fosse qualquer outro modelo de aprendizado de máquina construído na psicologia. Ele aprende que significa pontuação Val cruzada pode treinar automaticamente seu modelo e, em seguida, avaliar seus resultados usando validação cruzada cuidadosa e dar-lhe um resultados muito significativos para quão preciso ele é em sua capacidade de prever corretamente as classificações para dados que nunca foi visto antes. Então, o que esses trechos debaixo do nosso cinto? Vamos experimentar, um, um, ou um exemplo interessante. Vamos finalmente ir além da amostra de anistia que vamos fazer é tentar prever os partidos políticos do congressista apenas com base em seus votos no Congresso usando a biblioteca de carícia . Então vamos tentar isso agora. Isto vai ser um exemplo que vou dar a vocês para se experimentarem como um exercício. Por isso vou ajudar-te a carregar estes dados e a limpá-los. Mas depois disso, vou deixar que você implemente uma rede neural com carícia para classificar essas coisas de novo, para fazer backup. O que vamos fazer é carregar alguns dados sobre um monte de votos no Congresso que vários políticos fizeram. E vamos tentar ver se podemos prever se um político é republicano ou democrata, apenas baseado em como eles votaram em 17 questões diferentes. E estes são dados mais antigos são de 1984. Então você definitivamente precisa ter uma certa idade, digamos, para lembrar quais eram essas questões. E se você é de fora dos Estados Unidos apenas para lhe dar uma breve cartilha na política dos EUA , basicamente há dois principais partidos políticos nos Estados Unidos, os republicanos, que tendem a ser mais conservadores, e os Democratas, que tendem a ser mais progressistas, e obviamente esses mudaram ao longo dos anos. Mas essa é a refeição atual. Então vamos deixar nossos dados de amostra. Vou usar a biblioteca Pandas. Isso faz parte do nosso ambiente Python científico aqui. Para realmente carregar esses arquivos CSB ou apenas arquivos de dados de valor separados por vírgulas e massagear dados, limpe-o um pouco e obtê-lo em uma forma que carícia pode aceitar. Então vamos começar importando. A Biblioteca Panis vai chamar a polícia para abreviar. Eu construí esta matriz de nomes de colunas porque ele não é realmente parte do arquivo C S V , então eu preciso fornecer isso manualmente. Então as colunas dos dados de entrada serão o partido político, republicano ou democrata, e então uma lista de diferentes votos que eles votaram. Assim, por exemplo, podemos ver se cada político votou sim ou não em grupos religiosos e escolas. E eu realmente curto os detalhes desse projeto de lei em particular foram. Mas ao ler estes, você provavelmente pode adivinhar a direção em que os diferentes partidos provavelmente votariam . Então vá em frente e leia o arquivo CSP. Usando pandas ler ver função SV. Vamos dizer que quaisquer valores ausentes serão preenchidos com um ponto de interrogação e passarão em uma matriz de nomes do nome da feição. Então, sabemos o que chamar as colunas que apenas exibirão o quadro de dados resultante usando o comando head. Então vá em frente, Hit , shift, enter para obter isso e devemos ver algo como isso é apenas as primeiras 5 entradas. Então, para os primeiros 5 políticos à frente de nossos dados, podemos ver como o partido de cada pessoa está no rótulo que atribuímos a essa pessoa, o rótulo conhecido que vamos tentar prever e seus votos em cada questão. Agora, também podemos usar a função de descrição no quadro de dados resultante para obter uma visão geral de alto nível da natureza dos dados. Por exemplo, você pode ver esse monte de dados ausentes, por exemplo, mesmo que haja 435 pessoas no tenham uma parte associada a elas. Em Lee, 387 deles realmente tiveram uma votação sobre o projeto de lei de compartilhamento de custos do projeto de água, por exemplo. Então temos que lidar com dados perdidos aqui de alguma forma. E a coisa mais fácil a fazer é simplesmente jogar fora Rose que tem dados perdidos Agora, no mundo real, você gostaria de ter certeza de que você não está introduzindo algum tipo de preconceito involuntário fazendo isso. Talvez haja mais tendência para os republicanos não votarem do que os democratas ou vice-versa . Talvez haja mais tendência para os republicanos não votarem do que os democratas ou vice-versa Se esse fosse o caso, então você poderia estar tendenciando sua análise jogando fora políticos que não votaram em todas as questões reais aqui. Mas vamos supor que não existe tal preconceito e podemos simplesmente ir em frente e descartar esses valores que faltam . Isso é o que esta pequena linha aqui faz. Diz: “ Solte um lugar no lugar”. Era verdade. Isso só significa que vamos soltar quaisquer linhas que estão faltando dados do nosso quadro de dados de votação . E então vamos descrever novamente e devemos ver que cada coluna tem a mesma contagem porque não há dados ausentes neste ponto. Então temos janelas para 232 políticos aqui, não é o ideal. Mas, ei, é com isso que temos que trabalhar. A próxima coisa que precisamos fazer é massagear esses dados em uma forma que carícia possa consumir . Então Carris não lida com sábios e fins. Ele lida com números, então vamos substituir todos os sábios e termina com uns e zeros usando esta linha aqui. Panis tem uma função dandy útil substituído em quadros de dados que ele pode usar para fazer isso e mesma forma irá substituir as cordas Democrata e Republicano, também com os números um e zero. Então isso está transformando isso em um problema de classificação binária. Se classificar alguém como pertencente ao rótulo 1, e isso indicará que é democrata e rotulado zero indicará que é republicano. Então vamos em frente e executar que limpar esses dados, e devemos ver agora se você correr à frente no quadro de dados novamente. Tudo foi convertido em dados numéricos entre zero e um, que é exatamente o que queremos para a entrada de uma rede neural. Tudo bem, finalmente, vamos extrair esses dados em, uh, um aumento de torta que podemos realmente alimentar para acariciar. Então, para fazer isso, vamos apenas chamar valores de ponto nas colunas que nos importamos. Nós vamos extrair todas as colunas de feição para a matriz de recursos e todos os rótulos reais as partes reais em em todas as classes matriz. Então vamos em frente e entrar para obter isso dentro e neste ponto, eu vou entregá-lo para você. Por agora. Os trechos de código que você precisa foram realmente abordados nos slides pouco antes de sair para este caderno aqui. Então apenas se refira a isso, e isso deve lhe dar as coisas que você precisa trabalhar fora e realmente dar uma chance para as coisas aqui. Então eu quero que você tente sozinho. Agora, a minha resposta está aqui em baixo. Sem espreitar. Eu coloquei um pouco de farra lá para tentar impedi-lo de rolar mais longe do que deveria. Mas se quiser fazer uma pausa aqui, podemos voltar mais tarde. E você pode comparar seus resultados com os meus. Ok, então neste momento, eu quero que você pause este vídeo e dê uma chance você mesmo. E quando você acha que tem algo funcionando ou se você apenas ah, quer pular em frente e ver como eu fiz isso, toque em play novamente e eu vou te mostrar agora mesmo. Tudo bem. Espero que tenha feito seu dever de casa aqui. Vamos dar uma olhada na minha implementação aqui novamente. É praticamente em linha reta. Tirado dos slides que mostrei mais cedo. Tudo o que vamos fazer é importar as coisas que precisamos da Caris aqui. Estamos usando densa desistência e sequencial, e nós também vamos usar cruz Val marcou realmente modelo avaliador e realmente ilustrar integrando carícia com psíquico aprendido como falamos também. Então, quando foram entrevistados com, como, ele aprende que precisamos criar uma função que cria nossos modelos. Podemos passar isso para o cross Val Score. Em última análise, vamos criar um modelo sequencial, e vamos apenas seguir o padrão que mostramos antes de fazer um problema de classificação binária . Então, neste caso, temos 16 questões diferentes que as pessoas votaram. Vamos usar uma função de ativação rela com uma camada de 32 neurônios. E um padrão bastante comum é começar com um grande número de neurônios e uma camada e janela coisas para baixo como você obtém as camadas mais altas. Então vamos destilar esses 32 neurônios para outra camada oculta de 16 neurônios, e eu estou usando o termo unidades neste exemplo particular aqui um pouco de um lado, Mawr e Mawr pesquisadores ar usando o termo unidade em vez de neurônio. E você está vendo isso em alguns dos olhos da AP e bibliotecas que estão saindo. razão é que estamos começando a divergir um pouco entre as redes neurais artificiais e como elas funcionam e como o cérebro humano realmente funciona em alguns casos estavam melhorando na biologia. Então, alguns pesquisadores estão tendo problemas em chamar esses neurônios artificiais porque estamos indo além dos neurônios, e eles estão se tornando sua própria coisa neste momento. Finalmente, teremos uma última camada com um único neurônio de saída. Pois há classificação binária com uma função de ativação sigmóide para escolher entre zero e um, e vamos usar a função de perda de entropia cruzada binária o Adam Optimizer e chutá-lo. Nesse ponto, consideramos um classificador de carícia para realmente executar isso, e vamos criar um objeto estimador a partir do que podemos então passar para a psicose. Ele aprende cruz viale pontuação toe, realmente realizar K dobra validação cruzada automaticamente, e vamos exibir o resultado médio quando terminarmos. Então mude, entre e veja quanto tempo isso leva. Lembre-se que em 1984 os políticos não foram tão polarizados como são hoje, então pode ser um pouco mais difícil do que seria hoje. Prever os partidos de alguém apenas com base em seus votos será muito interessante ver se esse é o caso usando dados mais modernos. Ei, nós já terminamos 93,9% de precisão, e isso é mesmo sem tentar muito. Então, você sabe, nós realmente não gastamos nenhum tempo ajustando a topologia desta rede. Tudo isso talvez você pudesse fazer um trabalho melhor, você sabe, se você conseguiu resultados significativamente melhores, postar isso no curso aqui, tenho certeza que os alunos gostariam de ouvir sobre o que você fez. Então você tem isso usando quilates para amore. Exemplo interessante. Prever os partidos políticos das pessoas usando uma rede neural e também integrá-la com psíquica aprendeu a tornar a vida ainda mais fácil. Essa é a magia da carícia para você. 11. Redes neurais de a Convolutional: Até agora, vimos o poder de usar apenas um perceptron multicamada simples para resolver uma grande variedade de problemas. Mas você pode levar as coisas a um nível alto. Sheikhoun organizar Maura complicado redes neurais juntos e fazer problemas mais complicados com eles. Então vamos começar falando sobre convolução sozinha, redes neurais ou CNN para abreviar. Normalmente, você ouve falar sobre CNN's no contexto da análise de imagens, e seu ponto principal é encontrar coisas em seus dados que podem não estar exatamente onde você espera que estejam. Então, tecnicamente, chamamos esse local de recurso. Na variante, isso significa que se você estiver procurando algum padrão ou algum recurso em seus dados, mas você não sabe exatamente onde pode estar em seus dados, uma CNN pode escanear seus dados e encontrar esses padrões para você onde quer que eles estejam. Então, por exemplo, nesta foto aqui, esse sinal de stop pode estar em qualquer lugar na imagem, e uma CNN é capaz de encontrar esse sinal de stop, não importa onde ele possa estar. Agora, não se limita apenas à análise de imagens. Ele também pode ser usado para qualquer tipo de problema onde você não sabe onde os recursos que você está podem estar localizados em seus dados, tradução automática ou testes de processamento de linguagem natural . Venha à mente para isso, você não sabe necessariamente onde o substantivo ou o verbo ou uma frase que você gosta pode estar em algum percentual de parágrafo e dizer que você está analisando, mas uma CNN confinou e escolhe-o para você. Análise de Sentimentos. Outra aplicação da CNN para que você não saiba exatamente onde uma frase pode estar que indica algum sentimento feliz ou algum sentimento frustrado, ou o quê? O que quer que esteja procurando. Mas uma CNN pode escanear seus dados e retirá-los, e você verá que a idéia por trás deles não é tão complicada quanto parece. Este é outro exemplo de usar palavras extravagantes. Teoh faz as coisas parecerem mais complicadas do que realmente são. Então, como eles funcionam? Enquanto a convolução da CNN, todas as redes neurais são inspiradas na biologia do seu córtex visual, ele pega pistas de como seu cérebro realmente processa imagens de sua retina, e é muito legal. E também é outro exemplo de comportamento emergente interessante. Então, a maneira como seus olhos funcionam é que grupos individuais de neurônios servem uma parte específica de seu campo de visão. Então chamamos esses campos receptivos locais, apenas grupos de neurônios que respondem apenas a uma parte do que você é. Vejo que são sub-amostras da imagem vinda de suas retinas e só tem grupos especializados de neurônios para processar partes específicas do campo de visão que você vê com seus olhos. Agora essas pequenas áreas se sobrepõem para cobrir todo o seu campo visual, e isso é chamado de convolução. Convolução é apenas uma palavra extravagante de dizer que eu vou dividir esses dados em pequenos pedaços e processar esses pedaços individualmente, e então eles vão montar uma imagem maior do que você está vendo mais alto na cadeia. Então, a maneira como funciona dentro do cérebro é que você tem muitas camadas. É uma rede neural profunda que identifica várias cidades complexas de características, se preferir. Então, a primeira camada que você entra de sua convolução, toda a rede neural dentro de sua cabeça pode apenas identificar linhas horizontais ou linhas em ângulos diferentes ou, você sabe, tempos de corte específicos de bordas. Nós chamamos esses filtros, e isso pode se alimentar em uma camada acima deles que então montaria as linhas que ele identificou no nível inferior em formas. E talvez haja uma camada acima que seria capaz de reconhecer objetos com base nos padrões de formas que você vê. E então, se você está lidando com imagens coloridas, temos que multiplicar tudo por três porque você realmente tem células especializadas dentro do seu direito o suficiente para detectar luz vermelha, verde e azul. E precisamos juntar essas coisas também. Cada um deles é processado individualmente para isso é tudo que uma CNN é. É apenas pegar uma fonte, imagem ou fonte de dados de qualquer tipo, realmente dividi-lo em pequenos pedaços chamados de convoluções. E então nós os montamos e procuramos padrões e complexidades cada vez mais altas em níveis mais altos em sua rede neural. Como é que o teu cérebro sabe que estás a olhar para um sinal de “stop “? Vamos falar sobre isso e mais linguagem coloquial, se você quiser. Então, como dissemos, você tem campos receptivos locais individuais que são responsáveis pelo processamento de partes específicas do que você vê e esses campos receptivos locais escaneando sua imagem e eles se sobrepõem uns aos outros à procura de arestas. Você pode notar que seu cérebro é muito sensível às bordas de contraste que ele vê no mundo tende a chamar sua atenção, certo? É por isso que as letras neste slide chamam sua atenção porque há alto contraste entre as letras e o fundo branco por trás delas. Então, em um nível muito baixo, você está escolhendo nas bordas desse sinal de stop e as bordas das letras no sinal de stop Agora. . Ah, nível mais alto pode pegar essas bordas e reconhecer a forma do que a Ciência diz. Há um octógono que significa algo especial para mim. Ou essas letras formam a palavra “stop”. Isso significa algo especial para mim, também, e isso vai ser comparado com qualquer padrão de classificação que seu cérebro tem de um sinal de stop. Então, não importa qual campo receptivo pegou esse sinal de parada em alguma camada, ele será reconhecido em um sinal de parada. Além disso, você está processando dados e cores, ele também pode usar a informação de que o sinal de stop é vermelho e usá-lo ainda mais para ajudar na sua classificação do que esse objeto realmente é. Então, em algum lugar na sua cabeça, há uma rede neural que diz: “ Ei, Ei, se eu ver bordas organizando um padrão octógono que tem um monte de vermelho nele e diz: “ Pare no meio. Isso significa que eu provavelmente deveria bater nos freios do meu carro e é um nível ainda mais alto. O cérebro estranho está fazendo um raciocínio mais alto. Foi o que aconteceu. Há uma escuta que diz: “ Ei, Ei, tem um sinal de “stop “chegando aqui. É melhor eu apertar os freios no meu carro. E se você está dirigindo há tempo suficiente, você nem pensa mais nisso. Você gosta É quase duro com fio, e que literalmente pode ser o caso de qualquer maneira. Uma convolução, toda rede neural, uma convolução artificial. Toda a rede neural funciona da mesma maneira. Exatamente a mesma ideia. Então, como se constrói uma CNN com carícia? Obviamente, você provavelmente não quer fazer isso na camada de fluxo de tensão de nível inferior que você pode. Mas a CNN fica muito complicada. Uma biblioteca de nível superior, como cenouras, torna-se essencial. Primeiro de tudo, você precisa se certificar de que seus dados de origem são das dimensões apropriadas da forma apropriada , se preferir, e você estará preservando a estrutura real de dois D de uma imagem. Se você estiver lidando com dados de imagem aqui, então a forma de seus dados pode ser a com vezes o comprimento, tempos, o número de canais de cores e por canais de cores. Quero dizer, se é uma imagem em preto e branco, há apenas uma cor preto e branco, então você não tem um canal de cores para uma imagem em tons de cinza. Mas se for uma imagem colorida, você terá três canais de cores, um para vermelho, um para verde e outro para azul, porque você pode criar qualquer cor combinando vermelho, verde e azul juntos. Ok, agora existem alguns tipos especializados de camadas em Carriacou usar quando você está lidando com convolução, todas as redes neurais, por exemplo, há o tipo de camada de conversão para D que faz o convolução real em uma imagem de dois D. E novamente, convolução está apenas dividindo essa imagem em pequenos subcampos que se sobrepõem uns aos outros para processamento individual. Há também um conv um D e um con três D camada disponível também. Você não tem que usar CNN com imagens como dissemos. Ele também pode ser usado com dados de texto, por exemplo. Isso pode ser um exemplo de dados unidimensionais, e também é um golpe. Três camadas D também está disponível. Se você está lidando com dados volumétricos de três D de algum tipo. Então, as muitas possibilidades lá têm uma camada especializada e carícia para CNN. Max está se reunindo para D? Obviamente, isso é um um D e três D muito em que também. A idéia disso é apenas reduzir o tamanho de seus dados para baixo. Então, se eu pegar apenas o valor máximo visto em um determinado bloco de uma imagem e reduzi-lo a camada para baixo para aqueles valores máximos, é apenas uma maneira de reduzir as imagens de tal forma que ele pode reduzir a carga de processamento na CNN. Como você verá o processamento, CNN's é muito intensivo em computação, e quanto mais você pode fazer para reduzir o trabalho, você tem que fazer melhor. Então, se você tem mais dados em sua imagem do que você precisa de um máximo, puxar duas camadas D pode ser útil para destilá-lo até a essência nua do que você precisa analisar. Finalmente, em algum momento você precisa alimentar esses dados em uma camada plana de neurônios, certo que em algum momento vai entrar em um perceptron, e nesta fase, precisamos achatar que duas camadas D em uma camada D para que pudéssemos passar para uma camada de neurônios. E a partir desse ponto, ele apenas se parece com qualquer outra percepção de vários níveis. Então a magia da CNN realmente acontece em um nível mais baixo, você sabe. Em última análise, ele é convertido no que parece ser o mesmo tipo de multi-camada Perceptron é que temos usado antes da magia acontecer e realmente processar seus dados envolvendo-o e reduzi-lo para algo que é gerenciável. Então o uso típico de processamento de imagem com a CNN seria assim. Você pode começar com uma camada de conto que faz a convolução real de seus dados de imagem. Você pode acompanhar isso com um máximo puxando duas camadas D em cima disso que destila imagem para baixo apenas diminui a quantidade de dados que você tem que lidar com. Você pode então fazer uma camada de abandono em cima disso, que apenas impede o excesso de encaixe como falamos antes. Nesse ponto, você pode aplicar uma camada achatada para realmente ser capaz de alimentar esses dados em um perceptron, e é aí que um densamente ou pode entrar em jogo. Tão densa camada e carícia é apenas um Perceptron, realmente, você sabe, é uma camada de, ah, camada escondida de neurônios. A partir daí, ele pode fazer outro passado para evitar ainda mais o ajuste excessivo e, finalmente, fazer um máximo suave para escolher a classificação final que sai da sua rede neural agora. Como eu disse, CNN é nossa computação intensiva. Eles são muito pesados e sua CPU, seu GP você e seus requisitos de memória embaralhando todos os dados ao redor envolvendo ele acrescenta-se muito, muito rápido. E além disso, há muito do que chamamos de hiper parâmetros, muitos botões e mostradores diferentes que você pode ajustar nos CNN's. Assim, além das coisas habituais, você pode sintonizar como a topologia de sua rede neural ou o que otimizar seu usuário, o que perdeu a função a usar ou qual função de ativação usar. Há também escolhas a fazer sobre os tamanhos do coronel. Qual é a área em que você realmente envolve? Quantas camadas você tem? Quantos anos você tem? Quanto pool você faz quando reduz a imagem para baixo? Há um monte de vários aqui que é quase uma quantidade infinita de possibilidades aqui para configurar um CNN e muitas vezes. Apenas obter os dados para treinar sua CNN com é a parte mais difícil. Então, por exemplo, se você quer Tesla que está realmente tirando fotos do mundo ao seu redor na estrada redor e todos os sinais de rua e semáforos enquanto você dirige e todas as noites ele envia todos aqueles imagens de volta para alguns servidores de dados em algum lugar. Então Tesla pode realmente executar treinamento em suas próprias redes neurais com base nesses dados. Então, se você bater no freio enquanto você está dirigindo um Tesla à noite, essa informação vai ser acelerada para um grande data center em algum lugar, e Tesla vai quebrar isso e dizer, Ei, há um padrão aqui para ser aprendido do que eu vi das câmeras do carro? Isso significa que você deve bater nas quebras no caso de um carro auto dirigindo, e você pensa sobre o escopo desse problema, apenas a pura magnitude de processamento e obtenção e análise de todos os dados que se tornam muito desafiadores em si mesmo. Agora, felizmente, o problema de ajustar os parâmetros não tem que ser um SARD, como eu descrevi, existem arquiteturas especializadas de convolução, todas as redes neurais que fazem algumas desse trabalho para você. Então, a pesquisa Lauder vai para tentar encontrar as desculpas e parâmetros ideais para uma CNN para um determinado tipo de problema, e você poderia pensar que isso é como uma biblioteca que você pode desenhar. Então, por exemplo, há a arquitetura Lynette cinco que você pode usar que é adequada para reconhecimento de escrita manual . Em particular, há também um chamado Alex Net, que é apropriado para classificação de imagens. É uma rede neural mais profunda do que Lynette, você sabe. Então, no exemplo que falamos no slide anterior, então tínhamos apenas uma única camada oculta. Mas você pode ter quantos quiser liberados como uma questão de quanto poder computacional você tem disponível. Há também algo chamado Google Lynette. Você provavelmente pode adivinhar quem inventou isso. É ainda mais profundo, mas tem melhor desempenho porque introduz este conceito chamado Módulo Inicial. Eles basicamente agrupam camadas de convolução juntas, e isso é uma otimização útil para como tudo funciona. Finalmente, o mais sofisticado hoje é chamado de rede rez que significa rede residual. É uma rede neural ainda mais profunda, mas mantém o desempenho pelo chamado “Skip Connection”. Portanto, ele tem conexões especiais entre as camadas do Perceptron para acelerar ainda mais as coisas. Então, é uma espécie de constrói sobre a arquitetura fundamental de um dedo do pé de rede neural, otimiza seu desempenho, e como você verá CNN, pode ser muito exigente em desempenho. Então, com isso, vamos tentar. Vamos realmente usar uma CNN e ver se podemos fazer um trabalho melhor na classificação de imagens do que fizemos antes de usar uma. 12. Como usar o CNNs para reconhecimento de escrita para escrita: e vamos rever o problema de reconhecimento de caligrafia M NIST onde tentamos classificar um monte de imagens de pessoas estão desenhando o número é zero a nove e ver se poderíamos fazer um trabalho melhor. O uso de CNN contra CNNs é mais adequado para dados de imagem em geral, especialmente se você não sabe exatamente onde o recurso que você está procurando está dentro de sua imagem. Portanto, devemos esperar obter melhores resultados aqui. Tudo bem, então vamos começar importando todas as coisas que nós da Caress estávamos na importação do m este conjunto de dados que estavam brincando com o modelo sequencial para que possamos montar nossa rede neural . E então vamos importar todos esses tipos de camadas diferentes que falamos nos slides. O abandono denso calmo para De Max, puxando para t e achatando tipos de camada, e neste exemplo usará o otimizador de prop RMS. Vá em frente e chutar isso fora. E o resto aqui para carregar os dados de treino e teste vai parecer como antes. Ainda esperando por isso se preocupa em inicializar lá. Certo, então isso deve carregar o conjunto de dados M nus, vamos moldar o estado um pouco diferente. Desde a convolução, convolução, todas as redes neurais podem processar dados em D em toda a sua glória. Não vamos remodelar esses dados em matrizes simples de um D de 768 pixels. Em vez disso, vamos moldá-lo no com vezes o comprimento vezes o número de canais de cores. Então, neste caso, nossos dados são de natureza em tons de cinza. Portanto, há apenas um único canal de cores que define o quão escuro são as imagens o pixel específico. E há algumas maneiras diferentes de os dados serem armazenados. Então precisamos lidar com alguns casos diferentes aqui. Ele pode ser organizado como canais de cores por com o comprimento dos tempos ou pode ser com tempos, tempos vida, canais de cores. Então é com isso que este pequeno pedaço de código aqui está lidando. Mas de qualquer forma, vamos ver se é um primeiro formato de canais ou não, e remodelar os dados de acordo. E vamos armazenar essa forma nesta coisa chamada forma de entrada. Essa é a forma de nossos dados de teste de entrada e dados de treinamento . Como antes, vamos dimensionar esses dados para baixo, então eles vêm como dados de oito bits, e precisamos converter isso em ponto flutuante normalizado. Então vamos converter esses dados para valores flutuantes de 80.0.32 bits e, em seguida, dividir cada pixel por 2 55 para transformar isso em algum número entre zero e um. Vá em frente, bata, mude. Entre lá para chutar isso, tudo bem. E como antes, vamos converter os dados do rótulo em um formato quente e categórico porque isso combinará muito bem com a saída de nossa rede neural e nada diferente aqui. Acabamos de chegar novamente a uma verificação de sanidade para ter certeza de que importamos nossos dados com sucesso. Então vamos escolher um conjunto de treinamento aleatório impressão de dedo aqui em exibição. E há um formato quente dos três rotulados 0123 Isso está correto. Formato legível por humanos. Três. E parece que sim. Com certeza, isso parece o número três, então parece que nossos dados estão em boa forma para processamento. Então agora vamos realmente configurar uma CNN e ver como isso funciona. Então vamos analisar o que está acontecendo neste próximo bloco de código aqui como antes, começamos configurando um modelo sequencial que nos permite construir camadas muito facilmente para construir nossa rede neural aqui. E vamos começar com uma calma para negociante. Então o que esta sintaxe aqui significa é que nossa convolução, todas as duas camadas d, vai ter 32 janelas ou 32 campos regionais, se você quiser, que ele vai usar para amostrar essa imagem com e cada uma dessas amostras será três por três coronel tamanho. Ele também precisa saber a forma de seus dados de entrada que armazenamos anteriormente que CEO ganhou por 28 por 28 ou 28 por 28 por 28 por 28 por 28 por 28 por 28 por 28 por um, dependendo do formato de entrada. Lá, vamos então adicionar uma segunda convolução. Todos filtram em cima disso para, esperançosamente, identificar recursos de nível superior. Este terá 64 coronéis, também um tamanho de três por três, e vamos usar uma função de ativação de ação amarela nisso também. Então nós construímos para camadas de convolução aqui. Ah, e novamente você quer apenas reutilizar qualquer pesquisa anterior que você possa fazer para um determinado problema. Há tantas maneiras de configurar CNN's que se você começar do zero, você vai ter um tempo muito difícil para ajustá-lo, especialmente quando você considera quanto tempo leva para gerar entre cada execução. Estes são muito intensivos em recursos. Então eu só peguei isso do exemplo CNN que vem com a biblioteca de carícias e desenhou minha topologia inicial a partir dele. Então, agora que fizemos nossas camadas de convolução, vamos fazer um máximo puxando dois pés d, na verdade reduzir isso um pouco para baixo. Então vamos pegar um tamanho de pool de dois por dois e para cada bloco de dois por dois pixels neste estágio , vamos reduzir isso para um único pixel que representa o pixel máximo encontrado dentro desse pool. Portanto, note que o tamanho do pool pode ser diferente do tamanho do coronel subjacente da convolução. Então, realmente, esta é apenas uma técnica para reduzir seus dados para algo que é mais gerenciável neste momento. Vai fazer um abandono passado para evitar o excesso de encaixe. Então achataremos o que temos até agora. Então, isso vai levar R dois dados D e achatá-lo para uma camada de um d. E a partir deste ponto, ele só vai parecer com qualquer outro Perceptron multi-camada como nós usamos antes. Então toda a magia da CNN aconteceu neste momento, e agora vamos convertê-la em uma camada plana que inserimos em uma camada oculta de neurônios. Neste caso, vamos ter 128 nessa camada novamente com um trilho. função de ativação fará mais uma queda para fora passado para evitar excesso de ajuste e, finalmente escolher nossa categorização final do número zero a nove, construindo uma camada de saída final de 10 neurônios com facilidade. Função de ativação máxima suave nele. Tudo bem, então vamos em frente e deixar isso correr de novo. Nada está realmente acontecendo até que nós realmente chutemos o modelo, então isso não leva nenhum tempo em tudo. Podemos fazer um modelo esse resumo apenas para verificar se tudo está do jeito que pretendíamos que fosse. E você pode ver que temos duas camadas de convolução aqui, seguidas por uma camada de pool, seguido por uma queda de achatado. E a partir daí temos um denso abandono no Perceptron multicamada densa realmente fazer nossas classificações finais. Tudo bem, finalmente, precisamos compilar esse modelo com um otimizador específico e função perdida. Neste caso, vamos usar o Adam Optimizer e entropia cruzada categórica porque essa é a função de perda apropriada para um problema de classificação de várias categorias. E finalmente, vamos executá-lo agora. Como eu disse, ar da CNN é muito caro para funcionar. Então, quando falamos sobre o que este comando faz, primeiro lugar, nada incomum aqui apenas diz que vamos executar lotes de 32 que é menor do que antes, porque há um custo computacional muito maior de. Isso realmente tem que correr 10 épocas desta vez porque novamente, leva um longo tempo ou seria melhor. Mas não há muito tempo para fazer verbosidade nível dois porque é isso que você quer escolher para rodar dentro de um bloco de anotações python olho e vamos passar em nossos dados de teste de validação A para que ele funcione conosco? Bem, agora, eu não vou realmente executar isso porque isso pode realmente levar cerca de uma hora para ser executado, e se você não tem a máquina beefy, pode não terminar tudo. Você sabe, se você não tem RAM suficiente foram energia suficiente CPU. Isso pode até ser demais para um sistema. Então eu vou pular em frente aqui. Na verdade, fiz isso mais cedo e levou cerca de 45 minutos. Mas você pode ver que ele convergiu muito rapidamente para um vale de precisão muito bom aqui e ainda estava aumentando. Então provavelmente teria havido valor em ir além de 10 iterações do treinamento aqui. Mas mesmo depois de apenas 10 na caixa ou 10 iterações, acabamos com uma precisão de mais de 99%. E podemos realmente avaliar isso com base em nossos dados de teste e recriar essa precisão de 99%. Então isso é incrível. Então CNN é definitivamente vale a pena fazer se a precisão é fundamental e para aplicações onde vidas estão em jogo, como um carro auto-dirigindo, Obviamente que vale a pena o esforço, certo? Você quer precisão total de detectar se há um sinal de stop na sua frente, Alto Teeley , certo? Mesmo um erro de 0,1% será inaceitável numa situação como essa. Então esse é o poder da CNN. Eles são mais complicados para levar muito mais tempo para correr. Mas, como dissemos, o poder do fluxo de tensor, que carícia está em execução, significa que você pode distribuir seu trabalho por toda uma nuvem de computadores em uma matriz inteira de GP usar nosso em cada computador. Então, há maneiras de acelerar isso. Não estamos tirando vantagem disso neste pequeno exemplo. Aqui, é apenas ilustrativo. Então aí está, sua primeira convolução toda a rede neural, e você pode ver como ela é poderosa e fazer com sucesso a classificação de imagens, entre outras coisas. Muito legal, vamos passar para outro tipo de rede neural a seguir. 13. Redes neurais de novos de recas: Vamos falar sobre outro tipo de rede neural, a rede neural recorrente. Para que são os nossos e fins? Bem, algumas coisas, basicamente suas primeiras sequências de dados. E isso pode ser uma sequência no tempo para que você possa usá-lo para um processamento de dados de série temporal . Estamos tentando olhar para uma sequência de pontos de dados ao longo do tempo e prever que o comportamento futuro é algo ao longo do tempo. Por sua vez, então não são respostas baseadas para dados sequenciais de algum tipo. Alguns exemplos de dados sérios de tempo podem ser weblogs, onde você recebe diferentes acessos ao seu site ao longo do tempo, ou registros de sensores estavam recebendo entradas diferentes de sensores da Internet das coisas. Ou talvez você esteja tentando prever o comportamento das ações olhando para informações históricas de negociação de ações . Estes são todos os aplicativos potenciais para redes neurais recorrentes porque eles podem dar uma olhada no comportamento ao longo do tempo e tentar levar esse comportamento em conta quando ele faz projeções futuras. Outro exemplo pode ser Se você está tentando desenvolver um carro auto dirigindo, você pode ter um histórico de onde seu carro esteve. Suas trajetórias passadas, e talvez isso pode informar como seu carro pode querer virar no futuro, então você pode levar em conta o fato de que seu carro tem sido girando ao longo de uma curva para prever que talvez eles devem continuar a dirigir ao longo de uma curva até que a estrada se endireite. E outro exemplo. Não tem que ser apenas o tempo. Pode ser qualquer tipo de sequência de comprimento arbitrário. Então algo mais que vem à mente são línguas, você sabe, frases lá, apenas sequências de palavras, certo, então você também pode aplicar o nosso e fins para linguagem ou máquina. A tradução está produzindo legendas para vídeos ou imagens. Estes são exemplos de onde a ordem das palavras na frase pode importar, e a estrutura da frase e como essas palavras são colocadas juntas podem transmitir mais significado. Então você poderia começar apenas olhando para essas palavras individualmente sem contexto. Então, novamente, em nosso nn pode fazer uso dessa ordem das palavras e tentar usá-lo como parte de seu modelo. Outra aplicação interessante de são um fim é a música gerada por máquina. Você também pode pensar em música como texto, onde em vez de uma sequência de palavras ou letras, você tem uma sequência de notas musicais. Então é meio interessante. Você pode realmente construir uma rede neural que pode pegar uma peça de música existente e tipo de estender sobre ela usando uma rede neural recorrente para tentar aprender os padrões que eram esteticamente agradáveis para a música no passado. Conceitualmente, é assim que um único neurônio recorrente se parece em termos de um modelo. Então, parece muito com um Então, neurônio artificial que já vimos antes. A grande diferença é este pequeno laço aqui. Certo, então agora, enquanto executamos uma etapa de treinamento neste neurônio, alguns dados de treinamento são alimentados nele. Ou talvez isso seja uma entrada de uma camada anterior em nossa rede neural, e ele irá aplicar algum tipo de função passo depois de algo todas as entradas nele. Neste caso, vamos desenhar algo mais como uma tangente hiperbólica porque matematicamente, você quer ter certeza de que preservamos algumas das informações que chegam e mais de uma maneira suave. Agora, geralmente nós apenas produzimos o resultado dessa soma e essa função de ativação como a saída deste neurônio. Mas também vamos alimentar isso de volta para o mesmo neurônio. Então, na próxima vez que executarmos uma corrida, alguns dados através deste armazenamento em que os dados da execução anterior também são somados aos resultados. Ok, então, enquanto continuamos executando essa coisa uma e outra vez terá alguns novos dados chegando que se misturam com a saída da corrida anterior através deste neurônio, e isso apenas continua acontecendo uma e outra vez e outra vez . Então você pode ver que ao longo do tempo o comportamento passado deste neurônio influencia seu comportamento futuro , e influencia como ele aprende. Outra maneira de pensar sobre isso é desenrolá-lo no tempo. Então o que este diagrama mostra é o mesmo neurônio único, apenas três passos diferentes. E quando você começa a investigar a matemática de como nossos fins funcionam, esta é uma maneira mais útil de pensar sobre isso. Então, consideramos que este é o tempo, passo zero. Você pode ver que há algum tipo de entrada de dados entrando neste neurônio recorrente e que produzirá algum tipo de saída depois de passar por sua função de ativação. E essa saída também é alimentada para a próxima etapa de tempo. Então, se esta é a hora, passo um com o mesmo neurônio. Você pode ver que este neurônio está recebendo não apenas uma nova entrada, mas também a saída do passo de tempo anterior e aqueles se juntam alguns, a função de ativação é aplicada a ele, e isso recebe saída também. E a saída dessa combinação então é alimentada para o próximo passo de tempo chamado este passo de tempo para onde uma nova entrada para o tempo Passo dois é alimentado neste neurônio, e a saída do passo anterior também é alimentada dentro. Eles se juntam, a função de ativação é executada e nós temos uma nova saída. Isso é chamado de célula de memória porque ele mantém a memória de suas saídas anteriores ao longo tempo. E você pode ver que mesmo que esteja se juntando a cada passo ao longo do tempo, esses comportamentos anteriores meio que se diluem, certo? Então você sabe, nós estamos adicionando nesse tempo, passo para esse passo de tempo e, em seguida, algumas dessas duas coisas que trabalham para este, então uma propriedade de células de memória é que o comportamento mais recente tende a ter mais de um influência sobre o comportamento atual que você obtém de um neurônio recorrente, e isso pode ser um problema em algumas aplicações. Então, há maneiras de trabalhar contra isso que podemos falar mais tarde. A intensificar isto. Você pode ter uma camada de Irlanda recorrente, então você não precisa ter apenas uma, obviamente. Então neste diagrama estamos olhando para quatro neurônios recorrentes individuais que estão trabalhando juntos como parte de uma camada, e você pode ter alguma entrada. Entrar nesta camada é o buraco que é gasto nesses quatro neurônios recorrentes diferentes . E então a saída desses neurônios pode então ser alimentada de volta para o próximo passo para cada neurônio nessa camada. Então, tudo o que estamos fazendo é, ah, escalar isso horizontalmente. Então, em vez de um único Irã recorrente, temos uma camada de quatro neurônios recorrentes neste exemplo, onde toda a saída desses neurônios está se alimentando para o comportamento desses neurônios no próximo passo de aprendizagem. Ok, então você pode nos escalar para ter mais de um neurônio e aprender padrões mais complicados como resultado, não são extremidades abrir uma ampla gama de possibilidades porque agora nós temos a capacidade de lidar, não apenas com vetores de informação instantâneos estáticos de algum tipo de estado. Também podemos lidar com sequências de dados, então há quatro combinações diferentes aqui que você pode lidar com. Podemos lidar com sequências para sequenciar redes neurais. Se tivermos a entrada é uma vez Siri ou algum tipo de sequência de dados. Também podemos ter uma saída que é um tempo Siri ou alguma sequência de dados também. Então, se você está tentando prever os preços das ações no futuro com base em negociações históricas, isso pode ser um exemplo de sequência para sequência de topologia. Nós também podemos misturar e combinar sequências com os estados estáticos vetoriais mais antigos que previmos volta com apenas usando multi-camada Perceptron. Chamaríamos isso de sequência para vetor. Então, se estivéssemos começando com uma sequência de dados, poderíamos produzir apenas um instantâneo de algum estado. Como resultado da análise dessa sequência. Um exemplo pode ser olhar para a sequência de palavras em uma frase para produzir alguma idéia do sentimento que essa frase transmite do último. As pessoas recebem isso um exemplo em breve. Você poderia ir para o outro lado, também. Você pode ir de um vetor para uma sequência, então um exemplo disso seria pegar uma imagem, que é um vetor estático de informação, e então produzir uma sequência a partir desse fator, por exemplo, palavras em uma frase criando uma legenda de uma imagem. E podemos mudar essas coisas juntos de maneiras interessantes também. Podemos ter codificadores e decodificadores construídos que se alimentam um no outro. Por exemplo, podemos começar com uma sequência de informações de, ah, frase de alguma linguagem, alguma linguagem, incorporar o que essa frase significa como algum tipo de representação vetorial e, em seguida, transformar isso em torno de em uma nova sequência de palavras em algum outro idioma. Então pode ser assim que um sistema de tradução automática poderia funcionar. Por exemplo, você pode começar com uma sequência de palavras em francês, construir um vetor que tipo de incorpora o significado dessa frase e, em seguida, produzir um novo segredo de palavras em inglês ou qualquer idioma que você quiser. É um exemplo de usar uma rede neural recorrente para tradução automática. Então, muitas possibilidades emocionantes aqui treinamento são e termina exatamente como a CNN. É difícil. De certa forma. É ainda mais difícil. A principal torção aqui é que precisamos voltar a propagar não só através da própria rede neural em todas as suas camadas, mas também através do tempo. E de um ponto de vista prático, cada um desses passos acaba parecendo outra camada em nossa rede neural enquanto estamos tentando treinar nossa rede neural e esses passos podem se somar rapidamente. Então, com o tempo, acabamos com, como, uma rede neural ainda mais profunda e profunda que precisamos treinar e o custo de realmente executar Grady e dissidência nessa rede neural cada vez mais profunda torna-se cada vez mais Grande. Soto colocar um limite superior naquele tempo de treinamento. Quando limitamos a propagação de volta a um número limitado de etapas de tempo, chamamos essa propagação de volta truncada através do tempo. Então, apenas algo a ter em mente quando você está treinando em R N N. Você não só precisa se propagar de volta através da topologia de rede neural que você criou , você também precisa de um bolso traseiro propagar através de todos os passos de tempo que você construíram-se até esse ponto agora. Falamos antes sobre o fato de que como você está construindo em nosso fim, o estado de tempos anteriores. Os passos acabam sendo diluídos ao longo do tempo porque nós apenas continuamos alimentando o comportamento da etapa anterior em nossa corrida para a etapa atual. E isso pode ser um problema se você tiver um sistema onde o comportamento mais antigo não importa menos do que o comportamento mais recente. Por exemplo, se você estiver olhando para palavras em uma frase, as palavras no início de sua frase podem até ser mais importantes do que palavras no final . Então, se você está tentando aprender o significado de uma frase, a posição da palavra na frase não há nenhuma relação inerente entre onde essa palavra é e quão importante ela pode ser em muitos casos. Então esse é um exemplo de onde você pode querer fazer algo para contrariar esse efeito. E uma maneira de fazer isso é algo chamado de célula LS. L M. M.estende-se por uma célula de memória de longo prazo, e a idéia aqui é que ele mantém idéias separadas de curto e longo prazo estados, e ele faz isso de uma maneira bastante complexa. Agora, felizmente, você realmente não precisa entender os detalhes de como ele funciona. Há uma imagem dele aqui para você olhar se você está curioso. Mas, você sabe, as bibliotecas que você usa irão implementar isso para você. A coisa importante a entender é que se você está lidando com uma sequência de dados onde você não quer dar tratamento preferencial para dados mais recentes, você provavelmente quer usar uma célula L S T M em vez de apenas usar um r n n reta. Há também uma otimização em cima de células L S T M chamadas células G R U que significa unidade recorrente fechada. É apenas uma simplificação em células Ellis TM que executa quase uma ondulação. Portanto, se você precisa encontrar um equilíbrio ou um compromisso entre desempenho em termos de quão bem seu modelo funciona e desempenho em termos de quanto tempo leva para treiná-lo, Aguiar você vende pode ser uma boa escolha. Treiná-los é muito difícil. Se achou que a CNN era difícil, espere até o videocassete e termine. Eles são muito sensíveis à topologia é que você escolhe e a escolha de hiper parâmetros. E já que temos que simular coisas ao longo do tempo, e não apenas através de você conhece a topologia estática de sua rede. Eles podem se tornar extremamente intensivos em recursos. E se você fizer as escolhas erradas aqui, você pode ter uma rede recorrente ou uma rede que não converge tudo. Você sabe que pode ser completamente inútil, mesmo depois de você correr por horas para ver se realmente funciona. Então, novamente, é importante trabalhar em pesquisas anteriores. Tente encontrar alguns conjuntos de desculpas e parâmetros que funcionam bem para problemas semelhantes ao que você está tentando digerir. Tudo isso faz muito mais sentido com um exemplo, e você verá que não é realmente tão difícil quanto parece quando você está usando carícia Now. Eu costumava trabalhar no IMDB, então eu não posso resistir usando um exemplo relacionado a filmes. Então vamos mergulhar nessa próxima e ver nossas redes neurais recorrentes e terminadas em ação 14. Como usar o RNN's para análise de sentimento: O que vamos fazer aqui é tentar fazer uma análise de sentimentos. Então este vai ser um exemplo de uma sequência para vetor estão em e problema onde estamos tomando a sequência de palavras em uma revisão de filme escrito pelo usuário. E tentamos produzir um vetor que é apenas um único valor binário de saber se o usuário gosta ou não do filme onde deu uma classificação positiva. Então, este é um exemplo de fazer classificações de sentimento usando dados de revisão do usuário riel do IMDB. E como eu costumava dirigir, eu sou o departamento de engenharia DVS. Isso é um pouco tentador demais para mim não fazer é um exemplo aqui. Agora, lembre-se de dar crédito onde o crédito é devido. Isto é desenhado fortemente sobre um dos exemplos que acompanha com carícia a amostra IMDb l s t M . Eu meio que embelezado sobre isso um pouco aqui, mas a idéia é lá diz para dar crédito onde o crédito é devido e isso faz aquecer meu coração pela maneira que eles incluem o conjunto de dados IMDb como parte de carícia livre para experimentar. Então está trazendo boas lembranças para mim. Gostei de trabalhar lá. De qualquer forma, este não é um outro exemplo de como vamos usar células L S T M de longo prazo células de memória porque novamente, quando você está lidando com sequência de dados textuais de palavras na frase, não necessariamente importa onde na frase essa palavra apareceu. Você não quer que a propriedade de palavras no final da frase conte mawr para suas classificações do que palavras no início da frase. Na verdade, muitas vezes é o contrário. Então vamos usar uma célula L S T m para tentar contrariar o efeito que você vê em RN normal termina onde os dados se diluem ao longo do tempo ou à medida que a sequência progride neste exemplo. Então vamos mergulhar e ver como funciona. Começaremos importando tudo o que precisamos da Caris. Vamos usar módulos de pré-processamento de sequência, modelo sequencial para que possamos incorporar diferentes camadas. Juntos, vamos introduzir uma nova camada de incorporação como parte do nosso e, além da camada densa que tínhamos antes, importaremos o módulo LS tm e finalmente importaremos o conjunto de dados IMDb Então vamos em frente e nave entrou para fazer tudo isso e começar carícia inicializada. E isso está feito agora. Então agora podemos importar nossos dados de treinamento e teste. Como eu disse, Caris tem um conjunto de dados IMDb útil dandy pré-instalado. Estranhamente, ele tem 5000 avaliações de treinamento e 25.000 avaliações de testes, o que parece inverso para mim. Mas é o que é. O parâmetro que você está vendo aqui para palavras entorpecidas indica quantas palavras únicas você deseja carregar em seu conjunto de dados de treinamento e teste . Então, ao dizer números equivale a 20.000, isso significa que vou limitar meus dados às 20.000 palavras mais populares e ao conjunto de dados. Então alguém usa uma palavra muito obscura. Não vai aparecer nos nossos dados de entrada. Vamos em frente e carregar isso. E uma vez que tem que pensar, não volta instantaneamente, mas muito rápido. OK, estamos no negócio aqui. Vamos dar uma olhada em como esses dados se parecem. Então vamos dar uma olhada na primeira instância de dados de treinamento aqui, e que se lixe, são apenas um monte de números. Não me parece uma crítica de filme. Bem, você pode ser muito grato às pessoas que se importam em fazer isso por você. Então a coisa é, quando você está fazendo aprendizado de máquina em geral, geralmente modelos não funcionam com palavras. Eles trabalham com números, certo? Então precisamos converter essas palavras em número. De alguma forma é o primeiro passo, e carícia já fez tudo isso pré processamento para você. Então você sabe, o número um pode corresponder à palavra ou eu realmente não tenho idéia do que corresponde , mas eles codificaram cada palavra única entre zero e 20.000 porque nós dissemos que queríamos os 20.000 mais palavras populares dois números. Ok, então é meio chato que não possamos realmente ler essas críticas e obter um significado intuitivo do que essas críticas dizem no ar. Mas poupa-nos muito trabalho. E eu já disse antes que muitas vezes muito do trabalho em aprendizado de máquina não é tanto construir seus modelos e ajustá-los. É apenas processar e massagear seus dados de entrada e certificar-se de que seus dados de entrada parecem bons para ir. Mesmo que isso não pareça uma crítica de filme. É uma crítica de filme. Eles acabaram de substituir todas as palavras por números únicos que representam cada palavra. Também podemos dar uma olhada nos dados de treinamento. Assim, a classificação desta revisão em particular foi uma que apenas significa que eles gostaram . Assim, as únicas classificações são zero e uma que corresponde a um sentimento negativo ou positivo para essa revisão. Ok, então nós temos todos os dados de entrada convertidos já em formato numérico. Isso é ótimo. Agora só temos que ir em frente e preparar as coisas. Vamos começar criando alguns vetores foram inseridos aqui. Então vamos divulgar nossos dados de treinamento e testes aqui. Vamos chamar sequências de bloco de parada de sequência só para ter certeza de que tudo tem um limite para 80 palavras. Então, a razão pela qual estamos fazendo isso é porque, como dissemos, nossos fins podem explodir muito rapidamente. Você tem que voltar a se propagar através do tempo. Portanto, queremos ter um limite superior em quantas vezes os passos precisamos voltar a propagar. Então, ao dizer Max Line é igual a 80, isso significa que só vamos olhar para as primeiras 80 palavras em cada revisão e limitar nossa análise a isso. Então essa é uma maneira de truncar nossa propagação de volta através do tempo. É uma forma de baixa tecnologia de fazer isso, mas é eficaz. Caso contrário, estaríamos comandando isso por dias. Certo, então o único ponto aqui é cortar todas essas críticas no treinamento e nos dados de teste para suas primeiras 80 palavras, que novamente foram convertidas em números para nós. Vamos construir o modelo em si. Ei, nós não fugimos de verdade. Corra. Isso é, vamos em frente. Ish hit, shift, entrar naquele bloco. Ok, agora podemos construir o modelo em si. E para uma rede neural tão complicada, acho que é notável como poucas linhas de código Zehr acontecendo aqui. Então, vamos conversar. Isso começará criando um modelo sequencial, que significa que podemos apenas construir a topologia da nossa rede um passo de cada vez aqui, então vamos começar com alguns pré-processamento adicional estavam usando foi chamado uma camada de incorporação aqui, e tudo o que faz é converter nossa data de entrada de palavras de para as primeiras 80 palavras e dado uma revisão em vetores densos de algum tamanho fixo. Então ele vai criar um vetor denso de um tamanho fixo de 20.000 palavras e então funil isso para 128 acertos e neurônios dentro da minha rede neural. Então isso é tudo o que incorporar Layer está fazendo é apenas pegar os dados textuais de entrada que foram codificados e convertendo isso em um formato adequado para entrada na minha rede neural . Então, com uma única linha de código, construímos nossa rede neural recorrente. Então nós apenas dizemos, adicione L S T M. e nós podemos ver as propriedades aqui quando eles quiserem ter 128 neurônios recorrentes nessa camada Ellis TM. E nós também podemos especificar termos de abandono apenas no mesmo comando aqui. Então podemos dizer que queremos fazer uma queda de 20% e isso é tudo o que há para ele. Essa linha de código configura a rede neural R l s T M com 128 neurônios recorrentes e adiciona fases de evasão de 20% tudo em um só passo. Finalmente, precisamos resumir isso a um único neurônio de saída com uma função de ativação sigmóide porque estamos lidando com um problema de classificação binária, e é isso. Então definimos a topologia da nossa rede com apenas quatro linhas de código, mesmo que seja uma rede neural muito complicada e recorrente usando células L S T M e fases de abandono. Mas carícia torna tudo isso muito fácil de fazer. Então precisamos dizer carinho como otimizar essa rede neural, como treiná-la, então usaremos entropia cruzada binária porque isso é, em última análise, um problema de classificação binária . Será que a pessoa como este filme ou não, vai usar o Adam Optimizer desta vez só porque isso é o melhor dos dois mundos para Optimizers, e então nós podemos chutá-lo fora. Então vamos em frente e executar esses dois blocos anteriores mudar, entrar, mudar, entrar e, neste ponto, você está pronto para treinar sua rede neural. E vamos apenas passar por isso acontecendo aqui. É muito semelhante aos exemplos anteriores. Neste caso, vamos usar tamanhos de lote de 32 avaliações ao mesmo tempo. Vamos executá-lo ao longo de 15 etapas de treinamento ou epochs conjunto de camada de verbosidade que é compatível com notebooks I Python e fornecer os dados de validação quarenta anos também. Agora, novamente, eu não vou realmente executar isso agora porque vai demorar cerca de uma hora. Como eu disse, nossos fins são difíceis. Eles precisam de muita computação. O recurso é. E como tudo o que estou fazendo é executar essa CPU única online, eu nem tenho coisas configuradas para usar meu GP. Você é muito menos um cluster de computadores. Isso leva muito tempo. Mas eu fiz isso mais cedo, e você pode ver os resultados aqui. Então, mais de 50 caixa Net, você pode ver que a precisão que estava medindo nos dados de treinamento estava começando a convergir. Parece que depois de cerca de 13 passos, estava ficando tão bom quanto ia ficar. E então, além disso, podemos realmente avaliar esse modelo dado o conjunto de dados de teste. Então vamos em frente e chamar Avaliar sobre isso com nossos dados de teste novamente usando 32 lotes e se fôssemos executar isso veríamos que acabaríamos com uma precisão de 81% em nosso modelo aqui . Não parece tão impressionante, mas quando você considera que tudo o que estamos fazendo é olhar para as primeiras 80 palavras de cada crítica e tentar descobrir apenas baseado nesse começo. Quer um usuário goste ou não do filme, isso não é tão ruim. Mas novamente, afaste-se e pense no que acabamos de fazer aqui. Fizemos uma rede neural que pode ler críticas em inglês e determinar algum tipo de significado por trás delas. Neste caso, treinamos como pegar uma sequência de palavras no início de um filme, revisar essa estrada humana e classificar isso como uma crítica positiva ou uma crítica negativa. Então, em um sentido muito real, nós temos em algum nível em um nível muito básico, ensinado nosso computador a ler. Quão legal é isso? E a quantidade de código que escrevemos para fazer isso era mínima, certo? Então é meio difamatório. É apenas uma questão de saber qual técnica usar para construir sua rede neural, fornecendo os dados de treinamento apropriados, e então sua rede neural faz o resto. É realmente assustador quando você se senta e pensa sobre isso de qualquer maneira. Coisas legais. Então é um ótimo exemplo de quão poderosa pode ser carícia e um ótimo exemplo de uma aplicação de uma rede neural recorrente não usando o exemplo típico de dados de negociação de ações ou algo assim, mas em vez disso para análise de sentimentos onde pegamos uma sequência de palavras e usamos isso para criar uma classificação binária de um sentimento baseado nessa sequência, então coisas divertidas estão em fins e carícias. 15. Aprendizagem de transferência: o mundo de olhos em um tempo estranho e emocionante. Com o aprendizado de transferência, nunca foi tão fácil implantar um modelo de inteligência artificial totalmente treinado e começar a usá-lo para problemas do mundo real. A idéia aqui é usar modelos pré-treinados que já estão lá fora, disponíveis na Internet para qualquer um usar. E para muitos problemas comuns, você pode simplesmente importar um modelo pré-treinado que outra pessoa fez todo o trabalho duro de montar , otimizar e descobrir os parâmetros certos e a topologia certa e simplesmente usá-los. Então, por exemplo, se você está tentando fazer a classificação de imagens, existem modelos pré-treinados lá fora que você pode simplesmente importar alguns dos assassinatos chamados rez. Net Inception, Mobile Net em Oxford, v. G. Ou alguns exemplos. E eles vêm pré-treinados com uma grande variedade de tipos de objetos. Então, em muitos casos, você pode apenas liberar um desses modelos fora das prateleiras, apontar uma câmera para algo, e ele vai te dizer o que é isso. Isso é meio esquisito. Da mesma forma, para processamento de linguagem natural, existem modelos pré-treinados disponíveis, como onde Tyvek e luva que você pode usar para basicamente ensinar seu computador a ler . Com apenas algumas linhas de código. Agora, você pode apenas usá-los como estão, mas você também pode apenas usá-los como um ponto de partida se você quiser estender sobre eles ou construir sobre eles para problemas mais específicos. Então, mesmo que eles não resolvam o problema específico que você está tentando resolver, você ainda pode usar esses modelos pré-treinados como um ponto de partida para construir fora disso é, você sabe muito mais fácil de começar. Você não precisa perder muito tempo tentando descobrir a topologia e os parâmetros certos para um tipo específico de problema. Você pode começar com eles tudo o que já descobriu tudo isso para você e apenas adicionar em cima disso. Isso é chamado de aprendizagem de transferência. Basicamente, estamos transferindo e modelo de trem existente de outra pessoa para sua aplicação. Agora você pode encontrar mais desses modelos pré-treinados e o que são chamados de zoológicos modelo. Um popular é chamado de Cafe Models. Ooh, e é ah, eu não tenho certeza de pensar em tudo isso. Quero dizer, é super fácil implantar um I. Agora, como você verá em breve no nosso próximo exemplo, você pode simplesmente importar modelos existentes que modelam e começar a usá-lo com, apenas, você sabe, quatro ou cinco linhas de código. Você não precisa ser realmente, Ah, Ah, desenvolvedor muito bom mais para realmente usar AI para aplicativos práticos. Então tipo de um lugar estranho para a indústria estar agora e meio que abre um monte de possibilidades interessantes e potencialmente assustadoras. Como as pessoas podem começar a usar essa tecnologia quando há uma barreira tão baixa para entrar agora de realmente usá-lo de qualquer maneira, vamos mergulhar em um exemplo do mundo real, e eu vou mostrar a vocês o quão assustador é agora. Então vamos mergulhar no aprendizado de transferência. Abra o caderno de aprendizagem de transferência em seus materiais do curso, e você deve ver isso, e em breve você verá o quão louco é fácil de usar e quão louco ele pode ser. Então vamos usar o modelo Ressonant 50 aqui. Isso é usado para classificação de imagens, por isso é uma maneira incrivelmente fácil de identificar objetos em imagens arbitrárias. Então, se você tem, ah, uma foto de qualquer coisa Talvez esteja vindo de uma câmera ou quadros de vídeo ou o que você tem isso comptel você? O que tem nessa foto? Bastante confiável, que parece. Então vamos nos divertir um pouco com isso. Então, só para provar um ponto, vou tentar alguns dos meus eleitores de férias aqui com ele. É assim que nós vamos ter certeza que as fotos que eu estou dando ao residente 50 para classificar nossas fotos que ele nunca viu antes e ver o que ele poderia fazer com ele. Por exemplo, tirei esta foto de um jato de caça enquanto explorava os desertos da Califórnia. Vamos ver se isso está incluído no material do curso, e lá temos uma foto de um jato de caça. Então, como um começo, vamos ver se o modelo residente 50 pode identificá-lo e ver o que está envolvido em realmente revestir isso. Primeiro. Nós só precisamos importar os módulos que precisamos, então precisamos importar o próprio modelo residente 50 que é construído em carícia, juntamente com vários outros modelos também. Nem temos que nos dar ao trabalho de baixá-lo e instalá-lo. É apenas lá e de nós também estamos indo para importações para gerenciar ferramentas de pré-processamento, tanto de carícia em si mesmo e faz parte do próprio pacote Resident 50. Nós também vamos importante, hum, torta, porque nós vamos usar torta dormente para realmente manipular os dados da imagem em um raio número maior, que é, em última análise, o que precisamos para alimentar um neural rede. Então vamos em frente e correr esse bloco agora. Um tipo de limitação do modelo residente 50 é que suas imagens de entrada têm que ser de 24 por 2 24 resolução. Você sabe, isso é em parte para garantir que ele possa funcionar eficientemente. Também está limitado a uma das 1000 categorias possíveis, e isso pode não parecer muito. Mas eu acho que você vai se surpreender com o detalhe que ele vai lhe dar sobre o que é a coisa. Então vamos em frente e carregar essa imagem novamente. Desta vez, vamos escalá-lo para 2 24 por 2 24 enquanto estamos carregando, e vamos converter isso para um pirata entorpecido com essas duas linhas de código e, em seguida, chamar o residente 50 modelos pré-processo entrada para fazer algo para preparar isso dados. Eu suponho que ele está diminuindo para o alcance que ele quer e talvez fazendo algum pré-processamento da imagem em si para fazê-lo funcionar melhor. É uma espécie de caixa preta, e isso é um pouco. O que há de estranho em usar o aprendizado de transferência? Sabes, estás a acreditar que está a fazer a coisa certa. Mas do ponto de vista prático, isso não é uma coisa ruim para Dio. Vamos em frente e executar isso tudo bem, então é pré processado minha imagem. Isso foi bem rápido. Agora vamos carregar o próprio modelo. Uma linha de código é tudo o que precisa. O modelo é igual a residente 50. Os pesos lá representam que ele vai usar pesos aprendidos a partir do conjunto de dados da rede de imagem . Assim, você pode até mesmo usar variações de residentes 50 que foram treinados em diferentes conjuntos de imagens . Potencialmente lá. Então vamos em frente e carregar o modelo e isso está feito. Então agora podemos usá-lo. Então agora temos um modelo de classificação de imagem pré-treinado aqui com uma linha de código, e podemos usá-lo agora. Tudo o que tem que fazer é ligar. Preveja sobre isso e terminamos que é isso. É realmente assim tão fácil. Então vamos tentar. Nós temos. Ah, como você se lembra da nossa imagem de jato de caça pré-processado aqui no raio X aqui, e nós vamos chamar conveses operacionais modelados e ver o que ele vem com. Voltarei com uma classificação e para traduzir isso em algo legível humano chamará a função de previsões de decodificação que vem com o modelo 50 residente também . É tão fácil assim. Ok, literalmente duas linhas de código aqui, certo? Decidimos uma linha para realmente carregar o modelo residente 50 e transferir esse aprendizado para a nossa aplicação, se preferir, especificando um determinado conjunto de pesos que foi pré aprendido a partir de um determinado conjunto de imagens. E depois ligamos, prevemos esse modelo e acabamos. É isso. Vamos fazer isso e ver se realmente funciona. Uau. Ok, então, sim, previsão máxima foi na verdade avião de guerra, e é exatamente disso que esta é uma foto, mesmo que nunca tenha visto essa foto antes, nunca. E eu não fiz nada para ter certeza de que a foto era do ângulo certo ou devidamente emoldurada ou algo assim ou, você sabe, pré-processada. Com muito contraste, funciona. É meio assustador. Bom. O segundo palpite foi um míssil seguido de projétil. E sim, havia mísseis e projéteis naquele avião também. Então não só me disse que era um avião de guerra e me disse que era um avião de guerra que tinha mísseis nele. Quero dizer, uau, isso é loucura. Bom, certo? Vamos tentar com outras imagens. Que tenhamos sorte. Então vamos fazer um pouco conveniente. Ah, função aqui para fazer isso em uma determinada imagem mais rapidamente. Então vamos escrever uma pequena função classificar aqui, e ele vai começar exibindo uma imagem da coisa que estamos começando a classificar aqui. Em seguida, reduzirá essa imagem para cima, dimensionando-a para baixo para a dimensão necessária para 24 por 2 24. Converta isso para uma pira entorpecida, um pré processá-lo e, em seguida, basta chamar, prever no modelo 50 residente e ver o que ele volta com. Então agora nós poderíamos apenas dizer classificar e qualquer que seja o nome do nosso arquivo de imagem, e ele vai nos dizer o que ISS Então nós reduzimos nosso pouco de código aqui para apenas uma linha agora, então eu posso agora apenas um hit shift enter para definir essa função. E agora eu poderia dizer, bem, eu tenho um arquivo chamado Bunny Dodge a Pig e meu material de curso. Vamos classificar esse turno. Entrar. Há uma foto de um coelho no meu quintal que tirei uma vez, e com certeza, a melhor classificação é “Coelho seguido de cabelo”. Então não só está dizendo que é um coelho é me dizer que tipo de coelho eu realmente não conheço minha espécie de coelho tão bem, então eu não tenho certeza se isso é realmente um coelho de madeira, mas poderia ser, você sabe como é. É bastante impressionante. Quero dizer, nem é como uma peça proeminente desta imagem. É como sentar lá no meio, meu gramado. Nem está tão claro de uma foto, também. Imagine essa escala abaixo de 2 a 24 por 2 24 Não vai haver muita informação lá, mas ainda descobrimos que é um coelho. Que tal uma foto de um caminhão de bombeiros e este não é um caminhão de bombeiros normal também. Isto é como no mesmo museu de aviação que eu tirei uma foto daquele avião de guerra do seu ah , uma espécie de caminhão de bombeiros antigo que foi usado pela Força Aérea. Mas ainda assim, motor de bombeiros é a melhor previsão. , Uau, isso é meio legal. Tirei uma foto do meu café da manhã em um hotel chique em Londres. Vamos ver o que ele faz com isso. Um café da manhã inglês completo . Quando em Londres, é preciso comer. Os londrinos dele fazem. Na verdade, eu não sei se ele realmente sentiu o café da manhã inglês lá, mas ainda é bom. Ah, sim. Então percebeu que há uma mesa de jantar nesta foto. Há uma bandeja contendo minha comida. Um restaurante. Quero dizer, bem, isto era realmente serviço de quarto, mas você poderia definitivamente imaginar que é em um restaurante em vez disso. Então, sim, novamente, um trabalho impressionante aqui em uma foto aleatória de férias. Nunca tinha visto esta foto antes. Eu não tomei absolutamente nenhum, uh , não pensei em ter certeza que esta era uma imagem que iria funcionar bem com aprendizado de máquina . Inteligência artificial para classificações de imagem. Vamos continuar. Quando eu era Inglaterra, visitei alguns castelos no País de Gales. Quando eu era Inglaterra, Imagem de um elenco vive Será Goto baleias. Pessoal, é lindo lá. Sim, Sim, é um castelo. É isso. Pare a previsão. O segundo palpite era um mosteiro ou um palácio. Ambos bons palpites, mas sim, é um castelo. E, você sabe, nem é um castelo típico. Eu ainda tinha percebido. Isto é uma coisa incrível. Tudo bem, vamos ver se eu posso tropeçar. Eu também fiz uma viagem para o Novo México uma vez e visitou foi chamado de Very Large Array. Isto é basicamente uma variedade de pratos gigantes de radioastronomia com apenas 1000 classificações . Eu não imaginaria que isso iria acertar. Então, há uma foto. É só um monte de telescópios gigantes de radioastronomia. E diz que é um radiotelescópio. Uh, fez isso? Isto é coisa de soprar a mente, pessoal. Tudo bem, mais uma. Eu tirei uma foto da Bridge uma vez e você lembra o que Bridget é. Ponte de Londres. Aparentemente eso Ok, que é este residente 50 uma ponte suspensa. E também há aparecer em uma cerca de cadeia e cadeia de ligação lá, bem como, para uma boa medida. Então, isso é impressionante, certo? Quero dizer, então se você precisa fazer a classificação de imagens. Você nem precisa saber os detalhes de como convolução l redes neurais operam, como sintonizá-los. E, ah, você sabe como, construir como, o pedido de desculpas certo e ele se espalhou sobre os hiper parâmetros certos. Você pode simplesmente usar o trabalho de outra pessoa já fez isso, e usando modelos de escorrer dos modelos de café que estão em outro lugar para um monte de problemas comuns , você congest começar e correr em um par de linhas de código. Nunca foi tão fácil usar inteligência artificial em um aplicativo do mundo real agora. Então, embora seja bom entender os fundamentos, especialmente se você vai estar fazendo algo que ninguém nunca fez antes para problemas comuns de IA, tem havido tanta pesquisa nos últimos anos que há uma boa chance que alguém já resolveu o problema que você está tentando resolver. E você pode apenas reutilizar seus resultados se eles foram gentis o suficiente para publicá-los em um modelo que em algum lugar, Uau então sim, experimentou em algumas fotos de sua própria para o meu Não se você tem alguns apenas jogando o curso materiais e chamar a minha função de classificação sobre ele e ver o que ele faz com ele. Basta ter um pouco de diversão com ele, e você também pode tentar alguns modelos diferentes para e ver como eles se comportam de forma diferente. Resident 50 foi na verdade o modelo que funcionou melhor para minhas fotos. Mas há outros modelos incluídos com carícia, incluindo Inception e Mobile Net que você pode querer experimentar. Se você quiser jogar com eles, você terá que voltar para a documentação aqui. Há um link para ele aqui. Você precisa saber quais dimensões de imagem esperam a entrada, por exemplo, ou alguém trabalhando tudo. Então, sim, eu dou para tentar e ah, cara, é a mente soprando coisas. Os caras apenas tipo, uh, sentar-se lá e deixá-lo afundar em que é tão fácil de usar AI agora. 16. Como ajustar as redes neurais: a taxa de aprendizagem e os Batch de tamanho de: Vamos falar um pouco sobre ajustar suas redes neurais. Isso não é coisa que normalmente é ensinada, mas eu não estou tentando transmitir o melhor que eu posso. Então vamos falar sobre a taxa de aprendizagem. Em primeiro lugar, o que queremos dizer com taxa de aprendizagem? Bem, você precisa entender como essas redes neurais são treinadas. Eles estão usando uma técnica chamada descida de gradiente ou algo semelhante à descida de gradiente é vários sabores diferentes dela lá fora. A idéia básica é que começamos em algum ponto aleatório de pesos em nossa rede neural. E nós apenas amostramos diferentes soluções, diferentes conjuntos de pesos tentando minimizar alguma função de custo que definimos ao longo de várias épocas. Então essas são as palavras-chave lá. Temos muitas épocas, iterações sobre as quais treinamos. Em cada época, tentamos um conjunto diferente de pesos em nossa rede neural, tentando minimizar alguma função de custo, que pode ser a precisão geral de quão bem faz previsões em nosso conjunto de validação. Então precisamos ter algum tipo de rima e razão para como fazemos essas amostras de diferentes soluções, pesos diferentes, se quisermos, se fizermos isso em uma espécie de gráfico bidimensional, talvez parecesse algo assim, onde estamos apenas amostrando pontos diferentes aqui ao longo de uma curva de soluções. E estamos tentando encontrar aquele que minimiza a função de custo. Então esse é o eixo y aqui. Então o que estamos tentando encontrar é o ponto mais baixo neste gráfico. E estamos tentando chegar lá provando em pontos diferentes e aprendendo com cada amostra anterior. É disso que se trata a descida de gradiente. Então a taxa de aprendizagem é sobre quão distantes essas amostras estão. Então você vê aqui nós podemos ter começado aqui e nossa taxa de aprendizagem disse, Ok, eu vou tentar outro ponto aqui e tentar novamente aqui, assim por diante e assim por diante até que eu finalmente encontrar o ponto mais baixo ao longo desta curva e chamar isso de meu melhor solução. Então não é muito difícil entender o efeito da taxa de aprendizagem em seu treinamento, certo? Se você tiver uma taxa de aprendizado muito alta, você pode superar totalmente essa solução. Imagine que minha taxa de aprendizado foi enorme e fui direto daqui até aqui. Posso perder esse ponto de fundo. São inteiramente se a minha taxa de aprendizagem fosse muito alta. Mas você pode ver que se minha taxa de aprendizagem é muito pequena, eu vou estar experimentando um monte de pontos diferentes aqui. E vai levar um monte de épocas, um monte de passos para realmente encontrar essa solução ideal. Uma taxa de aprendizado muito alta pode significar que supero totalmente a solução correta, mas muito pequena para a taxa de aprendizado significará que meu treinamento pode levar mais tempo do que o necessário. Agora, a taxa de aprendizagem é um exemplo do que chamamos de hiperparâmetros. É um dos botões e mostradores que você usa enquanto treina seu modelo de aprendizagem profunda que pode afetar seu resultado final. E muitas vezes, esses hiperparâmetros podem ter tanta influência na qualidade do seu modelo quanto a topologia do modelo, a engenharia de recursos que você fez em todo o resto. Então é apenas mais uma peça do quebra-cabeça aqui que você precisa chegar experimentalmente. Além da taxa de aprendizado, outro hiperparâmetro importante é o tamanho do lote, e isso é quantas amostras de treinamento são usadas em cada época. Agora, martelou isso em suas cabeças caras, porque é meio contra-intuitivo. Você pensaria que um lote grande seria uma coisa boa, certo? Quanto mais dados, melhor. Mas não, não é assim que acaba funcionando. Acontece que se você tem um tamanho de lote pequeno, ele tem uma melhor capacidade de trabalhar seu caminho para fora do que chamamos de mínimos locais. Então, neste exemplo aqui você pode ver que temos um mínimo aqui, uma espécie de queda no gráfico aqui, onde temos um bom, bom valor de função de baixa perda aqui, o que estamos tentando otimizar é muito bom aqui. Mas há um risco durante a descida do gradiente de ficarmos presos nos mínimos locais quando, de fato, a melhor solução está aqui em algum lugar. Então nós queremos ter certeza de que durante o processo de descida de gradiente, nós temos alguma habilidade de balançar nosso caminho para fora dessa coisa e encontrar a melhor solução. Acontece que tamanhos de lote menores podem fazer isso de forma mais eficaz do que os maiores. Assim, um pequeno tamanho de lote pode balançar seu caminho para fora desses mínimos locais. Mas um tamanho de lote grande pode acabar ficando preso lá, como basicamente esperar por ele para baixo, se você quiser. Portanto, tamanhos de lote que são muito grandes podem acabar ficando presos na solução errada. E o que é ainda mais estranho é que, porque você normalmente embaralhará aleatoriamente seus dados no início de cada época de treinamento. Isso pode acabar se manifestando como obtendo resultados muito inconsistentes de execução para execução. Então, se o tamanho do meu lote é um pouco grande demais, talvez às vezes eu fique preso neste mínimo e às vezes eu não. E eu vou ver que no final os resultados é ver que de corrida para corrida. Às vezes eu recebo essa resposta e às vezes eles conseguem essa resposta, certo? Então martelado isso em seus caras cabeça é tamanhos de lote menores tendem a não ficar preso em mínimos locais, mas grandes tamanhos de lote podem convergir para a solução errada aleatoriamente. Uma grande taxa de aprendizado pode acabar superando a solução correta, mas pequenas taxas de aprendizado podem aumentar o tempo de treinamento. Então lembre-se disso, anote, coisas importantes e é novamente, é um exemplo de coisas que a maioria das pessoas aprendeu da maneira mais difícil através da experiência, mas estou tentando ensiná-lo para você na fronteira. 17. Regularization de aprendizagem em profunda com o abandono e encerramento de acesso à primeira: Vamos mergulhar em técnicas de regularização no mundo das redes neurais. O que é regularização afinal? Bem, basicamente, a regularização é qualquer técnica que se destine a evitar o excesso de ajuste. O que é overfitting? Bem, se você tem um modelo que é bom em fazer previsões sobre os dados em que foi treinado, mas ele não funciona tão bem em novos dados que nunca viu antes. Então dizemos que esse modelo está sobreequipado. Isso significa que são padrões aprendidos em seus dados de treinamento que realmente não existem no sentido geral no mundo real. Então, se você ver uma alta precisão em seu conjunto de dados de treinamento, mas uma precisão menor em seu conjunto de testes ou seu conjunto de dados de avaliação. Essa é a maneira da natureza de dizer que você pode ser demais. Vamos dar um passo atrás aqui. Esta é provavelmente a primeira vez que eu usei o conjunto de dados de avaliação da palavra. Novamente, se você é novo neste mundo, no mundo da aprendizagem profunda, normalmente falamos sobre três conjuntos de dados diferentes. Então temos o conjunto de dados de treinamento. Estes são os dados reais de treinamento alimentados em sua rede neural de baixo para cima. E é nisso que treinamos a rede, certo? E então, à medida que estamos treinando cada época, podemos avaliar os resultados dessa rede em relação a um conjunto de dados de avaliação. Então, basicamente, esse é o conjunto do conjunto de treinamento que reservou para avaliar os resultados e a precisão do seu modelo como ele está sendo treinado. E então nós também podemos ter um conjunto de dados de teste para que vive fora de tudo isso. Assim que tivermos um modelo totalmente treinado, podemos usar nosso conjunto de dados de teste para avaliar o modelo completo e acabado, se preferir. Então, novamente, se você está vendo sua precisão de treinamento ser muito mais do que a precisão medida em relação dados de avaliação ou aos dados de teste no final, provavelmente significa que você está se ajustando demais aos dados de treinamento. Este gráfico à direita faz com que seja um pouco mais fácil de entender. Imagine que estou tentando construir um modelo que separa as coisas que são azuis das que são vermelhas aqui. Então, se você olhar para esses dados, seu cérebro pode praticamente descobrir que esta provavelmente esta curva que meio que separa onde a coisa mais azul está e onde a coisa vermelha está, certo? Mas no mundo real, os dados são confusos. Há um pouco de barulho lá também. Então, se um modelo que estamos superajustando, ele pode realmente aprender aquela curva verde lá que está realmente entrando e saindo de todos os dados para tentar ajustar isso aos dados de treinamento. Exatamente. Mas você sabe, isso é só barulho, certo? Só de olhar para ele, seu cérebro sabe que isso não está correto. Mas sua rede neural não tem essa intuição embutida nela. Então precisamos de técnicas de regularização para evitar que isso aconteça, para evitar que uma rede neural ou qualquer modelo de aprendizado de máquina curvem e ondulando e fazendo com que essas frequências mais altas passem do caminho para sobreajustar seus dados para o seu modelo. Muito bem, é isso que é exagerado. É uma boa maneira de generalizá-lo. A chamada resposta correta, o modelo correto seria essa linha preta, mas um modelo superajustado seria mais parecido com a linha verde. E isso é realmente algo que realmente acontece em redes neurais. Se você tem uma rede neural muito profunda com muitos pesos e conexões e neurônios que estão embutidos nela. Ele pode pegar totalmente em padrões complexos como esse. Então você tem que ter cuidado com isso. Então é aí que entra o mundo das técnicas de regularização. Vamos entrar em alguns. Então, uma coisa muito simples pode ser, você pode ter um modelo muito complexo. Talvez você tenha muitas camadas são muitos neurônios. Então você poderia ter uma rede neural profunda que é muito profunda ou talvez muito larga ou talvez ambos, certo? Então. Simplificando seu modelo para baixo, isso restringe sua capacidade de aprender os padrões mais complicados que podem ser superajustados. Então, um modelo muito simples que é apenas uma curva simples como essa, que provavelmente poderia ser alcançado através de uma regressão. Talvez esteja melhor com um modelo mais simples. E a técnica de regularização mais simples é simplesmente usar menos neurônios ou usar menos camadas. Isso é uma coisa totalmente válida para se fazer. Às vezes precisa experimentar isso. Então, se você achar que seu modelo é overfitting, provavelmente a coisa mais simples é apenas usar um modelo mais simples. Tente, tente menos camadas, tente menos neurônios em cada camada e veja que tipo de efeito isso tem se você ainda pode ter a mesma precisão e seu conjunto de dados de teste, mas não se adequar ao seu conjunto de dados de treinamento, então por que usar mais neurônios do que você precisa? Outra técnica é chamada de abandono. E esta é uma espécie de interessante. Então a idéia com uma camada de abandono é que ele realmente remove alguns dos neurônios em sua rede em cada época enquanto está treinando. E isso tem o efeito de basicamente forçar seu modelo a aprender e se espalhar. Está aprendendo entre os diferentes neurônios e camadas dentro de sua rede. Então, abandonando neurônios específicos que são escolhidos aleatoriamente e cada etapa de treinamento, estamos basicamente forçando o aprendizado a se espalhar mais. E isso tem o efeito de impedir que qualquer neurônio individual se encaixe em um ponto de dados específico, certo? Então é um pouco contra-intuitivo que realmente remover neurônios de sua rede neural e torná-lo realmente treinado melhor. Mas isso é o que acontece, que impede o excesso de ajuste. Então é disso que se trata o abandono. Novamente, uma técnica de regularização muito eficaz. Vemos isso muito em dizer CNNs, por exemplo, é bastante padrão ter uma camada de abandono bastante agressivo como talvez até 50 por cento sendo realizada para mim para cada passado de treinamento. Então é só isso que desiste. É apenas remover alguns neurônios aleatoriamente, em cada etapa de treinamento para forçar seu modelo a espalhar seu aprendizado um pouco melhor. E isso tem um efeito de regularização que impede o excesso de ajuste. Outra solução muito simples é chamada de parada precoce. Então vamos dar uma olhada nesta impressão porque estamos realmente treinando uma rede neural real. Então você pode ver que se você olhar para a precisão no conjunto de validação, essa é a coluna direita lá. Passamos de 95 por cento para 97% e as coisas estão melhorando. E então, de repente, chegamos a cerca de 98% e as coisas começam a ficar estranhas. Começa a oscilar, certo? Então podemos dizer apenas olhando para isso, que depois de volta da época cinco nós não estamos fazendo nenhum, nenhum benefício mais treinando mais. Na verdade, podemos estar fazendo mais mal do que bem, porque neste momento provavelmente estamos começando a exagerar. E, de fato, se você olhar para a precisão do conjunto de treinamento, essa é a primeira coluna de precisão, a segunda coluna de números que você viu esta exibição, a precisão no conjunto de treinamento continua a aumentar à medida que treinamos cada vez mais Épocas. Mas a precisão no conjunto de validação praticamente parou de melhorar em torno de cinco. Então isso está claramente começando a se sobrepor além da quinta época. Tudo bem. Eu vou parar cedo é, é uma maneira de detectar automaticamente isso. E é um algoritmo que vamos apenas dizer, ok, a precisão da validação está nivelada. Minha precisão de treinamento ainda está aumentando. Devíamos parar agora. Então parar cedo só significa, ok, eu sei que você queria dez épocas, mas eu posso ver aqui que depois cinco coisas estão piorando quanto ao excesso de montagem vai. Então vamos parar em cinco caras, terminamos aqui. É isso. É só isso que se trata de parar cedo. É só ter certeza de que você não está treinando sua rede neural mais do que deveria. E isso evita o excesso de montagem. Solução muito simples. Ali. 18. A ética do aprendizagem profunda: Muitas pessoas estão falando sobre a ética da aprendizagem profunda. Estamos realmente criando algo que é bom para a humanidade ou, finalmente, ruim para a humanidade? Então, vamos para lá agora. Eu não vou pregar para você sobre Cinci em robôs dominando o mundo. Quero dizer, talvez isso seja um problema daqui a 50 anos, talvez até mais cedo. Mas para o futuro imediato, são maneiras mais sutis nas quais a aprendizagem profunda pode ser mal utilizada, com as quais você deve se preocupar. E é alguém entrando no campo, seja como pesquisador ou praticante. Cabe a você garantir que esta poderosa tecnologia seja usada para o bem e não para o mal. E às vezes isso pode ser muito sutil, então você pode implantar uma nova tecnologia em seu entusiasmo, e isso pode ter consequências indesejadas. E isso é principalmente o que eu quero falar nesta palestra. Compreender as consequências não intencionais dos sistemas que você está desenvolvendo com aprendizado profundo. Primeiro de tudo, é importante entender que a precisão não conta toda a história. Então, avaliamos nossas redes neurais por sua capacidade de classificar algo com precisão, e se vemos um valor de precisão de 99,9%, nos parabenizamos e nos damos tapinhas nas costas, mas muitas vezes isso não é suficiente para pensar. Em primeiro lugar, existem diferentes tipos de erros. Isso é o que chamamos de erro tipo um, que é um falso positivo. É quando você diz que algo é algo que não é. Por exemplo, talvez você não tenha interpretado mal um tumor que foi medido por alguns, você sabe, biópsia que foi tirada de uma amostra de mama como sendo maligno, e que falso positivo de resultado canceroso maligno poderia resultar em riel desnecessário Cirurgia a alguém. Ou talvez você esteja desenvolvendo um carro autônomo, e sua câmera na frente do carro vê uma sombra de um viaduto à sua frente. Isso está realmente acontecendo comigo, a propósito, e bate nos freios porque ele acha que a estrada está caindo no esquecimento nesta massa escura, e não há nada para você dirigir na sua frente. Ambos os resultados não são muito bons. Isso poderia ser pior. Lembre-se, quero dizer, sem dúvida, é pior deixar um câncer sem tratamento do que ter um falso positivo ou um. Ou pode ser pior. Toe realmente dirigir para fora da borda de um penhasco do que para bater em seus freios. Mas também pode ser muito ruim, certo? Você precisa pensar sobre as ramificações do que acontece quando seu modelo recebe algo errado agora para o exemplo. O carro auto dirigindo. Talvez possa levar o nível de confiança do que ele pensa que está na sua frente e talvez trabalhar isso em quem está atrás de você. Então, pelo menos se você bater nos freios sem motivo, você poderia ter certeza de que não há alguém andando em sua cauda vai para Rear Andy ou algo assim. Então pense no que acontece quando seu modelo está incorreto, porque mesmo uma precisão de 99,9% significa que uma vez em cada 1000 você vai errar. E se as pessoas estão usando seu sistema mais de 1000 vezes, vai haver alguma consequência ruim que acontece. Como resultado, você precisa envolver sua cabeça em torno do que é esse resultado e como você quer lidar com isso. O segundo tipo é um falso negativo, e, por exemplo, você pode ter câncer de mama, mas não conseguiu detectá-lo. Você pode ter classificado errado. É ser benigno em vez de maligno. Alguém morre se você errar. Ok? Então pense muito de perto sobre como seu sistema vai ser usado e as advertências que você colocou no lugar, e as falhas seguras e os backups que você tem que ter certeza de que se você tem um sistema que é conhecido por produzir erros sob alguns condições, você está lidando com aqueles de uma forma responsável. Outro exemplo de um falso negativo seria pensar que não há nada na frente dos sindicatos, carro auto dirigindo, quando na verdade existe. Talvez não detecte o carro que parou no semáforo à sua frente. Isso também está acontecendo comigo. O que acontece então, Se você é se o motorista não está alerta, você bater no carro na frente de você e isso é realmente ruim novamente. Pessoas podem morrer. Ok, então as pessoas estão muito ansiosas para aplicar aprendizagem profunda em diferentes situações no mundo real. Mas muitas vezes as consequências do mundo real de fazer algo errado é uma questão de vida e morte , literalmente. Então você precisa realmente, realmente, realmente pensar sobre como seu sistema está sendo usado. E certifique-se de que seus superiores e as pessoas que estão realmente lançando isso para o mundo entendam as conseqüências do que acontece quando as coisas dão errado e as chances reais de as coisas darem errado. Você sabe que você não pode vender mais seus sistemas é totalmente confiável porque eu prometo que eles não são. Também pode haver preconceitos ocultos no seu sistema. Então só porque a rede neural artificial que construiu não é humana, não significa que seja inerentemente justa e imparcial. Lembre-se, seu modelo é tão bom quanto os dados com os quais você o treina. Então vamos dar o exemplo se você vai construir uma rede neural que pode tentar prever se alguém é contratado ou não apenas com base nos atributos dessa pessoa. Agora você, seu próprio modelo, pode ser puro e o que não. Mas se você está alimentando dados de treinamento de humanos reais que tomaram decisões de contratação que treinamento vai refletir todos os seus preconceitos implícitos. Isso é apenas um exemplo. Assim, você pode acabar com um sistema que é, fato, racista ou ágil ou sexista simplesmente porque os dados de treinamento que você fornece foram feitos por pessoas que têm esses preconceitos implícitos que podem não ter sequer conhecimento deles no tempo. Ok, então você precisa tomar cuidado com essas coisas. Coisas simples que você pode fazer. Quero dizer, obviamente, fazer uma característica real para este modelo que inclui idade, sexo, raça ou religião seria uma péssima ideia, certo? Mas posso ver algumas pessoas fazendo isso. Pense duas vezes antes de fazer algo assim. Mas mesmo que você não coloque implicitamente recursos que você não quer considerar fazem parte do seu modelo, pode haver consequências involuntárias ou dependências em seus recursos que você talvez não tenha pensado. Por exemplo, se você estiver alimentando anos de experiência para o sistema que prevê se alguém deve ou não obter uma entrevista de emprego, você terá um viés implícito em seu direito. Os anos de experiência serão definitivamente correlacionados com a idade do candidato. Então, se seus dados de treinamento anteriores tiveram um preconceito para você sabe, homens brancos em seus 20 anos que estão acabados de sair da faculdade, seu sistema vai penalizar candidatos mais experientes que poderiam na verdade ser melhores candidatos que passaram simplesmente porque eles eram vistos como sendo velhos demais por pessoas humanas. Então pense profundamente se o sistema que você está desenvolvendo tem preconceitos ocultos e o que você pode fazer para pelo menos ser transparente sobre o que esses preconceitos são. Outra coisa a considerar é, é o sistema que você acabou de construir realmente melhor que um humano. Então, se você está construindo um sistema de aprendizagem profunda que as pessoas em seu departamento de vendas ou sua gerência ou seus investidores realmente querem vender algo que pode substituir empregos e salvar pessoas foram poupar dinheiro das empresas. Em vez disso, você precisa pensar se o sistema que você está vendendo realmente é tão bom quanto um ser humano. E se não for, quais são as consequências disso? Por exemplo, você pode criar sistemas de aprendizagem profunda que executam diagnósticos médicos, e você pode ter um representante de vendas muito ansioso que queira vender que está sendo melhor do que um médico humano. É realmente o que acontece quando o seu sistema de TI dá errado? Pessoas morrem? Isso vai ser ruim. Seria melhor insistir com seus superiores que este sistema só é comercializado como uma ferramenta suplementar para ajudar os médicos a tomar uma decisão e não como um substituto para seres humanos, tomando uma decisão que poderia afetar a vida ou morte de novo. Autocarro de condução é outro exemplo onde se você errar, se você é um carro auto-dirigindo, não é realmente melhor do que um ser humano e alguém coloca seu carro em piloto automático, ele pode realmente matar pessoas. Então eu vejo isso já acontecendo. Você sabe onde carros auto-dirigentes estão sendo supervendidos e há muitos casos de ponta no mundo ainda onde carros auto-dirigentes simplesmente não podem cortá-lo onde humanos poderiam, e eu acho que isso é muito perigoso. Além disso, pense em aplicações não intencionais de sua pesquisa. Então deixe-me contar uma história, porque isso realmente aconteceu comigo mais de uma vez. Às vezes você desenvolve algo que você acha que é uma coisa boa que será usado para uso positivo no mundo real. Mas acaba sendo torcido por outras pessoas em algo que é destrutivo, e isso é outra coisa que você precisa pensar. Então deixe-me contar uma história, então você precisa pensar sobre como a tecnologia que você está desenvolvendo pode ser usada de maneiras que você nunca antecipou. E esses usos podem ser, de fato, maliciosos. Isso está acontecendo comigo algumas vezes. Eu não estou falando teoricamente aqui, e isso não se limita apenas a aprendizagem profunda. É realmente um problema com o aprendizado de máquina em geral ou realmente qualquer tecnologia nova e poderosa. Às vezes, nossa tecnologia fica à frente de nós como uma espécie, você sabe, socialmente. Deixa-me contar-te uma história. Então isso não é realmente não se relacionar com a aprendizagem profunda. Mas uma das primeiras coisas que construí na minha carreira foi na verdade um simulador de vôo militar e simulador de treinamento. A ideia era simular o combate numa espécie de ambiente de , realidade virtual,a fim de treinar os nossos soldados para preservar melhor as suas próprias vidas e, sabe, sair do campo de batalha com segurança. Senti que era uma coisa positiva. Ei, estou salvando a vida de soldados. Mas depois de alguns anos, a mesma tecnologia que eu criei acabou sendo usada em um sistema de comando e controle. Ele estava sendo usado para ajudar os comandantes a visualizar como realmente lançar tropas reais e realmente matar pessoas reais. Eu não estava bem com isso. E deixei a indústria em parte por causa disso. Um exemplo mais relevante. Quando eu trabalhei na Amazon Dot com, eu era um dos homens que eu quero levar muito crédito por isso porque as pessoas que vieram à tona as idéias estavam antes de mim. Mas eu era uma das primeiras pessoas realmente implementando algoritmos de recomendação e algoritmos de personalização na Internet, levando seu comportamento de usuário na Internet e destilando isso em recomendações de conteúdo para mostrar a você. E isso acabou sendo uma espécie de base que foi construída ao longo dos anos. Isso acabou levando a coisas como os algoritmos de segmentação do Facebook é outro exemplo disso. E você sabe, quando eu olho para como as pessoas estão usando notícias falsas e contas falsas nas redes sociais para tentar quando eu olho para como as pessoas estão usando notícias falsas e contas falsas nas redes sociais para tentar difundir suas crenças políticas ou, você sabe, algum motivo oculto que pode ser difundir suas crenças políticas ou, você sabe, impulsionado financeiramente e não para o benefício da humanidade, eu não me sinto muito bem sobre isso, você sabe, quero dizer, a tecnologia que eu criei na época apenas para vender mais livros, que parecia inofensivo o suficiente, acabou ficando torcido em algo que realmente mudou o curso da história de maneiras que podem ser boas ou ruins, dependendo de suas inclinações políticas. Então, novamente, lembre-se de que se você realmente tem um emprego em aprendizado profundo e aprendizado de máquina, você pode ir a qualquer lugar que quiser. Se te pedirem para fazer algo que é moralmente questionável, não precisa fazer isso. Você pode encontrar um novo emprego amanhã, ok? Quero dizer, este é um campo muito quente, e no momento, quando você tem experiência no mundo real nele, o mundo é sua ostra. Sabes, se te pedirem para fazer algo moralmente questionável, podes dizer não, outra pessoa te contratará amanhã. Eu prometo a você, se você for bom em tudo. Então, eu vejo isso acontecendo muito ultimamente. Há muitas pessoas publicando pesquisas sobre o uso de redes neurais para decifrar as senhas das pessoas . Ou Teoh, você sabe, ilustrar como ele poderia ser usado para o mal, por exemplo, tentando prever a orientação sexual das pessoas apenas com base em uma imagem de seu rosto. Quero dizer, isto não pode ir a lado nenhum. Rapazes bons. O que você está tentando mostrar publicando esse tipo de pesquisa? Então pense duas vezes antes de publicar coisas assim, pense duas vezes antes de implementar coisas como essa para um empregador porque seu empregador só se preocupa em ganhar dinheiro com lucro. Eles estão menos preocupados com as implicações morais sobre a tecnologia que você está desenvolvendo para obter esse lucro, e as pessoas verão o que você está construindo lá fora, e eles provavelmente vão usar a mesma tecnologia, essas mesmas idéias e torcido em algo que você pode não ter considerado. Então eu só quero que você mantenha essas idéias e preocupações na parte de trás da sua cabeça, porque você está lidando com novas e poderosas tecnologias aqui. E cabe a nós, como tecnólogos, tentar orientar essa tecnologia na direção certa e usá-la para o bem da humanidade e não em detrimento da humanidade. Soa muito, muito alto nível, alta pregação de cavalos, eu sei. Mas estas são preocupações muito reais, e há muitas pessoas por aí que compartilham da minha preocupação. Então, por favor, considere essas preocupações enquanto você mergulha em sua carreira de aprendizado profundo. 19. Auto-Encoders de diferentes de: Está na hora de entrar na parte divertida deste curso. Vamos falar sobre modelagem generativa. Esta é a tecnologia por trás de todos esses aplicativos virais que permitem trocar rostos por aí e envelhecer pessoas e coisas assim. Também a tecnologia por trás de falsificações profundas, tipo um cartaz da discussão ética que tivemos no início do curso, mas eu vou poupá-lo do meu discurso sobre isso por enquanto antes que possamos falar sobre redes adversárias generativas embora, que é a tecnologia por trás de tudo isso. Precisamos falar sobre autocodificadores variacionais, que é a base de redes adversárias generativas. Então vamos mergulhar em VAEs primeiro antes de falar sobre autocodificadores variacionais, Vamos primeiro falar sobre codificadores automáticos em geral. Uma espécie de diagrama de como eles funcionam. Assim, um codificador aprende como reduzir a entrada para suas características latentes. Então esse é o lado esquerdo deste diagrama aqui, a parte amarela ali. Então, basicamente, pegamos uma entrada que é muitas vezes uma imagem. E usando convolução, assim como vimos em redes neurais convolucionais, destilamos isso para algum tipo de representação das feições latentes são vetores latentes desse sinal de entrada. Então nosso codificador parece muito com uma CNN. Ele está usando camadas convolucionais e max-pooling e todas essas coisas para tipo de destilação para baixo os padrões na entrada que estamos treinando com, até esses vetores latentes que estamos representando aqui como a caixa z azul no centro Lá. Então, nada de novo lá. Do outro lado temos o decodificador, que é basicamente o inverso do codificador. Então ele está sendo treinado sobre como reconstruir imagens completas são dados completos, mais geralmente a partir desses vetores latentes na caixa z lá. Então, usando convoluções transpostas e max d pooling e coisas assim. Ele aprende como pegar esses vetores latentes e reconstruí-los em uma imagem completa completa ou um conjunto de dados completo. Então, enquanto estamos treinando isso, o objetivo é tentar obter a entrada e a entrada reconstruída para ser o mais semelhante possível. É para isso que estamos tentando otimizar. Então x deve ser igual a x prime, onde x é as imagens de entrada originais que estamos treinando em x prime ou as imagens reconstruídas geradas com base nesses fatores latentes, esses vetores latentes que aprendemos através do treinamento processo. muito interessantes. Agora o sistema como um todo é treinado de tal forma que a entrada original que no codificador é o mais próximo possível dos dados reconstruídos gerados pelo decodificador. Sabe o que acabei de dizer? Mas deixe-me tentar torná-lo um pouco mais real exemplo. Digamos que estamos treinando isso em fotos de sapatos, tudo bem, só para escolher algo do nada. Então, o codificador destilar isso em uma espécie de essência do que faz um tipo diferente de sapato. E não vai pensar nisso nestes termos. É só uma rede neural, certo? Mas o que esses vetores latentes podem representar é que essa coisa se encaixa no padrão de uma sandália, e esse tipo de coisa se encaixa no padrão de um tênis. E essa outra coisa se encaixa no padrão de uma bota que aprendi. Ele não sabe como rotulá-los ou chamá-los dessas coisas, mas isso é o que ele pode aprender naqueles vetores latentes na caixa z no meio lá. E o decodificador aprenderá como pegar isso e reconstruir uma imagem completa de uma bota ou sandália ou um tênis baseado naquele vetor latente ali. E poderia haver mais do que apenas uma classificação, certo? Quero dizer, um vetor latente muito simples seria apenas uma classificação de que tipo de sapato é este, mas podemos ter mais informações lá que são mais nuances. E essa é a beleza deste sistema é um pouco mais, um pouco mais flexível. E quando treinarmos todo o sistema, poderíamos jogar o codificador fora porque só o usamos para treinar o decodificador. Então, se você quiser apenas gerar imagens sintéticas de diferentes tipos de sapatos, você poderia usar o decodificador para fazer isso e as idéias, você pode gerar um monte de imagens sintéticas geradas de sandálias ou tênis ou o que quer que seja aleatório se você quisesse. E é aí que vem os fundamentos de todos esses tipos de, você sabe, rostos fabricados que você vê em aplicativos virais. Então, há muitas aplicações para isso. Quero dizer, você sabe, voltando para a discussão ética, ninguém realmente queria que isso fosse usado para falsificações profundas estão enganando as pessoas escrever que o objetivo original era realmente para compressão. Então você pode pensar nisso como uma espécie de maneira silenciosa de comprimir dados para baixo. Então, se você quer ter uma maneira limpa de dizer, eu só quero ter uma foto de uma sandália. Aqui está uma maneira de fazer isso com apenas basicamente alguns bytes de informação potencialmente, onde ele aprende como reconstruir isso sem qualquer ruído. Além disso, pode ser aplicado a duas reduções de dimensionalidade. Obviamente a mesma coisa que a compressão. Estamos pegando essa entrada de maior dimensão e reduzindo-a a esses vetores latentes lá em vez de uma representação de menor dimensão. Ele também tem aplicativos em busca. Então poderíamos usar isso para tipo de destilação de um corpus de dados de texto até seus termos de pesquisa relevantes. Desruído, nós podemos, o decodificador pode ser usado para reconstruir uma imagem que não tem ruído nele baseado na imagem que tem ruído nele. Essa é outra boa aplicação. Eu usei isso no Photoshop o tempo todo. Ou uma coloração também é uma aplicação legal. Talvez isso possa ser treinado para reconhecer que esta foto de uma pessoa parece que ele está usando um par de jeans e esta imagem em preto e branco. E baseado na forma e no tom de cinza nessa imagem, achamos que é um par de jeans e talvez eu devesse colorir azul porque a maioria dos genes são azuis. Então, novamente, não é pensar sobre isso nesses termos, mas esses são os rótulos que podemos anexar ao que está acontecendo sob o capô lá. Então, novamente, o truque para fazer isso no decodificador é usar uma convolução de transposição em vez das convoluções. Então, em vez de camadas Conf 2D. Estamos usando camadas transpostas conf 2D para reconstruir imagens a partir dessas feições latentes que falamos. Então, o que vai ser aprender todos os pesos a usar para criar uma nova imagem com novos pixels a partir de uma representação de menor dimensão. E novamente, ele pode ser usado em mais do que apenas imagens como falamos, pesquisa e informação de texto é outro aplicativo, mas as imagens são o exemplo mais fácil de envolver sua cabeça por aqui. Então, com uma convolução de transposição, não estamos destilando coisas ou diminuindo imagens. Na verdade, estamos expandindo-os para a sua forma original. Estamos tentando, muitas vezes você vai vê-lo usado com um passo de dois. Eu também vi alguns decodificadores onde eles meio que intercalam tenta atacar de 12 em diferentes camadas. Então, se você precisar de mais complexidade, mas você provavelmente verá um passo de dois em algum lugar. E novamente, se você estiver usando o pool máximo em vez de pool máximo, como falamos quando falamos sobre redes neurais convolucionais. Então pense na Dakota ou aproximadamente como uma CNN que funciona de trás para frente é uma boa maneira de envolver sua cabeça em torno dele. Então vamos falar especificamente sobre autocodificadores variacionais. O que queremos dizer com isso? Então, em um autocodificador variacional, esses vetores latentes são distribuições de probabilidade. E esta é a maneira que podemos representar graficamente essas distribuições de probabilidade para um determinado conjunto de categorias ou o que você tem. Então representamos essas distribuições de probabilidade pela média e variância da distribuição normal gaussiana. Assim, um autocodificador variacional está usando especificamente distribuições normais gaussianas e as propriedades dessas distribuições como seus vetores latentes que ele aprende ao longo do tempo. Matematicamente, podemos expressá-lo assim. Os dados de entrada x é expressa como uma probabilidade de Z dado X onde Z ou são esses vetores latentes. E então podemos reconstruir z usando uma probabilidade de X dado Z. Então invertendo isso de volta em sua cabeça para reconstruir a imagem original. E esta é a inspiração de redes adversárias generativas ou GANs. Então chegaremos lá em breve. Veremos que GANs são apenas mais uma rotação em autocodificadores variacionais onde é mais geral do que usar distribuições normais gaussianas. Uma coisa que você vai ver no código que devemos falar é algo chamado de reparos. Uau, isso é difícil de dizer. Truque de reparametrização. Eu não vou dizer isso de novo, porque isso é um furacão de língua. Então, um problema matemático com a idéia de VAEs é que a distribuição de probabilidade que estamos chamando de Z não pode ser diferenciada. Sempre que você tem aleatoriedade na equação, essas distribuições aleatórias que jogam uma chave inglesa no cálculo, certo? E como você deve se lembrar de quando falamos sobre treinamento de redes neurais, precisamos usar os derivados do sistema para retropropagação e o aprendizado real para trabalhar, certo? Então o truque que usamos para contornar isso é convertendo a amostragem aleatória e z para uma forma determinística. Matematicamente podemos chamar que Z é igual a mu mais sigma vezes epsilon. As letras gregas específicas que ele usou, não importa, estamos usando diferentes no diagrama aqui. Mas a idéia é que estamos introduzindo este novo termo Epsilon ou como você quiser chamá-lo, onde a aleatoriedade é movida para fora. Então epsilon é a variável aleatória da distribuição normal padrão aqui. E empurrando isso para fora em seu próprio termo, isso empurra o passo aleatório para fora da rede, tem uma entrada e então podemos ter um gráfico conectado novamente que podemos realmente diferenciar e realmente fazer treinamento e retropropagação. Então eu não vou entrar muito na matemática disso. Só quer que saibas o que é isso. Também no assunto das coisas que você só precisa saber o que eles são é Kullback-Leibler ou divergência KL para abreviar. Isso resolve o problema de medir a distância entre duas distribuições de probabilidade. Então o que precisamos como reciclagem para medir a distância entre as distribuições de probabilidade de nossos dados originais e os dados reconstruídos. Queremos que isto seja o mais próximo possível, certo? E uma maneira de medir isso é a divergência do KL. Às vezes eles chamam de distância do movimento da terra por causa de uma analogia usada de quanta terra você precisa mover para transformar os Estados Unidos na forma do Reino Unido. Acho que esse é o exemplo usado. Mas é uma maneira mais simples de pensar sobre isso como este diagrama aqui. Digamos que temos uma forma de três pilhas de três blocos. Basicamente, quantos quarteirões tenho que mover para que pareça nove pilhas de um bloco, certo? Então, é apenas quanta informação eu preciso para mover ao redor para fazer essas duas distribuições, esses gráficos 2D, alinhar-se um com o outro. Matematicamente parece assim. Então soma de P de x vezes o log de P de x sobre q de x, que é matematicamente equivalente à entropia cruzada de p e q menos a entropia de P. Então, às vezes também chamamos essa entropia relativa. E como você deve se lembrar, entropia é uma função de perda muito comum. Isso significa que podemos usar isso como uma função de perda enquanto treinamos nosso autocodificador variacional. Além disso, podemos decompor isso como esta função aqui, eu não vou entrar na derivação matemática disso. Mas quando você vê essa função, é daqui que ela vem. Essa é a função de perda de Kullback-Leibler aqui, expressa como ele poderia vê-lo em TensorFlow. Então, com isso, vamos mergulhar em um notebook e ver como os VAEs realmente funcionam. 20. VAE: manual com a moda: Tudo bem, vamos ver os autocodificadores variacionais em ação e o pobre pouco de torção nas coisas. Nós não vamos usar o conjunto de dados MNIST tradicional de números manuscritos executar East LA Fashion MNIST conjunto de dados, que é na verdade uma pequena imagem é pedaços de roupa, então misturá-lo um pouco aqui. Nós vamos tentar fazer é treinar nosso VAE para gerar fotos de roupas. Então vamos ver como funciona. Tudo bem, então vamos mergulhar aqui, abrir o caderno de autocodificadores variacionais dos materiais do curso se quiser acompanhar. No entanto, se você quiser acompanhar, é muito importante que você tenha uma GPU disponível, que você tenha a GPU TensorFlow instalada. Caso contrário, você vai descobrir que isso leva muito tempo para treinar. Então, se você não apenas dirigindo para este link aqui no tensorflow.org barra instalar GPU barra. E isso vai guiá-lo através do que você precisa. Você precisará de uma placa gráfica NVIDIA e provavelmente precisará acessar o site do desenvolvedor da NVIDIA e se inscrever para instalar a biblioteca CU DNN também. Mas isso explica o que você precisa fazer se quiser acompanhar e não tiver a GPU TensorFlow instalada se não souber se você tem o suporte de GPU pronto. Isso é o que este primeiro bloco verifica. Então vamos em frente e Shift Enter aqui. E ele só vai listar quantas GPUs eu tenho acesso a partir do TensorFlow. Ele também vai carregar a própria biblioteca do TensorFlow. Então isso vai levar um pouco de tempo extra. Eu posso ouvir meu disco rígido chugging longe é que ele carrega TensorFlow. Tudo bem, o chugging, está diminuindo. Temos uma GPU disponível. Isso é o suficiente. Mas se ele diz 0 novamente, você provavelmente vai querer parar em instalar a GPU TensorFlow ou apenas assistir o vídeo sem seguir adiante, porque caso contrário ambos os VAEs e GANs vão demorar muito tempo para treinar. Tudo bem, nós também vamos definir uma semente aleatória consistente para que eu possa obter resultados um pouco consistentes deste caderno e não ter nenhuma surpresa desagradável. Isto é bem complicado. É mais difícil do que você imagina ter uma semente aleatória consistente e obter resultados consistentes. E isso é porque estamos usando uma GPU. Então estamos fazendo um monte de treinamento em paralelo e obtendo resultados consistentes com isso quando você está lidando com condições iniciais geradas aleatoriamente e várias aleatórias dentro do próprio modelo. Até isso pode ficar um pouco arriscado. Mesmo com tudo isso que estamos fazendo aqui, não vamos obter resultados perfeitamente consistentes, mas pelo menos será perto. Então vamos em frente e Shift Enter sobre isso também. Certo, vamos falar um pouco sobre esse conjunto de dados de moda m-ninho. Então, como eu disse, é como o conjunto de dados MNIST, o que temos usado antes, onde é apenas dígitos manuscritos de 00 a 9, certo? A diferença é que em vez de números, estamos olhando fotos de roupas. Então, um pouco interessante. E as várias classes que temos disponíveis para nós, nossas camisetas, calças e puxadores. Acho que isso veio do Reino Unido ou algo assim que são calças e blusas de onde eu venho. Vestidos, casacos, sandálias, shorts, tênis, bolsas e botas de tornozelo. E assim você pode ver que o exemplo que eu falei nos slides têm diferentes tipos de sapatos não era teórico. Nós realmente vamos estar olhando para sandálias, tênis e botas de forma independente aqui. Então, vamos começar importando nossos dados e certificando-se de que entendemos a dimensionalidade deles. Então tudo o que vamos fazer aqui é carregar o conjunto de dados de moda m-nest, que convenientemente é construído em conjuntos de dados de pontos Keras já para nós, embora isso e vamos apenas verificar se tudo está como esperamos, 60 mil imagens de treinamento e 10 mil imagens de teste. Cada um tem 28 por 28 imagem em tons de cinza. Certo, Shift Enter e nada está reclamando. Então, tudo está como esperamos. E é sempre uma boa idéia dar uma olhada nos dados e ter uma idéia para eles antes de começar a mexer com eles. Então o que vamos fazer aqui é conspirar. O que isso parece em uma grade de nove por nove vai pegar nove amostras aleatoriamente fora do nosso conjunto de treinamento 60000 e traçar cada uma usando escala de cinza. E vamos ver se conseguimos arrancar nove aleatoriamente. Então você pode ver que nós temos parece um, eu acho que seria chamado de uma bolsa de sandália. Vamos tratar de umas calças ou calças como lhe chamam. Bota de tornozelo, eu acho. Honestamente, não sei o que é isso. Acho que é uma bolsa. Então você pode ver que os dados não são os melhores para começar, mas é isso que os torna desafiadores e interessantes, certo? Mas eles são bonitos para aquela coisa. Não tenho certeza do que é isso. Tudo o resto é bem reconhecível como uma peça de roupa. Certo, então a primeira coisa que precisamos fazer é pré-processar nossos dados. A primeira coisa que vamos fazer é combinar nossos dados de treinamento e teste juntos. Por quê? Porque este não é um problema de classificação que não estou a tentar perceber é que esta questão é um par de calças. Estou tentando criar um sistema que possa gerar fotos de roupas em geral. Então, porque eu não estou realmente tentando testar minha capacidade de classificar essas coisas que teste conjunto de dados com esses dados de rótulo. Isso me diz que se eu classifiquei direito, não é realmente útil para este problema. Então, em vez disso, vou usá-lo para dados extras de treinamento. Então a primeira coisa que vamos fazer é concatenar o conjunto de dados de treinamento e o conjunto de dados de teste juntos em um único conjunto de dados chamado Creative Dataset. Eu também vou adicionar uma dimensão extra a esse conjunto de dados porque nossas camadas convolucionais esperavam três canais de entrada, não apenas para. Eu também vou converter isso para dados de ponto flutuante e normalizar isso para 0 para um. Então, os dados brutos serão apenas dados inteiros de 0 a 255 representando o quão brilhante esse pixel é. Isso realmente transforma isso para um número de ponto flutuante entre 01 porque os valores de ativação sigmóide em nosso modelo estão entre 01. Então nós estamos apenas massageando os dados aqui para ajustar a entrada de nossas camadas convolucionais. Melhor Shift Enter para executar isso. Tudo bem, agora as coisas ficam interessantes. A primeira coisa que vamos preparar é a nossa camada de amostragem aqui. é aqui que esse truque de reparametrização, eles realmente acertaram, entra em jogo aqui. Então lembre-se, precisamos mover esse componente aleatório para um termo epsilon, mantendo Mu e Sigma, a média e variância de nossos dados vindo aqui, na verdade, vamos usar o log da variância como entramos aqui, como você verá em breve. Então, nossa camada de amostragem vai ser esta camada personalizada, e ele vai tomar as entradas da média e variação de log. Ele irá então extrair como, o que o tamanho do lote é olhando para a primeira dimensão da entrada média z chegando. E a dimensionalidade desses dados olhando para a segunda dimensão, então calculamos epsilon, esse é o termo aleatório que falamos nos slides. É apenas um número aleatório normalizado dessa forma que esperamos igualar o que estamos recebendo para os dados z médios que estão chegando. Então estamos criando um monte de números aleatórios epsilon no tamanho de qualquer tamanho do lote vezes o número de dimensões que temos. E o que retornamos é apenas u mais sigma vezes epsilon. É um pouco mais complicado porque, novamente, estamos usando o registro da variação aqui para fins de treinamento mais tarde. Então, para converter isso de volta para oito variância real, tomamos o exponencial do que de 0,5 vezes o log da variância. Então um pouco de álgebra básica lá. Mas fundamentalmente isso está retornando o truque de reparametrização que falamos de z é igual a mu mais sigma vezes epsilon. Muito bem, a seguir vamos criar o nosso modelo de codificador. Vamos fazer isso antes que esqueçamos Shift Enter. Vamos usar as APIs funcionais do Keras para construir isso porque é um pouco complicado ou mais complicado do que o habitual. Não é assim tão difícil. Muito bem, então vamos ter este código de construção ou função. Seu trabalho é retornar um modelo Keras para a parte codificadora do nosso modelo maior. Vamos começar configurando um modelo sequencial que consiste em duas camadas conf, 2D. Vamos começar com um 128. Número de filtros está caindo em 64, então achatará isso e despejá-lo em uma camada densa de 256 neurônios no final. E para dois, como conversamos. Novamente, estes são hiperparâmetros, essa topologia deste, o número exato de filtros que você usa, cada camada de convolução, essas são coisas com que você pode brincar. O número de camadas de convolução que você tem, quais são os passos. Então eu vi pessoas, como eu disse, os Internos deixarem um passo de 12 lá para mais complexidade. Se eles precisam de mais, mais neurônios em seu modelo para fazer uma tarefa mais complexa. uma vez, é muita tentativa e erro acertar isso. Então é o segredo sujo da aprendizagem profunda e muito disso é apenas experimentação e tentar coisas diferentes até que você veja o que funciona melhor. Tudo bem, então nós vamos passar em nossas entradas através daquele bloco convolucional. Então nós apenas chamamos esse modelo sequencial que acabamos configurar com as entradas do codificador que vêm para esta função, este código de construção ou função. Em seguida, criaremos uma camada dedicada para aprender a média e a variância em paralelo. Então vamos enviá-los para diferentes camadas aqui. Um será uma camada densa da dimensionalidade que passaremos como parâmetro para construir o codificador novamente, outro hiperparâmetro com o qual podemos jogar. Um vai ser dedicado a aprender os meios, e os outros serão dedicados a aprender os registros das variações à medida que avançamos. Ok? Em seguida, chamamos camada de amostragem com a média z e z log Vera que acabamos de configurar lá. Novamente, isso é despejá-lo aqui onde aplicamos o truque de reparametrização para combinar tudo. Tudo bem, e finalmente retornamos o modelo real de Keras que é composto em tudo. Passamos no modelo com as entradas do codificador Z, me, ver log var e os vetores latentes lá, z. tudo bem, e uma pequena nota aqui nos comentários aqui para notar que z significa e z log vara ou não a saída final deste codificador, mas vamos alimentar isso na perda de divergência KL. E um pouco, agora que temos nossa função de construir o codificador, vamos realmente usá-lo. Vamos configurar nossa camada de entrada aqui de 28 por 28 por 1. Então, novamente, nossas imagens de entrada de moda m-nest ou 28 por 28 com um canal de cores, apenas tons de cinza. Vamos ligar para esse codificador. As entradas passam para o codificador de construção com dimensões latentes de apenas duas. E as entradas que acabamos de carregar. E vamos imprimir o resumo só para fazer uma verificação de sanidade, Shift Enter. Veja, nós chegamos lá nós vamos. Tudo bem, parece razoável para mim. Seguindo em frente. Agora precisamos também implementar nosso decodificador. Então, de novo, é o inverso do que acabamos de fazer. Vamos usar transpôr 2D calmo em vez de 2D calmo porque em vez de tentar reduzir essas imagens para seus vetores latentes, vamos expandi-las de seus vetores latentes para uma imagem. Então estamos meio que indo para trás aqui. O modelo aqui vai começar com a camada densa em torno de uma remodelação que para 7 por 7 por 64. E então vamos configurar três camadas transpostas com 2D, começando em 128, filtros para baixo para 64, e finalmente para baixo para uma única imagem que devemos terminar com. Um pouco confuso potencialmente aqui porque você pode dizer para si mesmo, por que estamos diminuindo de tamanho aqui quando estamos tentando fazer uma imagem maior. Mas esta é a dimensionalidade do número de filtros que estamos aplicando aqui e não o tamanho da imagem que estamos produzindo. Então, tenha isso em mente. Certo, devolveremos o modelo. Novamente, apenas passando esse modelo que chamamos de L1 aqui com uma entrada latente sendo passada para o decodificador de construção. E vamos chamar-lhe descodificador. E então nós vamos realmente construí-lo carregando a forma de entrada lá novamente, a forma que entra é apenas dois porque nós criamos o codificador com a dimensionalidade de dois logo acima de nós, então vai chamar Bill decodificador lá e imprimir o resumo do modelo de descodificador. Shift Enter. Sim, parece-me razoável. Certo, a seguir precisamos configurar nossas funções de perda. Sim, plural, há dois deles, e eu realmente não fiz isso explícito nos slides, eu não acho, mas é definitivamente explícito aqui. Portanto, há duas funções de perda aqui. Uma delas é a perda de reconstrução, e é isso que vai penalizar imagens que não são semelhantes às imagens originais. Portanto, lembre-se que nosso objetivo geral é que nosso decodificador gere imagens o mais próximo possível das imagens originais que foram alimentadas no codificador automático. E esta é a função de perda que mede que está usando apenas entropia cruzada binária nos dados originais e os dados reconstruídos que foram gerados pelo nosso decodificador. Muito bem, coisas muito simples, Shift Enter. E então também vamos medir a perda de divergência do KL aqui também. E isso nós conversamos em profundidade nos slides sobre o que é tudo isso. Então eu não vou repassar isso de novo, mas nós conversamos sobre de onde todas essas fórmulas vieram de lá. Novamente, isso é olhar para a distância entre as distribuições de probabilidade em ambos os lados. Então, estamos olhando para a distribuição de probabilidade dos dados originais versus a distribuição de probabilidade gerada a partir dos dados gerados. E queremos que eles voltem a ser o mais próximo possível. E estamos medindo isso com a função de perda de divergência KL aqui. Então vamos em frente e definir isso também. Shift Enter. E bem, precisamos ter uma função de perda geral no final do dia, você não pode realmente ter duas funções de perda ao mesmo tempo. Então é isso que este próximo bloco faz que calcula a perda total como uma função de ambas as perdas de reconstrução, que novamente é apenas medir quão semelhantes as imagens originais e reconstruídas são umas às outras. E a perda de divergência de KL, que novamente está medindo quão perto as distribuições de probabilidade de cada imagem estão. Agora precisamos combiná-los de alguma forma. A coisa óbvia seria apenas tomar a maldade dos dois. Mas acontece que a ponderação que também é outro hiperparâmetro importante que precisa ser ajustado. Então você pode ver que estamos nos aprofundando bastante o número de hiperparâmetros que precisam de ajuste neste modelo no autocodificador variacional. É por isso que é tão difícil ter essas coisas bem treinadas. Agora este peso KL é basicamente o que estamos chamando esse parâmetro 3. Basicamente nós vamos estar esperando a perda de divergência KL por esse número. E esse é um parâmetro muito importante para efetivar o quão bons seus resultados finais são, ao que parece, então já fiz algumas experiências e resolvi o número de três, mas talvez você possa fazer melhor. Talvez uma maneira diferente produza melhores resultados para você. Vamos em frente e Shift Enter. Novamente. Tudo o que estamos fazendo aqui é pegar a perda de reconstrução, chamando essa perda um, a perda de divergência KL chamando que perdeu dois. E estamos devolvendo ambas as perdas individuais para que possamos acompanhá-las enquanto treinamos. Mas a perda total final que vamos realmente otimizar será a perda de reconstrução mais o peso de três vezes a perda de divergência de KL. É assim que os estamos combinando na função geral de perda. Tudo bem, seguindo em frente. Então, porque temos uma função de perda personalizada, nós meio que temos que fazer nosso próprio modelo personalizado que o usa. A maioria deste código parece um monte de código, mas a maioria de nós apenas manter o controle dessas diferentes funções de perda para que possamos graficá-las e visualizá-las mais tarde. Vamos criar um modelo VAE aqui que deriva do modelo keras dot. Então é apenas um modelo personalizado. Vamos criar o nosso pequeno construtor aqui que apenas configura um rastreador de perda total, um rastreador perdido CE, e um rastreador de perda KL. Então isso só vai ser usado para manter o controle da perda total que combinam a perda de que falamos, que inclui esse peso na perda de KL, a perda de reconstrução, que aqui é chamado de perda de CE, e o perda que é chamado k l os. E declaramos que todos são observáveis aqui neste bloco de código. E aqui é onde chegamos à carne real do nosso modelo real aqui, substituindo a função de passo de trem. Então, usamos uma fita de gradiente aqui no fluxo de tensor para realmente definir explicitamente como o treinamento funciona. Para o caminho para a frente, basta chamar codificador autodidata com os dados chegando. E isso retorna de volta como vimos acima, a média z, o z log var e o próprio z. Em seguida, construímos a imagem reconstruída chamando auto dot d codificador e realmente nos dará de volta nossas imagens reconstruídas. Então o codificador novamente está rodando nosso modelo de codificador para resumir essas imagens até a distribuição de probabilidade Z. E nós também estamos mantendo o controle das médias e variâncias independentemente aqui também. E então o decodificador é chamado com a distribuição de probabilidade Z resultante para tentar reconstruir essa imagem. E estamos chamando isso de reconstrução. Em seguida, calculamos a perda total entre os dois. E novamente, a perda total de cálculo está olhando tanto para a perda de reconstrução quanto para a perda de divergência KL. E nós vamos manter o controle de ambos de forma independente para que possamos vê-los. Finalmente, basta olhar para a perda total entre os dois para o treinamento real em si que acontece na fase de retropropagação, certo? Se você se lembra, eu tenho redes neurais apenas funcionam em geral. Então o que vamos fazer aqui é calcular os gradientes aqui com base nos pesos treináveis que configuramos. E nós vamos aplicar gradientes apenas invertendo esses gradientes e os pesos treináveis. E vamos otimizar esses pesos treináveis. O que nos une a todos é usar essa perda total aqui que veio da perda total de cálculo para realmente assar isso em como o backpropagation funciona. Então é aí que estamos incorporando nossa função de perda personalizada em como esse modelo é treinado. Novamente, vamos manter o controle de todas essas funções individuais de perda. Tanto o caos, a perda de reconstrução e a função de perda total que combina os dois de forma independente para que possamos graficá-los todos de forma independente também. E nós devolvemos todos os três só para que possamos manter o controle deles. Tudo bem, Shift Enter para configurar isso não deve demorar muito, mas este próximo bloco vai demorar muito tempo. Aqui nós vamos realmente fazer o treinamento. Então vamos configurar nosso modelo VAE passando em nosso modelo codificador e nosso modelo decodificador, o modelo VAE coloca todos juntos. Vamos compilar esse modelo usando o otimizador Adam. E essa taxa de aprendizagem é mais um hiperparâmetro que precisa ser ajustado. Este é um que eu tive que ajustar um pouco enquanto experimentava com este notebook eu mesmo. E finalmente, vamos chamar apto para realmente fazer o treinamento em si. Vamos usar 32 épocas de treinamento e um lote de 128. Ainda mais hiperparâmetros que precisam ser ajustados. Em geral, mais épocas é melhor. Mas se você está achando que o modelo não é estável, o que é bastante comum, mais pode não ser melhor. Então, novamente, experimentação é necessária para ver quantas épocas você realmente precisa uma vez que você faz tudo certo para obter bons resultados. E o tamanho do lote faz sentido. Então, muito fácil de sobrepor aqui, muito fácil para, você sabe, ficar preso em um mínimo local e não sair disso. Isso também é algo que acontece muito quando você está treinando essas configurações. Então eu vou em frente e começar isso com uma GPU. Vai demorar um pouco. Então o que eu vou fazer é através da magia da edição de vídeo, apenas para pausar esta gravação e voltar quando estiver feito, vamos olhar a primeira época correr pelo menos embora antes de eu fazer isso, eu acho que o ato de gravar este vídeo foi na verdade competindo por recursos na minha GPU. Lá vai ele. Então você pode ver aqui que podemos assistir a perda de reconstrução da perda de KL e a perda total se juntando lá. E você pode ver por que tivemos um peso que perda de KL um pouco. São números muito menores, pelo menos em primeiro lugar comparados com a perda de reconstrução. Assim, a perda de reconstrução está realmente dominando o comércio agora e sua contribuição para a perda total. E à medida que passamos o tempo, devemos ver que a perda de reconstrução fica cada vez menor. E como isso acontece, a perda de KL será mais um fator à medida que treina mais adiante. Então, realmente, quanto mais épocas você tem, melhor ele fica e mais que a perda de KL vai entrar em jogo. Tudo bem, Novamente, como eu disse, vou pausar isso e voltar quando estiver feito. Tudo bem, isso levou cerca de 10 minutos mesmo com uma GPU, mas nosso treinamento finalmente terminou e nós podemos meio que olhar para o que aconteceu aqui olhando para as funções de perda relatadas ao longo do tempo. Você pode ver que começamos com uma perda total de 313 e desceu para cerca de 266 aqui. Você pode definitivamente ver apenas olhando para ele, que estava realmente chegando a um ponto de retorno decrescente aqui, estava realmente lutando. Quando chegamos ao 31, ele realmente voltou aos 32. Então 266 parece ser quase tão bom quanto nós somos capazes de obter. Se isso é porque encontrou a melhor solução ou porque ficou preso em um mínimo local. Bem, acho que vamos descobrir. Você também pode ver que a perda de reconstrução é realmente muito maior do que a perda de KL. Então isso estava realmente pagando muito, desempenhando um papel muito maior do que k l perdas fomos. Então, pode fazer sentido experimentar o uso de um peso maior no k. uma perda se você tiver tempo, você pode querer brincar com isso um pouco. E também é possível que tenhamos ficado presos em um mínimo local aqui, eu acho que vamos ver como os resultados são bons em um momento aqui. Mas se assim for, experimentado com o tamanho do lote pode ser uma boa maneira de tentar sair desse mínimo mais facilmente. De qualquer forma, podemos ver o que está acontecendo aqui, mas vamos traçar porque passamos por todo esse trabalho de manter o controle de todos esses números. Então Luke, e aqui nós podemos realmente ver plotado a perda total, a perda de reconstrução, e a perda de KL. Novamente, o caos é um valor muito menor. Difícil ver o que está acontecendo lá. E você pode ver que depois de apenas algumas épocas aqui, ele meio que estava realmente lutando para melhorar e diminuir a função de perda de almoço ainda mais, esse caos é difícil de ver porque é tão pequeno em comparação. Então vamos ampliar e olhar para a perda de KL independentemente aqui. Você pode ver que isso estava ficando pior com o tempo. Então isso é meio interessante, certo? Então você sabe, definitivamente não a direção que você quer ir para uma função de perda, mas pelo menos não foi como, você sabe, subir exponencialmente, pelo menos começou a nivelar. Então isso pode sugerir que o treinamento para ainda mais épocas pode ter sido benéfico porque estamos começando a chegar a um ponto em que não poderíamos realmente espremer nada mais fora da perda de reconstrução, mas há melhorias para ser feita na perda de KL. Então, se formos mais longe e treinando, poderíamos ter visto que a lei KL começar a cair como ela começou a basicamente recorrer a isso para tornar o modelo melhor. Certo, então vamos ver que tipo de resultados temos aqui. Então vamos escolher aleatoriamente um mu de um e um sigma de variância de dois e ver o que conseguimos. Então, novamente, a idéia aqui é tipo de agora que nós treinamos o modelo, nós podemos jogar fora o codificador e apenas usar o decodificador para construir imagens sintéticas. Então vamos ver o que uma distribuição de probabilidade de 12 nos dá. Então vamos chamar o decodificador, pedir-lhe para prever, na verdade gerar uma imagem baseada na entrada de uma vírgula dois. E novamente, isso corresponde à nossa média e variância irá apenas traçar isso como uma imagem em tons de cinza 28 por 28 e ver o que obtemos de volta dela. Ei, isso é muito legal. Então criamos sinteticamente, aparentemente um par de calças que parece razoável, certo? Então, ei, estou muito feliz com isso. Esse é o treinamento funcionou. Incrível. Vamos mais longe. Então vamos realmente gerar 256 imagens agora inteiramente aleatórias. O que vamos fazer é adivinhar a distribuição Z cada vez com um mu aleatório e Sigma. E não se preocupe em adivinhar aqui, nós podemos realmente recuperar o mu e sigma reais associados a cada categoria sistematicamente, ou pelo menos aproximá-lo se quisermos. Mas, por enquanto, vamos gerar 256 imagens aleatórias. Então vamos apenas adivinhar com distribuições normais aleatórias para ambos Mu e Sigma em uma escala de quatro e ver o que recebemos de volta. Então esta construção 256, então essas distribuições aleatórias chamado de decodificador em toda a matriz de valores de entrada e plotá-los todos um de cada vez como novamente, e 28 por 28 imagens em escala de cinza e uma grade de 16 por 16. E lá temos. 256 imagens geradas sinteticamente de fechadas. E estes são realmente muito bons. Uau, estou feliz com isso. Então, sim, quero dizer, isso não é realmente muito pior do que as imagens de origem realmente. Então eu acho que tivemos sorte naquela vez e nós realmente batemos em uma solução real aqui durante o treinamento, sim, eu vejo, você sabe, suéteres, eu vejo camisas, eu vejo calças, eu vejo sandálias, eu vejo botas de tornozelo. Sim, nós realmente tivemos sorte com isso. Então, bons resultados, eu diria até agora. Então isso é tudo bem e bom. Podemos gerar imagens aleatórias de peças de roupa. Mas e se eu quiser gerar um tipo específico de peça de roupa? Como faço isso? E se eu só quiser desenhar um par de sandálias ou algo assim, certo? Bem, uma maneira de fazer isso seria apenas executar um caso conhecido de uma determinada categoria através do codificador, observar o Mu e Sigma que voltaram do codificador para aquela imagem e enviá-lo de volta para o decodificador para tentar obter uma imagem semelhante à que você acabou de passar para o codificador, certo? Não é perfeito. Não é uma maneira totalmente concreta de lidar com isso. Há algo chamado autocodificadores variáveis condicionais se você quiser uma abordagem mais concreta para fazer isso, mas esta é uma maneira razoável de fazê-lo. Você sabe, tirar uma foto de uma camisa e colocá-lo no decodificador e dizer, eu quero uma foto que se pareça com esta e você provavelmente vai ter uma volta curta. Então vamos escolher aleatoriamente uma imagem número cento, duzentos e oitenta, seja lá o que for em nosso conjunto de dados de treinamento. Vou expandir isso em três dimensões como o codificador espera que seja. E vá em frente e converta isso para um valor de ponto flutuante entre 01, indo para imprimir a forma disso apenas para verificá-lo novamente, enviá-lo para o nosso codificador, pedir-lhe para prever o que a distribuição de probabilidade irá acabam sendo para essa imagem específica. E então passaremos essa distribuição de probabilidade para nosso decodificador para obter de volta uma imagem sintetizada. E vamos ver o que exatamente essa distribuição de probabilidade é apenas digitando em z no final lá para imprimi-lo. Shift Enter. Certo, então podemos verificar se temos uma imagem de 28 por 28 por 1. São como esperávamos. E o que veio do codificador foi uma distribuição de probabilidade com uma média negativa de 0,427 e uma variância de 1,259. Tudo bem, legal. Então vamos em frente e pegar essa distribuição e ver o que ela nos dá. Então nós já chamamos o decodificador sobre isso e salvar o resultado em sintetizado visualizar o que sin sintetizar. E visualizaremos isso junto com a imagem original também. Então, preparem uma trama aqui. Nós vamos traçar a imagem de treinamento que nós alimentamos no codificador para obter uma coisa a ser semelhante. E eles vão cuspir de volta essa imagem sintetizada que deve ser semelhante a ela. Então Shift Enter. E sim, com certeza, acontece que a imagem número 11280 é o endereço, e recuperamos uma forma que se parece com o endereço. Então, fazendo isso, fomos capazes de sintetizar uma categoria específica de fechamento. Então essa é uma maneira de usar esse VAE. Outra coisa para a qual você pode usar VAEs é basicamente a aprendizagem não supervisionada. Então vamos visualizar o que essas distribuições de probabilidade pesquisam se nós um, colori-los pelas classificações conhecidas reais. Então eu vou alimentar em rótulos de nossos dados de treinamento e teste aqui para este gráfico e plotar as médias e variâncias em todo o nosso conjunto de dados lá a partir do codificador. Então vamos lançar todo o conjunto de dados em nosso codificador, plotagem, as distribuições de probabilidade resultantes, e colorir aqueles com base em suas categorias conhecidas. Consegui. Vamos em frente e Shift Enter e ver como isso se parece. E aí está. Então você pode ver que estamos vendo esses aglomerados. Podemos realmente visualizar que existem distribuições de probabilidade distintas, esses tipos diferentes de roupas. Então eu não sei o que essas cores diferentes representam. Talvez os roxos sejam calças e os verdes são vestidos. Eu não sei. Mas você pode pensar nisso como uma forma de aprendizagem não supervisionada onde essas diferentes áreas distintas de distribuições de probabilidade provavelmente correspondem a classificações, diferentes tipos de coisas em nossos dados fonte. Então, se eu não soubesse o que esses rótulos eram antes do tempo, talvez eu pudesse inferi-los investigando o que essas diferentes distribuições de probabilidade ligam em nossos dados de origem. Assim, outra possível aplicação de VAE, aprendizagem não supervisionada de categorias. Mas a aplicação mais interessante está na geração de imagens sintéticas. E, em seguida, vamos construir sobre isso com GANs. 21. Redes publicitárias de e de Adversarial de geração de: Muito bem, agora que temos autocodificadores variacionais sob o nosso cinto, vamos falar sobre redes adversárias generativas. É uma ideia parecida, mas diferente, sabe, diferente o suficiente para ser uma coisa própria. Sim, esta é a tecnologia por trás de falsificações profundas e todos aqueles aplicativos de troca de rosto viral em aplicativos antigos que você já viu antes. Por exemplo, esta é uma foto de alguém que não existe. Esta é a saída de uma rede adversária generativa que acaba de ser treinada sobre como gerar imagens realistas de cabeças das pessoas. Coisa real. Sim, e mais uma vez, não vou entrar na ética disto. Nós já lhe demos palestras sobre isso no início do curso. Mas esta é a tecnologia por trás de falsificações profundas, mas também é a tecnologia por trás de todos os aplicativos virais que você vê para troca de rosto em pessoas idosas, fazer as pessoas parecerem personagens da Disney e todas essas coisas, certo? Pesquisador assim tinha intenções mais nobres para este trabalho. Originalmente, alguns dos aplicativos previstos, estamos gerando conjuntos de dados sintéticos se você tiver informações privadas. Então isso é especialmente útil no campo médico onde você não pode facilmente obter dados reais de treinamento por causa das leis de privacidade, certo? Então, se você está tentando gerar uma nova rede neural que pode aprender a detectar câncer de mama ou algo assim. É difícil obter dados reais para que isso possa treiná-lo. Mas treinando um GAN em dados reais, podemos treiná-lo sobre como fazer conjuntos de dados sintéticos que são muito próximos dos originais, mas sem nenhuma informação privada real nele. Então essa é uma aplicação prática de GANs que não é apenas um aplicativo viral em seu telefone. Ele também pode ser usado para detecção de anomalias. Ele pode ser usado para comparar uma imagem com o que ela acha que uma imagem deve ser semelhante e detectar anomalias automaticamente dessa forma. Ele também tem aplicações em carros autônomos. Ele também tem aplicações em arte e música. Você sabe, você poderia treinar um GAN sobre como criar uma obra de arte no estilo de Picasso ou qualquer que seja seu artista favorito, ou como gerar uma sinfonia e o estilo de Beethoven ou Mozart. E isso realmente funciona. Você pode gerar peças de arte sintéticas e obras de música sintética usando GANs que são bastante convincentes. Então, quando você todas essas demonstrações impressionantes de uma IA que fez sua própria sinfonia, é assim que funciona e eu acho que isso está prestes a ser desmistificado para você. Não é tão complicado como você pode pensar. Tudo bem, então para entender como GANs realmente funcionam, você tem que realmente noodle neste diagrama aqui, isso realmente resume como tudo se junta. E como pode ver, não é tão difícil, certo? Então, é bem simples. Em primeiro lugar, não assumimos distribuições normais gaussianas nos vetores latentes que estamos aprendendo como VAEs. Pode ser qualquer coisa no caso de GANs. Mas o que é realmente diferente aqui é que estamos mapeando ruído aleatório em nosso gerador para distribuições de probabilidade ou o que quer que eles possam acabar sendo. E fazendo isso, tomando ruídos aleatórios e entradas, podemos gerar aleatoriamente, seja lá o que for como a saída deste, deste gerador. Então o gerador aprende como pegar algum tipo de sinal aleatório e fazer um rosto aleatório ou uma peça de música aleatória, ou uma arte aleatória, ou um conjunto de dados aleatórios, certo? Então é aí que essa aleatoriedade entra como a entrada para o gerador lá. E do outro lado temos um discriminador que está tentando aprender qual é a diferença entre imagens reais nas quais estou treinando o sistema como um todo contra as imagens geradas provenientes do gerador. Ok, então este é realmente o coração de tudo isso. Temos esse gerador que está aprendendo a gerar qualquer tipo de imagens ou dados que estamos tentando criar. E o trabalho discriminador é detectar se essas imagens geradas podem ser distinguidas das imagens reais em geral, certo? Então você vai treinar isso em um conjunto de exemplos de imagens de rostos. Então vamos dar um monte de imagens de rosto reais. O discriminador vai aprender a distinguir esses rostos reais dos rostos gerados em geral. E quando ele chegou ao ponto em que o discriminador não pode mais dizer a diferença. É quando terminamos o treinamento. Então você tem essa rede adversária adversa acontecendo aqui. A parte contraditória é que o gerador está em adversário do discriminador. Então o gerador está sempre tentando enganar o discriminador para pensar que a imagem está criando é real. E o discriminador está tentando pegar o gerador mentindo, certo? Então há uma espécie de intenção um com o outro. E isso faz com que seja uma coisa muito complicada para treinar, sabe, nas práticas é um sistema muito frágil para realmente começar. Mas uma vez que funciona, funciona muito bem. E é por isso que eu estou dizendo que uma vez que o discriminador não pode mais dizer a diferença entre os rostos reais e os rostos gerados são o real seja lá o que for gerado, estamos treinando em teoria. Porque, na prática, é muito difícil ter isto treinado, certo? Há uma tonelada de hiperparâmetros para sintonizar. Acaba por ser muito instável. Portanto, é necessário um monte de tentativa e erro para realmente treinar uma dessas coisas e obter bons resultados com isso. Mas quando você faz esse esforço, você acaba com algumas coisas impressionantes da GAN. Então, antes de seguir em frente, eu quero deixar você tipo de macarrão nesse diagrama um pouco mais porque este é realmente o coração de entender GAN. Então, ok, então nós temos ruído aleatório que estamos usando que está indo para um trem, um gerador que aprende a gerar, fabricado qualquer que seja o rosto neste exemplo. Então estamos treinando o sistema como um todo com rostos reais também. O discriminador está sendo treinado como distinguir o real das imagens ou dados falsos. Em geral, eles são ao longo do tempo o discriminador tem um tempo mais difícil e difícil de aprender o que é real e falso como um gerador fica melhor e melhor em gerar imagens falsas convincentes. Chegaremos a um ponto quando o discriminador não puder mais dizer a diferença, temos uma rede de adversários generativa bem treinada acontecendo aqui. Ok, então isso é meio que o coração disso. Estamos treinando um gerador como gerar dados falsos, um discriminador que é treinado para saber a diferença entre dados reais e dados falsos. E quando essas coisas se juntam, temos um gerador que pode gerar coisas que o discriminador não consegue distinguir entre as coisas reais. Está bem? Matemática chique. Isto é o que tudo se resume. Não vai entrar em muito, mas essa é a função de perda adversária para o sistema como um todo. Chamamos-lhe um jogo min-max, modo que vale a pena falar sobre isso. Novamente, o gerador está tentando minimizar sua perda e criando imagens realistas. Enquanto o discriminador está maximizando sua capacidade de detectar, para detectar falsificações. Então é quando dizemos Min sub g, que é um gerador minimizando sua perda e max sub D há o discriminador maximizando sua capacidade de detectar falsificações. Então é isso que tudo isso significa em termos de matemática extravagante. Como eu disse, é tudo muito complicado e delicado. O treinamento pode ser muito instável. Há um monte de ajuste, um monte de tentativa e erro envolvidos para fazê-lo funcionar bem. E apenas ao fazer o caderno que estamos prestes a olhar, levou muito tempo para conseguir isso juntos e você obtém resultados meio decentes com isso. Também pode levar muito tempo para treinar, muitos recursos computacionais para treinar. Mas uma vez que você tem, é uma maneira muito eficiente de criar imagens falsas de rostos ou o que quer que seja que você está tentando criar alguns outros problemas que ele corre para aqueles algo chamado colapso de modo. Então, um problema é que se você tem diferentes tipos de algo, você sabe, diferentes tipos de rostos, diferentes tipos de fotos de sapatos, o que quer que seja. O sistema pode apenas aprender a fazer uma dessas coisas de forma muito eficiente e muito convincente. E isso ainda resultará em uma função de baixa perda em todo o sistema como um todo. Portanto, não é incomum, por exemplo, se você está tentando treiná-lo como criar imagens falsas de sapatos. Para ele só realmente aprender a fazer imagens falsas de uma sandália. E esse é um problema chamado colapso de modo, onde aprendemos como fazer um tipo específico de coisa muito bem. Mas não é tão geral quanto queremos que seja. Ele também sofre com o problema de gradiente de fuga muito. Falamos sobre isso no início do curso. E com isso, vamos entrar em alguns exemplos de ver GANs em ação porque eu acho que faz muito mais sentido quando ele meio que vê o que está acontecendo em tempo real sob o capô. E então vamos mergulhar em um caderno e realmente começar a usar um. 22. Demonstração de GAN e treinamento ao vivo: Então, para ajudá-lo a entender como as GANs são treinadas, vejamos alguns exemplos práticos interativos aqui. E depois disso, vamos passar por um caderno para examiná-lo com mais detalhes. Mas uma ferramenta muito boa para visualizar como esse treinamento funciona é o laboratório GAN aqui. E vamos falar sobre o que está acontecendo aqui. Então, em vez de começar tentando gerar imagens falsas, vamos começar com algo mais simples, mais fácil de envolver nossas cabeças. Vamos apenas escolher uma distribuição de dados bidimensional aqui. Então o que eu vou fazer é tentar criar um GAN que aprenda a criar um anel. Ok? Então temos esta distribuição de pontos 2D nesta forma geral de anel aqui. E o que queremos fazer é treinar um GAN para pegar uma entrada aleatória e distribuição gerada aleatoriamente que corresponda tão bem quanto possível. Então, nesta visualização, vamos ver os pontos de dados reais plotados em verde. Isso vem da nossa distribuição real e os falsos criados pelo nosso gerador aparecerão em roxo enquanto treinamos. E à medida que o treinamento continua, seremos capazes de visualizar em um mapa de calor as funções de perda do gerador e do discriminador. Então, enquanto vamos, vamos ver o discriminador tentando classificar esses pontos é real ou falso. E o que devemos ver é que ele deve eventualmente convergir em torno de uma espécie de forma de anel onde identifica as coisas no anel como sendo reais e as coisas que estão fora do anel como sendo falsas. E podemos realmente ver ao longo do tempo quão bem o gerador está fazendo um complicado o discriminador e quão bom o discriminador está fazendo um dizer real e falso separado. Então vamos em frente e começar isso. Vamos tocar no play e podemos vê-lo em ação. Então você pode ver que nossos dados falsos aqui, é como ir por todo o lugar aqui no início como ele começa a aprender. Mas muito rapidamente ele vai começar a cair em cada vez mais de uma forma de anel. E podemos ver nosso discriminador aqui, mapas de calor. Então agora o discriminador está dizendo, ok, os falsos estão aqui, eles estão aqui. O roxo novamente é falso e verde é real. E já podemos ver que estamos recebendo uma espécie de anel, este círculo aqui de branco aqui, onde ele vai começar a colocar essa classificação verde real em torno desse anel e uma classificação falsa roxa em todos os outros lugares. E à medida que continuamos e devemos ficar mais apertados e mais apertados já estamos vendo que amostras falsas roxas geradas tentando obter mais e mais dentro dessa distribuição real que veio da distribuição de dados reais original lá. E vamos dar uma olhada nas métricas aqui. Então podemos ver que ao longo do tempo a função de perda de discriminadores está diminuindo mas meio que se mantém firme porque está começando a ficar cada vez mais difícil diferenciar os dois, certo? Mas a função de perda do gerador está começando a estabilizar aqui. Poderia ser melhor. Eles meio que ficam um pouco nervosos aqui. Nós podemos ver que nós já meio que um talvez atingiu um mínimo local lá e meio que ficou um pouco instável lá. E está tentando voltar para algo melhor. E mais uma vez, você sabe, a coisa com GANs é que eles são muito instáveis. Então é realmente preciso apenas o conjunto certo de hiperparâmetros para que isso funcione direito em um golpe de sorte. Sorte, francamente, porque há alguns componentes aleatórios para o treinamento acontecendo aqui. Mas, eventualmente, parece estar voltando para onde deveria estar aqui. Acho que está saindo disso e começando a voltar para onde quer estar. Nós temos uma espécie de forma crescente estranha acontecendo para o discriminador agora que obviamente não está correto. As formas circulares são notoriamente difíceis de aprender. E essas amostras geradas estão realmente caindo em uma linha. Eles não são realmente um círculo que foi realmente melhor cedo, mais cedo. Espere, espere, acho que estamos voltando para um estado melhor aqui. Tudo bem, agora estamos começando a convergir para algo que parece um pouco melhor. Sim, você pode ver isso começando a estabilizar. E podemos ver na grama aqui que a função de perda do gerador está diminuindo. A função de perda de discriminadores está começando a estabilizar. São todos bons sinais. Mas de novo, você sabe, não é incrível. Podemos ver o colector geral do gerador aqui. Não é realmente essa forma de círculo, mas pelo menos está se aproximando. Isso está caindo do limite aqui com essa distribuição. E isso não pode realmente sair disso neste caso. Então estamos presos aqui. Parece que se começássemos de novo, provavelmente conseguiríamos resultados diferentes. Então vamos tentar de novo. Agora temos uma ideia melhor do que está acontecendo. Tudo bem, então novamente, nós estamos, o gerador tem um pouco mais de sorte desta vez nós estamos realmente entrando em mais dessa forma de círculo um pouco mais cedo no que parece. E podemos ver que as funções de perda são mais ou menos estáveis aqui. Porque de novo, nós meio que adivinhamos corretamente desde o início, ainda temos algumas dessas amostras falsas lá no meio onde não deveriam estar. Veremos se melhora com o tempo. Isto começou a parecer melhor. Esse gerador é múltiplo, há silício mais circular. Discriminador ainda está focando naquele quadrante superior direito. Mas, no geral, os resultados não são tão ruins. E agora estamos começando a ficar bem. Então agora o discriminador está realmente recebendo a forma do círculo e aprendendo isso para que qualquer coisa fora desse círculo, ele saiba que é falso. E, ao mesmo tempo, o gerador começa a ficar um pouco confuso novamente. Então, de novo, é instável, certo? Então estamos aprendendo aqui que GANs são difíceis de treinar. Eles podem ficar instáveis, obtendo esses hiperparâmetros e o número de épocas apenas atingindo o tamanho do lote. Basta escrever tudo crítico para um bom desempenho. Enquanto tentamos algo um pouco mais simples, Vamos tentar essa distribuição de dados, que é apenas uma linha reta. Deve ser um caso mais fácil. E podemos ver que o gerador está rapidamente convergindo para aquela linha ali. E devemos ver o discriminador começando a entender isso também. Mas já o gerador está muito perto dos dados reais. Então, sim, isso é muito mais fácil, certo? Então os círculos são sempre difíceis, mas neste caso nós convergimos em algo muito melhor, muito mais rápido. E você pode ver aqui que a divergência do KL realmente encolheu rapidamente lá. A perda discriminadora na perda do gerador ou basicamente estável neste ponto. Então eu acho que isso é quase tão bom quanto vai ficar. Então, se você quiser jogar com isso sozinho, vá para Polo Club dot github dot io slash laboratório GAN, e você pode mexer com isso sozinho. Existem outros modelos por ano que você pode tentar brincar com diferentes cenários diferentes aqui e ver o que acontece. Tudo bem, seguindo em frente. Levando isso para outro nível, vamos olhar para o playground GAN aqui. Vá para Ryan em Kano.com. Não sei como dizer isso. Playground. Na verdade, isso está usando o antigo conjunto de dados m-nest em vez da distribuição de dados mais sintéticos. Então, neste caso, vamos em frente e pegar o trem aqui. Então vamos treinar isso para gerar números, imagens e números. E lembre-se novamente com um GAN, nós não estamos treinando para gerar números específicos, então eu não estou esperando ver um nove aqui associado com o nove ou seis com o seis é apenas gerar números em geral. Então, novamente, há aquele modo colapso estado degenerado onde ele apenas aprende a fazer um número confiável. Mas espero que vejamos algo mais interessante é que o treinamento continua aqui. Então o que estamos vendo aqui visualmente é o quão bem o discriminador está fazendo uma revelação real e falso separado. Então estas são as imagens reais chegando e as imagens geradas também. E como vai o discriminador diferenciar os dois? Então podemos ver agora que estamos recebendo 60% ou mais. A taxa de sucesso na identificação de imagens reais é real. Na verdade, de repente, ficou muito melhor. E estamos identificando que a imagem falsa é falsa mais frequentemente do que não tão bem, mas ainda não é boa. Obviamente, os resultados visuais aqui não são incríveis, mas eles estão melhorando visualmente ao longo do tempo. Então fazer um número é uma tarefa muito mais complicada e apenas fazer um círculo como estávamos tentando fazer com o laboratório GAN antes. Então você esperaria que isso fosse um pouco mais caro computacionalmente. E também podemos visualizar que a função de perda está no discriminador e no gerador aqui também. Nós podemos ver que já, você sabe, está meio que lutando para ficar melhor, mas com tempo suficiente e ele vai, você sabe, se você quiser, deixar isso funcionar por um tempo depois de cerca de 10 polegadas. Então eu acho que os resultados ficam bastante interessantes e já começam a parecer números, meio que parece um cinco. Ainda há espaço para melhorias, certo? Esse tipo de parece um oito. Está chegando lá, mas dê mais tempo. E estes parecerão mais e mais números. E já acho que estão melhorando, certo? Então, Carlos, como um tipo de coisa florescendo lá. Mas com treinamento suficiente, não podemos ver que lentamente, mas certamente que o custo discriminador está diminuindo. Gerador, no entanto, realmente lutando para melhorar. Agora você pode brincar com a topologia diferente da rede aqui se você quiser, e os diferentes hiperparâmetros ver se você pode fazer um trabalho melhor. Mas, sabe, tem que ser alto. Vai ser difícil. Mas se você quiser brincar com isso de forma interativa, essa é uma maneira de fazê-lo. Vamos parar com isso e passar para um exemplo mais divertido. Então esta é uma demo da Nvidia GAN chamada Gauguin. Foram eles intencionalmente soletrado que com GAN no final de Gauguin, após o famoso pintor. E está usando um GAN para gerar imagens falsas de diferentes tipos de paisagens, certo? Então, se eu apertar o botão aqui, ele vai automaticamente pegar este mapa de segmentação aqui que eu desenhei que diz que eu quero água aqui embaixo e céu aqui em cima. E gerará um oceano sintético. E é um céu sintético que combina com os segmentos que eu defini. Então eu tenho que concordar com os termos e condições primeiro. E agora devemos ver uma imagem como essa. Então eles têm um GAN que é treinado sobre como fazer água e o que ele está tentando, como fazer um céu e isso apenas meio que os colocou juntos lá. Mas fica mais interessante. Vamos realmente selecionar paisagem aqui e colocar algumas montanhas no horizonte. Me sinto como Bob Ross aqui. E você pode fazer qualquer tipo de paisagem que você quiser desta maneira. Então agora realmente foi começando em qualquer matemática ou topologias de rede neural aqui. Então é uma espécie de exemplo divertido do que você pode fazer com GANs. E nós temos algumas montanhas lá, uma espécie de fronteira estranha lá entre montanhas e água. Vamos dar um pouco, um pouco terra lá, um pouco de sujeira. E eu vou transformar esse oceano em um lago. Não quero perder muito tempo com isto. Isto não é uma aula de pintura. Mas só para te dar uma ideia do que isto pode fazer. E enquanto estamos nisso, vamos colocar algumas nuvens felizes lá em cima para cerca de uma lá, uma aqui e outra ali. E lá temos a nossa pequena paisagem falsa. Então, um pequeno buraco de água. Eles estão cercados por alguns montes de terra no fundo e algumas nuvens no céu, tudo gerado através GANs que foram treinados em como fazer esses diferentes tipos de características em uma pintura aleatoriamente algorímicamente. Então um exemplo divertido de GANs. Tudo bem, então você viu GANs em ação. Vamos entrar em um caderno real e mergulhar em como eles estão realmente funcionando sob o capô. 23. GAN, a de mão com a moda com: Muito bem, já nos divertimos. Então vamos em frente e implementar uma rede adversária generativa usando um notebook aqui e realmente ver como eles estão correndo sob o capô aqui e como realmente codificar um. Surpreendentemente pequena quantidade de código aqui. E então não há muito para passar realmente lá. Enganadoramente simples, embora sejam muito complexos de treinar. Agora, novamente, estas são coisas muito computacionalmente intensas para treinar. Então, se você não tem uma GPU, você provavelmente não quer fazer isso sozinho. Vamos verificar se temos um com este primeiro bloco de código. E isso vai desligar e carregar TensorFlow, o que vamos levar um pouco. Mas podemos ver que eu tenho uma GPU disponível para treinamento. Se você é diz 0 e você tem uma GPU NVIDIA, novamente cabeça sobre este link e ele vai falar com você sobre como instalar tensorflow GPU sob Anaconda, basta pip instalar TensorFlow traço GPU. Mas primeiro, você provavelmente terá que instalar algumas dependências como a biblioteca CNN CU, que requer ir para os sites de desenvolvedores da NVIDIA se inscrever para uma conta lá e todas essas coisas, mas vale a pena para acelerar este treinamento. Certo, como antes com a amostra do VAE, vamos carregar o conjunto de dados da moda m-nest. E vamos criar um GAN que pode gerar artigos de roupa aleatórios. Então vamos em frente e carregar isso a partir do pacote de conjuntos de dados keras dot. E como antes, vamos fundir os conjuntos de dados de treinamento e teste apenas para obter mais dados de treinamento. Novamente, nosso objetivo aqui não é classificar dados, é gerar dados falsos. Portanto, não há realmente nenhum uso para o conjunto de dados de teste aqui. Nós só vamos passar tudo juntos. E enquanto estamos nisso irá normalizar os dados da imagem de valores de caracteres de 0 a 255 para valores de ponto flutuante entre 01, porque é isso que as funções sigmóides esperam. E vamos remodelar os dados, adicionando essa dimensão extra que precisamos para as camadas CNN, pois as camadas convolucionais também irá embaralhar e agrupar-lo enquanto estamos nisso. Em um tamanho de lote de 64 acima, há nosso primeiro hiper-parâmetro que podemos querer ajustar. Não há muita coisa acontecendo lá. Tudo bem, então vamos começar configurando nosso modelo de gerador. Novamente, esta é a coisa que está tentando gerar imagens falsas apenas dado uma entrada aleatória. Então ele faz imagens aleatórias de, bem, artigos de roupas em nosso exemplo aqui. Certo, vamos ver o que está acontecendo aqui. Importamos o que precisamos do TensorFlow e do Keras, outro hiper-parâmetro aqui. Quantas dimensões de ruído temos? Quantas entradas temos para esta coisa? Então vamos começar com 150 valores de ruído aleatório aqui. E usaremos isso como nossa entrada. E novamente, você pode mudar isso e ver o impacto que ele tem. Mais tarde. Vamos configurar um modelo sequencial e Keras começando com esse vetor de ruído lá se um 150 valores de ruído. E podemos brincar com que tipo de distribuição esse ruído também é. Vamos alimentar isso numa densa camada de sete por sete por 256. E faremos uma convolução de transposição em três camadas, trabalhando até uma imagem final quando terminarmos para reconstruir isso. Então, de novo, isso é muito parecido com o decodificador de um VAE, certo? Praticamente a mesma coisa. Então você pode ver como essas coisas estão intimamente relacionadas. Pronuncie um resumo do modelo apenas para ter certeza que ele parece certo antes de seguirmos em frente. Sim, parece sã para mim. Em seguida, faremos nosso modelo discriminador. E novamente, isso se parece muito com o codificador do VAE, certo? Então o que estamos tomando aqui como entrada é uma imagem de 28 por 28 por 1, 28 por 28 pixels, um canal de escala de cinza colorida alimenta isso em uma camada 2D convolucional de 256 elementos que a 128. E vamos achatar isso até uma camada densa de apenas 64 neurônios. E nós vamos aplicar um rosto de abandono para evitar o excesso de ajuste. E finalmente saída um número final de sim ou não. Essa coisa acha que é real ou falsa? Então essa é a principal diferença dos VAEs. Nós não estamos realmente tentando gerar um vetor de características latentes aqui onde eu acabei de gerar uma saída de que eu acho que esta é uma imagem real ou eu acho que esta é uma imagem falsa, mas de outra forma muito semelhante ao codificador de um VAE. Vamos em frente e acertar que o modelo parece correto para mim. Uma das coisas que esqueci de apontar, estamos usando a função de ativação RelU aqui no discriminador e a função de ativação relU vazando no gerador. E isso é apenas algo que as pessoas aprenderam ao longo do tempo que funciona bem. Apenas a melhor prática padrão lá. Tudo bem, vamos configurar nossos otimizadores e funções de perda aqui. Então, mais hiperparâmetros. Então, novamente, temos um otimizador para o gerador e discriminador. Estamos chamando esse otimizador G e otimizador D. Ambos vão estar usando o otimizador Adam, mas com diferentes taxas de aprendizagem. E estes são críticos para acertar se você quiser ter um modelo estável enquanto você está treinando, se você errar, ele só vai explodir como vimos durante aquela demonstração anterior de tentar aprender que uma forma de anel, se você se lembrar de volta no playground GAN, nosso classificador para a função de perda é bastante simples embora. Só estamos tentando descobrir se as coisas são reais ou falsas. Então, entropia cruzada binária se encaixa na conta para isso. Da mesma forma, para precisão, queremos ver o quão precisos estamos em adivinhar sim ou não. Isto é uma imagem real? Precisão binária e binária. É totalmente razoável para isso também. Shift Enter. Temos tudo preparado. Tudo bem, vamos amarrar tudo. Então vamos começar definindo nosso treinamento para o discriminador. Certo, então o lote chegando onde eu gostaria ler a forma dos dados para descobrir qual é a dimensionalidade disso, qual é o tamanho do lote. E então vamos criar um vetor de ruído aleatório que corresponde ao tamanho do lote para o vetor de ruído aqui. E estamos usando ponto normal aleatório aqui para uma distribuição normal não necessariamente tem que ser uma distribuição normal. Você poderia tentar uma distribuição de uniforme aqui se você quisesse também e ver o que isso faz se você tiver tempo para brincar com ele. E o que faremos a seguir é concatenar os rótulos reais e falsos. Então, como vamos ver, vamos realmente colar os dados reais e falsos juntos enquanto os alimentamos no discriminador. E então nós vamos ter todos os dados reais com um rótulo de um, seguido por todos os dados falsos com um rótulo de 0. À medida que entramos e definimos nossos rótulos aqui para os dados que estamos alimentando. Isso é o que está acontecendo lá. Nós montamos nossa fita de gradiente para treinamento aqui. Nós primeiro geramos nossos dados falsos chamando o gerador com esse vetor de ruído para obter um conjunto de imagens falsas. Em seguida, concatenamos isso com os dados reais juntos. Então temos os dados reais seguidos pelos dados falsos. E novamente, isso alinha com esses rótulos de real e falso que nós configuramos acima aqui sob y sublinhado verdadeiro. Em seguida, alimentamos isso no discriminador para ver o quão bem ele faz em adivinhar se estas são imagens reais ou falsas. E, em seguida, calcular a função de perda que definimos acima para saber se ele acertou ou não. Muito bem, também temos de definir o caminho para o treino aqui. Estamos apenas configurando novamente uma fita gradiente aqui, otimizador D que configuramos antes. Aplicar gradientes. Nada realmente interessante aqui é tipo de código boilerplate aqui, mas nós passamos nessa função de perda discriminadora que definimos anteriormente. Tudo bem, nós relatamos a precisão aqui atrás e mantemos o controle disso impresso ao longo do tempo. E isso é tudo o que há para o modelo discriminador. Vamos Shift Enter para configurar isso. E agora vamos voltar a nossa atenção para o gerador. Então o trabalho do gerador é não ser pego pelo discriminador, certo? Então vamos dizer, queremos testar o quão bem você está em adivinhar que era real. Então, à medida que entramos em nosso discriminador, estamos medindo nosso sucesso de que, se ele adivinhou ou não que era uma imagem real, mesmo que fosse falsa. Então é isso que está no centro deste treinamento para o gerador que está acontecendo aqui. Novamente, extraímos o tamanho do lote da forma dos dados de entrada. Nós configuramos um vetor de ruído que corresponde ao tamanho do lote. E nós apenas montamos um vetor de uns porque estamos medindo o quão bem estamos fazendo isso sendo classificados como reais. Isso é o que se representa. Então nós montamos nossa fita de gradiente aqui, e isso é meio que o coração de tudo aqui. Pegamos o ruído que geramos, passamos para o gerador para criar um monte de imagens falsas para qualquer tamanho do lote. Pegamos essas imagens falsas e depois as passamos para o discriminador. E nós voltamos disso. Se o discriminador pensou que essas diferentes imagens eram reais ou falsas. Nós então calculamos nossa perda com base em quão bem nós fizemos em fazer o discriminador pensar que são imagens falsas eram realmente reais. Certo, então é isso que está acontecendo aqui. Você sabe, não, não muito código na verdade. O resto é uma espécie de caldeirão. Novamente, estamos juntando nossa retropropagação e acompanhando a perda e a precisão ao longo do tempo. Então Shift Enter para configurar isso. Tudo bem, um pouco útil função dandy aqui para visualizar as imagens geradas enquanto estamos indo. Então tudo isso vai fazer é tomar como uma entrada um modelo. Ele vai escolher 81 números aleatórios aqui e passar isso para o que quer que seja aquele modelo, algum tipo de gerador e visualizar o que ele saiu com em uma grade de nove por nove. Então, apenas uma pequena função auxiliar para visualizar 81 imagens aleatórias dadas algum modelo. E agora vamos realmente fazer o treinamento. Então nós não vamos apenas usar um método de ajuste de uma linha aqui para fazer isso. A razão é que o artigo GAN original, na verdade, executaria vários conjuntos de treinamento discriminadores para cada etapa do gerador. Mas no nosso caso aqui, vamos manter isso simples e apenas fazer uma etapa de treinamento discriminador seguido de uma etapa de treinamento do gerador. Mas se você quisesse, você poderia realmente duplicar este treinamento discriminador várias vezes para combinar mais com o jornal original fez. Então, ele lhe dá alguma flexibilidade e coisas para experimentar. Novamente, basicamente tudo o que vamos fazer é passar por 30 épocas. Vamos treinar o discriminador, acompanhar a perda geral de precisão. Treine o gerador novamente, acompanhe nossa perda geral de precisão e imprima o desempenho à medida que avançamos. Também para todas as outras épocas, vamos chamar essa função auxiliar de imagens de plotagem novamente para visualizar imagens de amostra aleatória AT uns do nosso modelo gerador. Então, em cada segunda época, vamos pegar nosso atual modelo de gerador de trem e todos os pesos que ele aprendeu até agora. E apenas visualize o quão bom ele está fazendo em gerar imagens falsas de perto. Então vamos em frente e configurar isso. E é aqui que começa o treino. Isso vai levar um tempo, pessoal, mas vamos pelo menos ver se começa com sucesso. E com a GPU, esta vai ser uma operação incrivelmente intensiva. Tudo bem, aqui vamos nós. Então aqui estamos na época 0, meio que recebendo bolhas aleatórias aqui neste ponto como seria de esperar. Mas vamos esperar pelo menos pela próxima visualização aqui na época de. Novamente, o que está acontecendo aqui é que nosso gerador está aprendendo a enganar o discriminador. E o discriminador está tentando aprender a detectar discriminar imagens reais de falsas ao mesmo tempo. É contraditório porque estas duas coisas são intenções umas com as outras. E conseguir o equilíbrio certo é a chave para criar um gerador que possa criar falsificações convincentes. Tudo bem, época para finalmente voltou e bem, ainda não é realmente reconhecível, mas você pode ver que estamos recebendo formas um pouco mais complexas fora dele já. Vamos seguir em frente e deixar isso funcionar por 30 épocas e ver o que acabamos com. Vai demorar um pouco. Vou pausar o vídeo aqui e voltar quando terminar enquanto minha GPU aquece meu quarto. Tudo bem. Cerca de meia hora se passou aqui na minha GPU tem trabalhado horas extras aqui. Está realmente quente no escritório agora. Então, o outro tipo de segredo sujo da aprendizagem profunda é quanta energia ele consome, definitivamente algo para estar ciente e conhecer. Vamos ver o que aconteceu. Então, como você pode ver, uma época 0 apenas recebendo algumas bolhas aleatórias que puck para não muito melhor. E por época em frente começar a fazer algumas coisas mais complicadas aqui. E começando a se formar em algo reconhecível pela época oito, eles estão começando a se parecer com camisas e calças, eu acho. E quando chegarmos ao 10, definitivamente estão começando a se tornar reconhecível. Ao longo do tempo. Só fica melhor, melhor e melhor. Então, mesmo que nós o paramos em 30 épocas, porque eu simplesmente não quero destruir o planeta correndo mais longe. Você pode ver a tendência aqui de que ele está de fato ficando melhor e melhor ao longo do tempo. E quando chegamos a 30, bem, nós realmente paramos de imprimi-lo fora de 28 aqui apenas para um capricho do código. Mas mesmo na 29ª época opcode, que é realmente 30 porque começamos a contar em 0. E o discriminador ainda era apenas 80% eficaz em discriminar real do falso. Então ainda havia espaço para melhorias aqui. Poderíamos deixar este trem ainda mais tempo para obter resultados ainda melhores se quiséssemos muito intensivo para treinar essas coisas. E mais uma vez, eles são muito sensíveis. Portanto, dado que você tem que realmente executar essas coisas repetidamente para ajustar todos esses hiperparâmetros, você pode ver como treinar um GAN pode ser uma proposta muito demorada e consumindo energia. Mas estes são resultados razoáveis. Você sabe, estes definitivamente pareciam vestidos e camisas. Bem, na maioria são vestidos. Seguro, não é que falaremos sobre isso em um momento? Vamos pegar o último modelo de trem. E novamente, apenas para cuspir nove por nove imagens aleatórias aqui para ver quais são os nossos resultados finais. E meio que aponta para baixo nos comentários aqui que é tipo de notável quão rápido ele pode gerar essas imagens uma vez que você tem o modelo treinado. Então, há realmente uma demonstração no site da NVIDIA onde eles criaram um GAN que recria um jogo de Pac-Man. Baseado em analisar o vídeo das pessoas a reproduzi-lo uma e outra e outra vez. Então nós podemos realmente representar qualquer coisa que você quiser sem qualquer conhecimento real do que está acontecendo necessariamente. De qualquer forma, você pode ver aqui, estes parecem vestidos e suéteres razoáveis, eu acho, mas é isso. Então estamos vendo esse problema de colapso de modo que falamos antes onde estamos realmente apenas medindo sua capacidade de gerar fotos de roupas. E não estamos medindo sua capacidade de gerar tipos específicos de roupas. Só se esse gerador pode ou não gerar uma imagem que possa enganar o discriminador a pensar que é real. Então ele meio que encontrou uma maneira de trapacear aqui porque, você sabe, diferentes tipos de escolha vão ser mais complicados do que gerar uma imagem de um par de calças ou uma camisa. E dado o tempo limitado de treinamento que tínhamos, era para isso que convergia. Então esse é o problema de colapso de modo que discutimos anteriormente nos slides. Mas resultados globalmente bastante satisfatórios dado apenas 30 epochs em um conjunto de dados de treinamento bastante simples lá. Obviamente você pode dizer que há muito mais para explorar aqui. Há até agora uma grande lacuna entre esses resultados e todos aqueles aplicativos de troca de rosto que você vê em, no seu telefone, certo? Então, obviamente, essas GANs muito maiores lá fora que treinam por um período muito mais longo de tempo que são capazes de gerar essas falsificações convincentes de imagens reais de rostos humanos, que é realmente a coisa mais difícil de acertar. Mas está lá fora e esta é apenas a ponta do iceberg. No que diz respeito à pesquisa GAN, é realmente a vanguarda da pesquisa de aprendizagem profunda nos dias de hoje. Se você subir, procurar zoológicos modelo GAN, você verá que há uma enorme variedade de modelos diferentes lá fora que você pode trabalhar fora e construir para problemas muito específicos. E pessoas incorporando GANs em sistemas maiores. Por exemplo, há algo lá fora que irá gerar automaticamente uma cabeça falante. Dada uma foto de alguém que pode olhar ao redor, seus olhos, pode se mover. Ele pode fingir falar com você e tudo por meio da mistura da extração de recursos do rosto de alguém com GANs que podem criar manchas desse rosto que fazem coisas diferentes. Então muita inovação emocionante acontecendo neste espaço agora, novamente, vou lembrá-los do ponto de vista ético, por favor, use esta tecnologia para o bem e por favor esteja ciente da energia que ela requer para o treinamento. Então isso são GANs e introdução pelo menos o suficiente para você ir embora e aprender mais e ser um pouco perigoso com isso. 24. Introdução de o projeto de aprendizagem em profundo: Então é hora de aplicar o que você aprendeu até agora neste curso de aprendizagem profunda. Seu projeto final é pegar alguns dados do mundo real. Nós conversamos sobre isso na palestra de ética, na verdade de massas detectadas e mamografias, e apenas com base nas medidas daqueles em massa ver se você pode prever se eles são benignos ou malignos. Então temos um conjunto de dados de massas de mamografia que foram detectadas em pessoas reais, e tivemos riel. Os médicos olham para eles e determinam se são ou não de natureza benigna e maligna Então vamos ver se você pode configurar uma rede neural própria que pode classificar com sucesso . se essas massas são benignas ou malignas na natureza. Vamos mergulhar. Então eu lhe dei alguns dados e um modelo para trabalhar. Pelo menos os dados com os quais trabalharemos estão nos materiais do seu curso. As mamografias sublinhando massas datadas de ponto Um arquivo de texto é os dados brutos que você estará usando para treinar seu modelo, e você pode ver que são apenas, ah, seis colunas de coisas ou essas coisas representam. Mostraremos em um minuto. Na verdade, há uma descrição do estado é definido no arquivo de texto de ponto nomes aqui que vai junto com esse conjunto de dados. Mas para começar, eu dei-lhe um pouco de um modelo para trabalhar com se você abrir o projeto de aprendizagem profunda em I p Y N arquivo b. Então isso veio do repositório U.C I, e eu dei a vocês um pouco de um link para onde os dados originais vieram. Na verdade, é um ótimo recurso para encontrar outros dados para jogar. Então, se você ainda está aprendendo aprendizado de máquina, esse é um ótimo lugar para encontrar coisas para mexer com um experimento. Mas para este exemplo, é quando vamos estar a brincar. Aqui está a descrição dessas seis colunas. Um deles é chamado de comprador como avaliação, e isso é basicamente uma medida de quão confiante o diagnóstico era dessa massa particular . Agora, isso é meio que dar a resposta. Não é o que chamamos de atributos preditivos, então não vamos usar isso para treinamento ou modelo. Em seguida, temos a idade do paciente. Temos uma classificação da forma da massa. Temos uma classificação da margem de massa, mas como? Parece a densidade da massa. E finalmente temos a coisa que estamos tentando prever. Então este é o rótulo, a gravidade, seja benigno, zero ou maligno. Então nós temos o que está aqui, um problema de classificação binária muito semelhante ao que fizemos anteriormente no curso , e você não deve precisar de muito mais do que usar trechos de código de exercícios anteriores neste curso e adaptando-os a este conjunto de dados. Ok, agora, uma pequena ressalva aqui. Normalmente, quando você está fazendo aprendizado de máquina, você não quer lidar com o que chamamos de dados nominais, e tanto a forma como a margem são dados tecnicamente nominais. Enquanto os convertemos em números, esses números não são necessariamente significativos em termos de seu grande asiático. Você sabe, ir de 1 para 4 não significa que estamos cada vez mais indo de um para dois round irregular de uma forma linear. Mas às vezes você tem que se contentar com o que você tem. É melhor do que nada, e pelo menos há alguma lógica para a progressão das pontuações numéricas aqui para essas descrições. Então eles geralmente vão de, você sabe, mawr túmulo regular ou irregular como esses números aumentaram. Então vamos em frente e usá-los de qualquer maneira. De qualquer forma, isto é importante. Sabe, há muita angústia desnecessária e cirurgia que vem de falsos positivos no onde mamografias. Então, se você pode construir uma maneira melhor de, ah, diagnosticar essas coisas, melhor. Mas, novamente, pense na minha palestra de ética. Você não quer vender isso demais. Você quer ter certeza que isso é apenas uma ferramenta que pode ser usada para um médico realmente humano menos que você esteja muito confiante de que o sistema pode realmente superar um humano. E, por definição, não pode porque estamos treinando isso em dados que foram criados por humanos. Então, como poderia ser melhor do que um humano? Pensa nisso. Tudo bem, então seu trabalho é construir um perceptron multicamada para classificar essas coisas, eu consegui obter mais de 80% de precisão com o meu. Vamos ver como você pode fazer agora. Muito do trabalho vai ser apenas para limpar os dados, e eu vou orientá-lo através das coisas que você precisa fazer aqui. Então, comece importando o arquivo de dados usando a função ler See SV. Você pode então dar uma olhada nisso, converter os dados ausentes em não números e certifique-se de importar todos os nomes das colunas . Talvez você precise limpar os dados, então tente ter uma idéia da natureza dos dados usando a descrição em seu quadro de dados pandas resultante . Em seguida, você vai precisar soltar Rose. Ele tem dados faltando eo que você tem cuidado de que você precisa para converter os quadros de dados em torta entorpecida. Levante que você pode, em seguida, passar para a psique aprender ou em carícia. Ok, então você também precisa normalizar os dados antes de analisá-los com carícia. Então, uma pequena dica que há para usar padrões de ponto pré-processamento scaler fora de SK aprendido que pode tornar as coisas muito fáceis para você. Essa é a única coisa que nunca fizemos antes. O resto disso, você deve ser capaz de descobrir apenas com base em exemplos anteriores. Uma vez que você tem os dados no formato adequado, tem sido bastante simples para construir um modelo M LTP usando carícia e você pode experimentar com diferentes desculpas mantidos, diferentes hiper parâmetros e ver o quão bem você pode fazer isso eu sou Vou soltar-te aqui e dar uma oportunidade a isto. Vamos ver como se sai quando voltar na próxima palestra. Vou mostrar-lhe a minha solução e como eu próprio passo por isto. Então vá em frente e pratique o que aprendeu. 25. Solução de projeto de aprendizagem em profundo: Então eu espero que você tenha alguma boa experiência lá e realmente aplicando o que você aprendeu para criar uma rede neural que pode classificar massas encontradas em mamografias. É benigno ou maligno. Como eu disse, eu tenho cerca de 80% de precisão. saber como você se saiu? Comecei lendo cegamente o arquivo CSP usando o PD Dot Reid CSP e dando uma olhada nele. E eu vi naquele momento que os nomes das colunas estavam errados. Faltavam informações de nome de coluna no arquivo de dados, e havia valores ausentes lá. Eles foram indicados pela pergunta Mark, então tem que ler isso de forma um pouco mais inteligente. Então, na minha segunda tentativa aqui, eu chamei read, see SV passando e explicitamente o conhecimento de que pontos de interrogação significam valores ausentes ou quaisquer valores e passando uma matriz de nomes de coluna como fizemos antes e fez outra cabeça no quadro de dados Panis resultante. E as coisas parecem muito melhores agora. Nesse ponto, temos que limpar os dados agora que estão em um formato apropriado e organizados corretamente, poderíamos fazer uma descrição sobre isso para dar uma olhada nas coisas e ter idéia de que estamos perdendo alguns dados e as coisas parecem estar razoavelmente bem distribuído. Pelo menos neste momento, fizemos uma pequena contagem aqui para ver o que exatamente está faltando. Então minha estratégia aqui era ver se há algum tipo de viés que eu vou introduzir removendo os valores que faltam. E se eu visse que os dados faltantes parecem ser distribuídos aleatoriamente apenas olhando para eles, pelo menos isso é provavelmente uma boa indicação de que é seguro apenas ir em frente e soltar as rosas desaparecidas. Então, dado que eu determinei que isso é uma coisa boa para fazer, eu fui em frente e chamei Drop em um quadro de dados e descrevi isso, e agora eu posso ver que eu tenho o mesmo número de contagens de rosa em cada coluna individual . Então agora eu tenho um conjunto de dados completo onde eu jogue fora linhas que estão faltando dados, e eu me convenci de que é uma coisa boa para fazer estatisticamente. Certo, então agora precisamos extrair os recursos e valores que queremos alimentar em nosso modelo, nossa rede neural. Então eu extraí a data do recurso da idade, forma, margem e densidade desse quadro de dados e extraí isso em um despejo. Lembro-me de todas as características. Eu também extraí a coluna de gravidade e converti isso, também, em todas as classes array que eu posso passar como meus dados de rótulo. E eu também criei um conjunto prático de nomes de colunas desde que eu preciso disso mais tarde. Então, só para visualizar, eu coloquei em todos os recursos apenas para dar uma olhada em como isso se parece. E, certeza, parece legítimo parece matriz de quatro recursos. Um Pete em cada fileira parece razoável. Naquele ponto. Preciso reduzir meus dados. Então, para fazer isso, tudo o que eu preciso fazer é importar a função scaler de padrões de ponto pré-processamento lá e aplicar isso aos meus dados de recursos. E se eu olhar para todas as características escala que saiu dessa transformação, eu poderia ver que tudo parece ser normalmente distribuído agora centrado em torno de zero quando, com um desvio padrão de um, que é o que nós quer, lembre-se, quando você está colocando entradas em uma rede neural, é importante que seus dados sejam normalizados antes de inseri-los. Agora chegamos à carne real da coisa, realmente montando nosso modelo MLP, e eu vou embrulhar isso de tal forma que eu possa usar psicose. Ele aprende pontuação Val cruzada para avaliar o seu desempenho. Então, no meu exemplo aqui eu criei pouca função chamada criar modelo que cria um modelo sequencial, acrescenta em uma camada densa com seis unidades ou seis neurônios usando a função de ativação rela Oh. Eu adicionei em outra camada com uma que faz minhas classificações sigmóides finais, minha classificação binária em cima disso, e eu compilei isso com o Adam Optimizer e a função binária de entropia cruzada perdida . Então, com isso, nós montamos uma única camada de seis neurônios que se alimenta em uma camada final de classificação binária . Muito simples, e eu então fui em frente e usei o classificador de carícia para construir uma versão compatível psíquica aprender desta rede neural, e eu passei isso em cruz Val pontuação dedo realmente fazer K dobra validação cruzada neste com 10 dobras e imprimir os resultados. Então, com apenas esses seis neurônios, consegui atingir uma precisão de 80% e prever corretamente se uma massa era benigna ou maligna, apenas com base nas medidas dessa massa. Agora, no mundo real, Doutor, é usado muito mais informação do que apenas essas medidas. Então você sabe onde nosso algoritmo está em desvantagem comparado com os médicos humanos , para começar. Mas isso não é tão ruim se você fez melhor se você usou mais camadas mais neurônios hera, curioso para ver se você realmente tem um resultado melhor. Acontece que às vezes você não precisa de muito para realmente obter o resultado ideal dos dados que você tem. Mas se você foi capaz de melhorar substancialmente esse resultado, parabéns. Espero que a aprendizagem profunda tenha sido desmistificada para você. E a seguir vamos falar sobre como continuar aprendendo mawr no campo da aprendizagem profunda.