Ir para o conteúdo principal

TensorFlow™ no Databricks

Illustration

Placeholders

Até agora, usamos Variáveis para gerenciar nossos dados, mas há uma estrutura mais básica, o placeholder. O placeholder é apenas uma variável à qual atribuiremos dados posteriormente. Ele permite criar operações e construir o gráfico de computação sem ter nenhum dado. Na terminologia do TensorFlow, alimentamos dados no gráfico usando esses placeholders.

 

 

Este exemplo funciona de maneira um pouco diferente dos anteriores. Vamos examiná-lo em detalhes.

Primeiro, importamos o tensorflow normalmente. Em seguida, criamos um placeholder chamado x, ou seja, um lugar na memória onde armazenaremos um valor mais tarde.

Depois, criamos um tensor chamado correspondente à multiplicação de x por 2. Observe que ainda não definimos um valor inicial para x.

Agora, temos uma operação (y) definida e podemos executá-la em uma sessão. Criamos um objeto de sessão e, em seguida, executamos apenas a variável y. Observe que, se definirmos um gráfico de operações muito maior, só poderemos executar um pequeno segmento do gráfico. Esta avaliação de subgráfico é uma das grandes vantagens do TensorFlow, e que não se encontra em muitas outras bibliotecas do mesmo tipo.

Para executar y, é preciso conhecer os valores de x. Definimos isso no argumento feed_dict da execução. Declaramos que os valores de x são [1, 2, 3]. Executamos y, que dá o resultado de [2, 4, 6].

Os placeholders não precisam ser dimensionados estaticamente. Vamos atualizar nosso programa para permitir que x assuma qualquer tamanho. Altere a definição de x para:

 

 

Agora, ao definirmos os valores de x no feed_dict, podemos ter qualquer número de valores. O código ainda deve funcionar e fornecer a mesma resposta, mas agora ele também funcionará com qualquer número de valores em feed_dict.

Os placeholders também podem ter múltiplas dimensões, o que permite armazenar matrizes. No exemplo a seguir, criamos uma matriz 3 por 2 e armazenamos alguns números nela. Em seguida, usamos a mesma operação de antes para duplicar os números por elemento.

 

 

A primeira dimensão do placeholder é None, o que significa que podemos ter qualquer número de linhas. A segunda dimensão é definida como 3, o que significa que cada linha precisa ter três colunas de dados.

Podemos estender isso para aceitar um número arbitrário de dimensões None . Neste exemplo, carregamos a imagem da nossa última lição e, em seguida, criamos um placeholder que armazena uma fatia dessa imagem. Essa fatia é um segmento 2D da imagem, mas cada "pixel" tem três componentes (vermelho, verde, azul). Portanto, precisamos de None para as duas primeiras dimensões, mas precisamos de 3 (embora None também funcione) para a última dimensão. Em seguida, usamos o método slice do TensorFlow para extrair um subsegmento da imagem e operar sobre ele.

 

 

  1. Você pode encontrar outras funções para matrizes no TensorFlow na documentação oficial.
  2. Separe a imagem em quatro "cantos" e, em seguida, junte-as.
  3. Converta a imagem em escala de cinza. Para fazer isso, você pode exibir apenas um dos três canais de cores. Você também pode calcular a média dos três canais e torná-la cinza.