Ir para o conteúdo principal

TensorFlow™ no Databricks

Illustration

Variáveis

O TensorFlow é uma maneira de representar a computação sem realmente executá-la até que seja solicitada. Nesse sentido, é uma forma de computação preguiçosa, e permite grandes melhorias na execução do código:
  • Computação mais rápida de variáveis complexas
  • Computação distribuída em vários sistemas, incluindo GPUs.
  • Redundância reduzida em alguns cálculos

Vejamos como isso funciona na prática. Primeiro, um script python muito básico:

 

x = 35
y = x + 5
print(y)

 

Este script basicamente diz "crie uma variável x com o valor 35, defina o valor de uma nova variável y a essa valor mais 5, que é atualmente 40, e imprima-a". O valor 40 será impresso ao executar este programa. Se você não estiver familiarizado com o python, crie um novo arquivo de texto chamado basic_script.py e copie esse código. Salve-o em seu computador e execute-o com:

python basic_script.py

Observe que o caminho (ou seja, basic_script.py) deve fazer referência ao arquivo, portanto, se ele estiver na pasta Code, você usará:

python Code/basic_script.py

Além disso, confirme se o ambiente virtual Anaconda está ativado. No Linux, isso fará com que seu prompt fique mais ou menos assim:

(tensorenv)username@computername:~$

Se estiver funcionando, vamos converter para um equivalente do TensorFlow.

 

import tensorflow as tf

x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')

print(y)

 

Depois de executar isso, você terá um resultado bem esquisito, algo como <tensorflow.python.ops.variables.Variable object at 0x7f074bfd9ef0>. Claramente, não é o valor 40.

A razão é que nosso programa realmente faz algo bem diferente do anterior. O código aqui faz o seguinte:

  1. Importe o módulo do tensorflow e chame-o de tf
  2. Crie um valor constante chamado x e atribua a ele o valor numérico 35
  3. Crie uma variável chamada y e defina-a como a equação x + 5
  4. Imprima o objeto de equação para y

A diferença sutil é que y não recebe “o valor atual de x + 5” como em nosso programa anterior. Em vez disso, é efetivamente uma equação que significa “quando essa variável é calculada, pegue o valor de x (como está então) e adicione 5 a ele”. O cálculo do valor de y nunca é realizado de fato no programa acima.

Vamos corrigir isso:

 

import tensorflow as tf

x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')

model = tf.global_variables_initializer()

with tf.Session() as session:
    session.run(model)
    print(session.run(y))

 

Removemos a declaração print(y) e, em vez dela, temos um código que cria uma sessão e, na verdade, calcula o valor de y. Isso é como um boilerplate, mas funciona assim:

  1. Importe o módulo do tensorflow e chame-o de tf
  2. Crie um valor constante chamado x e atribua a ele o valor numérico 35
  3. Crie uma variável chamada y e defina-a como a equação x + 5
  4. Inicialize as variáveis com tf.global_variables_initializer() (entraremos em mais detalhes sobre isso)
  5. Crie uma sessão para calcular os valores
  6. Execute o modelo criado em 4
  7. Execute apenas a variável y e imprima seu valor atual

A etapa 4 acima é onde a mágica acontece. Nessa etapa, é criado um gráfico das dependências entre as variáveis. Nesse caso, a variável y depende da variável x, e esse valor é transformado pela adição de 5. Lembre-se de que esse valor não é calculado até a etapa 7, pois, até então, somente as equações e relações são calculadas.

1) As constantes também podem ser matrizes. Preveja o que esse código fará e execute-o para confirmar:

 

import tensorflow as tf


x = tf.constant([35, 40, 45], name='x')
y = tf.Variable(x + 5, name='y')


model = tf.global_variables_initializer()

with tf.Session() as session:
    session.run(model)
    print(session.run(y))

 

2) Gere uma matriz NumPy de 10.000 números aleatórios (chamada x) e crie uma variável para armazenar a equação

y = 5x2 − 3x+15

Você pode gerar a matriz NumPy usando este código:

 

import numpy as np
data = np.random.randint(1000, size=10000)

 

Essa variável de dados pode ser usada no lugar da lista da pergunta 1 acima. Como regra geral, NumPy deve ser usado para listas/matrizes de números maiores, pois é significativamente mais eficiente na memória e mais rápido de calcular do que as listas. Ele também fornece um número significativo de funções (como calcular a média) que geralmente não estão disponíveis para listas.

3) Você também pode atualizar variáveis em loops, que usaremos mais tarde para machine learning. Confira este código e preveja o que ele fará (em seguida, execute-o para verificar):

 

import tensorflow as tf


x = tf.Variable(0, name='x')

model = tf.global_variables_initializer()

with tf.Session() as session:
    session.run(model)
    for i in range(5):
        x = x + 1
        print(session.run(x))
        

 

4) Usando o código de (2) e (3) acima, crie um programa que calcule a média "móvel" da seguinte linha de código: np.random.randint(1000). Em outras palavras, continue fazendo um loop e, em cada loop, chame np.random.randint (1000) uma vez nesse loop e armazene a média atual em uma variável que continua atualizando cada loop.

5) Use o TensorBoard para ver o gráfico de alguns desses exemplos. Para executar o TensorBoard, use o comando: tensorboard --logdir=path/to/log-directory

 

import tensorflow as tf

x = tf.constant(35, name='x')
print(x)
y = tf.Variable(x + 5, name='y')

with tf.Session() as session:
    merged = tf.summary.merge_all()
    writer = tf.summary.FileWriter("/tmp/basic", session.graph)
    model =  tf.global_variables_initializer()
    session.run(model)
    print(session.run(y))

 

Para saber mais sobre o Tensorboard, acesse nossa aula de visualização.