Conheça o mundo do aprendizado de máquina

1. Antes de começar

Neste codelab, você aprenderá o básico "Hello, World" para ML, em que, em vez de programar regras explícitas em uma linguagem, como Java ou C++, você criará um sistema treinado em dados para inferir as regras que determinam a relação entre números.

Considere o seguinte problema: você está criando um sistema que realiza reconhecimento de atividade para monitoramento de condicionamento físico. Você pode ter acesso à velocidade em que uma pessoa está caminhando e tentar inferir a atividade dela com base nessa velocidade usando uma condicional.

cc3628d9a1547597.png

if(speed<4){
  status=WALKING;
}

Você pode estender para execução com outra condição.

f2cc3929221107b8.png

if(speed<4){
    status=WALKING;
} else {
    status=RUNNING;
}

Em uma condição final, também seria possível detectar ciclismo.

aeb282cf03d5cff.png

if(speed<4){
    status=WALKING;
} else if(speed<12){
    status=RUNNING;
} else {
    status=BIKING;
}

Agora, considere o que acontece quando você quer incluir uma atividade, como golfe. É menos óbvio como criar uma regra para determinar a atividade.

fc772abb6fee2804.png

// Now what?

É extremamente difícil criar um programa que reconheça a atividade de golfe. Então, o que fazer? Use o ML para resolver o problema.

Pré-requisitos

Antes de testar este codelab, você precisará ter:

  • Conhecimento completo de Python
  • Habilidades básicas de programação

O que você aprenderá

  • Noções básicas de machine learning

O que você vai criar

  • Seu primeiro modelo de machine learning

O que é necessário

Se você nunca criou um modelo de ML usando o TensorFlow, use o Colaboratory, um ambiente baseado em navegador que contém todas as dependências necessárias. O código do restante do codelab está sendo executado no Colab.

Se estiver usando um ambiente de desenvolvimento integrado diferente, verifique se o Python está instalado. Você também precisará do TensorFlow e da biblioteca NumPy. Saiba mais sobre o TensorFlow e instale-o aqui. Instale o NumPy aqui.

2. O que é machine learning?

Considere a maneira tradicional de criar apps, conforme representado no diagrama a seguir:

c72f871306134e45.png

As regras são expressas em uma linguagem de programação. Eles funcionam com dados e seu programa fornece respostas**.** No caso da detecção de atividade, as regras (o código que você definiu para definir os tipos de atividade) agiram com base nos dados (a velocidade de movimento da pessoa) para produzir uma resposta: o valor de retorno da função para determinar o status da atividade do usuário (se estava caminhando, correndo, pedalando ou fazendo outra coisa).

O processo para detectar o status da atividade pelo ML é muito parecido. Apenas os eixos são diferentes.

9b85a337ee816e1b.png

Em vez de tentar definir as regras e expressá-las em uma linguagem de programação, você fornece as respostas (normalmente chamadas de rótulos) com os dados, e a máquina infere as regras que determinam a relação entre as respostas e os dados. Por exemplo, a detecção de atividade pode ser semelhante a um contexto de ML:

6ff58697a85931f4.png

Você coleta muitos dados e rotula-os para dizer efetivamente: "quot;É assim que se caminha", ou "quot;É assim que a corrida é". Em seguida, o computador poderá inferir as regras que determinam, com base nos dados, quais são os padrões distintos que denotam uma atividade específica.

Além de ser um método alternativo de programação nesse cenário, essa abordagem também permite abrir novas situações, como a de golfe, que pode não ter sido possível usando a abordagem tradicional de programação com base em regras.

Na programação tradicional, seu código é compilado em um binário que normalmente é chamado de programa. Em ML, o item que você cria a partir dos dados e rótulos é chamado de modelo.

Então, se você voltar a este diagrama:

53ff9e2cb511936e.png

Considere o resultado disso como um modelo, usado no momento da execução, assim:

693430bb4d7fa001.png.

Você passa alguns dados para o modelo e ele usa as regras que ele inferiu no treinamento para fazer uma previsão, como: "quot;parentes dados a pé", "quot;;esses dados parecem ciclismo."

3. Criar seu primeiro modelo de ML

Considere os seguintes conjuntos de números. Você vê a relação entre eles?

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

Ao analisá-los, você poderá notar que o valor de X aumentará 1 à medida que for lido da esquerda para a direita, e o valor correspondente de Y aumentará 3. Você provavelmente acha que Y é igual a 3X mais ou menos algo. Então, você provavelmente analisa 0 em X e vê que Y é 1 e cria a relação Y=3X+1.

É quase exatamente como você usaria código para treinar um modelo para detectar os padrões nos dados.

Agora, olhe para o código.

Como você treinaria uma rede neural para realizar a tarefa equivalente? Usando dados! Alimentando-o com um conjunto de X's e um conjunto de Y&39;s, ele conseguirá descobrir a relação entre eles.

Importações

Comece com suas importações. Aqui, você importa o TensorFlow e o chama tf para facilitar o uso.

