Olá Habr! Apresento a você a tradução do artigo "Tutorial do TensorFlow: 10 minutos Lição prática do TensorFlow para aprendizes rápidos", de Ankit Sachan.
Este tutorial do TensorFlow é para quem tem um conhecimento básico de aprendizado de máquina e está tentando começar o TensorFlow.
Primeiro de tudo, você deve ter o TensorFlow instalado. Você pode instalá-lo neste guia. Esta lição está dividida em duas partes: na primeira parte, explicamos o básico com um exemplo de trabalho, na segunda parte, construímos um modelo de regressão linear.
Parte 1. Noções básicas do TensorFlow
TensorFlow é uma biblioteca numérica na qual os dados passam por um gráfico. Os dados no TensorFlow são representados por matrizes n-dimensionais - tensores. O gráfico é composto de dados (tensores) e operações matemáticas.
Nos nós do gráfico são operações matemáticas.
As arestas do gráfico representam tensores que "fluem" entre as operações.
Há outro aspecto em que o TensorFlow é muito diferente de qualquer outra linguagem de programação. No TensorFlow, você primeiro precisa criar um projeto do que deseja criar. Inicialmente, ao criar um gráfico, as variáveis não têm significado. Posteriormente, quando você criou um gráfico completo, você o executa em uma sessão e somente então as variáveis assumem quaisquer valores.
Vamos começar a aprender fazendo. Execute python e importe o TensorFlow:
~$ python Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> >>>import tensorflow as tf
Um gráfico é usado para definir operações e todas as operações são executadas em uma sessão. Gráficos e sessões são criados independentemente um do outro. Trate o gráfico como um projeto de construção e a sessão como um canteiro de obras.
1.1 Gráficos no TensorFlow
Um gráfico é a base do TensorFlow, todos os cálculos (operações) e variáveis estão no gráfico. Tudo o que acontece no código está no gráfico padrão fornecido pelo TensorFlow. Você pode acessar este gráfico da seguinte maneira:
graph = tf.get_default_graph()
E assim você pode obter uma lista de todas as operações nesta coluna:
graph.get_operations()
Seu gráfico agora está vazio. Se você precisar imprimir o nome de cada operação, execute o seguinte código:
for op in graph.get_operations(): print(op.name)
A saída ficará novamente em branco. No futuro, após adicionar operações ao gráfico, usaremos esse código para exibir seus nomes.
1.2 Sessões no TensorFlow
O gráfico define apenas os cálculos (cria o projeto), mas não possui nenhuma variável, nenhum valor, a menos que executemos o gráfico ou parte do gráfico na sessão.
Você pode criar uma sessão como esta:
sess=tf.Session() ... your code ... ... your code ... sess.close()
Não se esqueça de que, para iniciar uma sessão, é necessário encerrá-la ou usar o bloco with ... como , por exemplo:
with tf.Session() as sess: sess.run(f)
A vantagem de usar essa abordagem é que a sessão será fechada automaticamente no final do bloco with
1.3 Tensores em TensorFlow
O TensorFlow armazena dados em tensores - matrizes multidimensionais muito semelhantes às matrizes numPy.
a) Constantes são valores que não podem ser alterados. Eles são definidos da seguinte maneira:
a=tf.constant(1.0)
no entanto, ao tentar produzir, você obtém o seguinte:
print(a) <tf.Tensor'Const:0' shape=() dtype=float32> print(a) Tensor("Const:0", shape=(), dtype=float32)
Como você pode ver, isso é diferente de outras linguagens de programação, como python. Você não pode imprimir ou acessar a constante até iniciar a sessão. Vamos fazer o seguinte:
with tf.Session() as sess: print(sess.run(a))
Este código produzirá 1.0
b) Variáveis também são tensores que são como variáveis em outras linguagens de programação:
>>>b = tf.Variable(2.0,name="test_var") >>>b <tensorflow.python.ops.variables.Variable object at 0x7f37ebda1990>
Diferentemente das constantes, as variáveis podem alterar seu conteúdo. No entanto, as variáveis no TensorFlow devem ser inicializadas em uma operação de inicialização separada. Pode demorar bastante para inicializar todas as variáveis, mas o TensorFlow fornece um mecanismo para inicializar todas as variáveis de uma vez:
init_op = tf.global_variables_initializer()
Agora você precisa iniciar a operação de inicialização antes de tentar acessar a variável:
with tf.Session() as sess: sess.run(init_op) print(sess.run(b))
Este código produzirá 2.0
Se você agora tentar imprimir operações no gráfico
graph = tf.get_default_graph() for op in graph.get_operations(): print(op.name)
você obterá a seguinte saída:
Const test_var/initial_value test_var test_var/Assign test_var/read init
Como você pode ver, declaramos "a" como Const e foi adicionado ao gráfico. Da mesma forma, para a variável b, muitos estados test_var foram adicionados ao gráfico TensorFlow, como test_var / inicial_value, test_var / read, etc. Você pode visualizar toda a rede usando o TensorBoard, que é uma ferramenta para visualizar o gráfico TensorFlow e o processo de aprendizado .
c) Os espaços reservados são tensores esperando para serem inicializados com dados. Eles são usados para dados que serão fornecidos somente quando o código for realmente executado na sessão. O que é transferido para o espaço reservado é um dicionário que contém os nomes dos espaços reservados e seus significados:
a = tf.placeholder("float") b = tf.placeholder("float") y = tf.multiply(a, b) fd = {a: 2, b: 3} with tf.Session() as sess: print(sess.run(y, fd))
Este código produzirá 6.0
1.4 Dispositivos no TensorFlow
O TensorFlow possui recursos internos muito poderosos para executar seu código em GPU, CPU ou clusters. Dá a você a oportunidade de escolher o dispositivo no qual deseja executar seu código. No entanto, isso não é algo para se pensar quando você está apenas começando com o TF.
Então, aqui está uma imagem completa de como os cálculos no TensorFlow funcionam:

Parte 2. Tutorial do TensorFlow com um exemplo simples
Nesta parte, veremos o código para executar a regressão linear. Antes disso, vejamos algumas das funções básicas do TensorFlow que usaremos no código.
Criando uma distribuição normal aleatória:
Use random_normal para criar valores aleatórios a partir da distribuição normal. Neste exemplo, w é uma variável da dimensão 784 * 10 com valores aleatórios com um desvio padrão de 0,01.
w=tf.Variable(tf.random_normal([784, 10], stddev=0.01))
Reduce_mean - Calcula o valor médio de uma matriz
b = tf.Variable([10,20,30,40,50,60],name='t') with tf.Session() as sess: sess.run(tf.initialize_all_variables()) sess.run(tf.reduce_mean(b))
Este código produzirá 35
argmax - muito semelhante ao argmax em Python. Obtém o valor máximo do tensor ao longo do eixo especificado.
a=[ [0.1, 0.2, 0.3 ], [20, 2, 3 ] ] b = tf.Variable(a,name='b') with tf.Session() as sess: sess.run(tf.initialize_all_variables()) sess.run(tf.argmax(b,1))
Imprima uma matriz ([2, 0]) que mostre o índice do valor máximo em cada uma das linhas a.
Problema de regressão linear
Declaração do problema: há um grande número de pontos de dados, tentando combinar uma linha reta com eles. Neste exemplo, criaremos 100 pontos de dados e tentaremos combinar a linha com eles.
2.1 Crie um conjunto de dados de treinamento
trainX contém valores entre -1 e 1 e trainY contém 3 vezes o valor de trainX mais alguma variável aleatória:
import tensorflow as tf import numpy as np trainX = np.linspace(-1, 1, 101) trainY = 3 * trainX + np.random.randn(*trainX.shape) * 0.33
2.2 Espaços reservados
X = tf.placeholder("float") Y = tf.placeholder("float")
2.3 Modelagem
O modelo de regressão linear tem a forma
- devemos calcular o valor de w. Vamos inicializar w para zero e criar um modelo para resolver esse problema. Definimos a função de custo como
(Modelo Y-y__) ^ 2
O TensorFlow vem com muitos otimizadores que calculam e atualizam gradientes após cada iteração, tentando minimizar a função de custo especificada. Vamos definir uma operação de aprendizado usando o GradientDescentOptimizer para minimizar nossa função de custo a uma velocidade de aprendizado de 0,01. Em seguida, executamos essa operação de aprendizado em um loop.
w = tf.Variable(0.0, name="weights") y_model = tf.multiply(X, w) cost = (tf.pow(Y-y_model, 2)) train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
2.4 Treinamento
Até este ponto, definimos apenas um gráfico. Nenhum cálculo ocorreu, nenhuma das variáveis do TensorFlow é importante. Para executar este gráfico, precisamos criar uma sessão e executá-la. Antes disso, precisamos criar uma operação de inicialização para todas as variáveis:
init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) for i in range(100): for (x, y) in zip(trainX, trainY): sess.run(train_op, feed_dict={X: x, Y: y}) print(sess.run(w))
Observe que a primeira coisa que foi feita foi inicializar as variáveis chamando init dentro de session.run () . Mais tarde, rodamos train_op , alimentando seu feed_dict . Finalmente, imprimimos o valor de w (novamente dentro de sess.run ()), que deve ser em torno de 3.
Exercício:
Se você criar uma nova sessão após esse código e tentar imprimir w, o que será produzido?
with tf.Session() as sess: sess.run(init) print(sess.run(w))
Sim, você entendeu corretamente, 0,0 será exibido. Assim que saímos da sessão criada anteriormente, todas as operações deixam de existir.
Espero que este tutorial lhe dê um começo rápido com o TensorFlow. Por favor, sinta-se livre para fazer suas perguntas nos comentários. O código completo pode ser baixado aqui .