Em seguida, importe uma biblioteca chamada numpy, que representa os dados como listas com facilidade e rapidez.

O framework para definir uma rede neural como um conjunto de camadas sequenciais é chamado de keras. Portanto, importe-o também.

import tensorflow as tf
import numpy as np
from tensorflow import keras

Defina e compile a rede neural

Em seguida, crie a rede neural mais simples possível. Ela tem uma camada, que tem um neurônio, e a forma de entrada dela tem apenas um valor.

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

Em seguida, escreva o código para compilar a rede neural. Ao fazer isso, você precisa especificar duas funções: uma loss e uma optimizer.

Neste exemplo, você sabe que a relação entre os números é Y=3X+1.

Quando o computador está tentando aprender isso, ele faz uma suposição, talvez Y=10X+10. A função loss mede as respostas adivinhadas em relação às respostas corretas e avalia o desempenho da qualidade.

Em seguida, o modelo usa a função optimizer para fazer outra suposição. Com base na função de perda, ele tenta minimizar a perda. Neste ponto, talvez você veja algo como Y=5X+5. Embora isso ainda seja muito ruim, ele está mais perto do resultado correto (a perda é menor).

O modelo repete isso pelo número de épocas, que você verá em breve.

Primeiro, veja como instruí-lo a usar mean_squared_error para a perda e descendente estocástico (sgd) para o otimizador. Você ainda não precisa entender a matemática, mas dá para ver que elas funcionam.

Com o tempo, você aprenderá as diferentes funções de perda e otimização e, em cada caso, diferentes.

model.compile(optimizer='sgd', loss='mean_squared_error')

Fornecer os dados

A seguir, alimente alguns dados. Neste caso, você usa as seis variáveis X e Y anteriores. Observe que a relação entre eles é que Y=3X+1, portanto, em que X é -1, Y é -2.

Uma biblioteca Python chamada NumPy fornece muitas estruturas de dados de tipo de matriz para fazer isso. Especifique os valores como uma matriz em NumPy com np.array[].

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

Agora você tem todo o código necessário para definir a rede neural. A próxima etapa é treiná-lo para ver se ele consegue inferir os padrões entre esses números e usá-los para criar um modelo.

4. Treinar a rede neural

O processo de treinamento da rede neural, em que aprende a relação entre X's e Y's, está na chamada model.fit. É a etapa em que ele passará pelo loop antes de tentar adivinhar, medir o desempenho do jogo (da perda) ou usar o otimizador para fazer outra estimativa. Isso acontecerá pelo número de períodos que você especificar. Ao executar esse código, a perda será exibida em cada época.

model.fit(xs, ys, epochs=500)

Por exemplo, você pode ver que, nas primeiras épocas, o valor da perda é muito grande, mas diminui a cada etapa.

f110d5abed07c1b9.png

Conforme o treinamento avança, a perda fica muito pequena em breve.

81ca5e71298b414b.png

No final do treinamento, a perda é extremamente pequena, o que mostra que nosso modelo está fazendo um ótimo trabalho para inferir a relação entre os números.

12b187014b639fd.png.

Você provavelmente não precisa de todas as eras 500 e pode testar valores diferentes. Como você pode ver no exemplo, a perda é muito pequena após apenas 50 períodos, então isso pode ser suficiente.

5. Use o modelo

Você tem um modelo treinado para aprender a relação entre X e Y. Você pode usar o método model.predict para descobrir o Y de um X desconhecido anteriormente. Por exemplo, se X for 10, qual você acha que Y será? Tente adivinhar antes de executar este código:

print(model.predict([10.0]))

Talvez você tenha pensado em 31, mas acabou acabando um pouco. Por que é assim, na sua opinião?

As redes neurais lidam com as probabilidades. Por isso, ele calcula que há uma probabilidade muito alta de que a relação entre X e Y seja Y=3X+1, mas não é possível determinar com apenas seis pontos de dados. O resultado é muito próximo de 31, mas não necessariamente de 31.

Ao trabalhar com redes neurais, esse padrão será recorrente. Você quase sempre enfrenta as probabilidades, não as certezas, e precisa programar um pouco para descobrir qual é o resultado com base nas probabilidades, principalmente quando se trata de classificação.

6. Parabéns

Acredite ou não, você cobriu a maioria dos conceitos de ML que usará em cenários muito mais complexos. Você aprendeu a treinar uma rede neural para identificar a relação entre dois conjuntos de números ao defini-la. Você definiu um conjunto de camadas (neste caso, apenas uma) que continha neurônios (também neste caso, apenas um) e que foi compilado com uma função de perda e um otimizador.

O conjunto de uma rede, uma função de perda e um otimizador lida com o processo de suposição da relação entre os números, mede o desempenho deles e gera novos parâmetros para novas suposições. Saiba mais em TensorFlow.org.

Saiba mais

Para saber como o ML e o TensorFlow podem ajudar com seus modelos de visão computacional, prossiga para o artigo Criar um modelo de visão computacional com o TensorFlow.