A maneira [A] mais fácil de avaliar o valor real de um Tensor
objeto é transmiti-lo ao Session.run()
método ou ligar Tensor.eval()
quando você tiver uma sessão padrão (por exemplo, em um with tf.Session():
bloco ou veja abaixo). Em geral [B] , você não pode imprimir o valor de um tensor sem executar algum código em uma sessão.
Se você está experimentando o modelo de programação e deseja uma maneira fácil de avaliar os tensores, tf.InteractiveSession
permite abrir uma sessão no início do programa e usá-la para todas as chamadas Tensor.eval()
(e Operation.run()
). Isso pode ser mais fácil em um ambiente interativo, como o shell ou um notebook IPython, quando é entediante passar um Session
objeto por toda parte. Por exemplo, o seguinte funciona em um notebook Jupyter:
with tf.Session() as sess: print(product.eval())
Isso pode parecer bobagem para uma expressão tão pequena, mas uma das idéias principais do Tensorflow 1.x é a execução adiada : é muito barato criar uma expressão grande e complexa e, quando você deseja avaliá-la, o back-end (para com o qual você se conecta a Session
) pode agendar sua execução com mais eficiência (por exemplo, executando partes independentes em paralelo e usando GPUs).
[A]: Para imprimir o valor de um tensor sem retorná-lo ao seu programa Python, você pode usar o tf.print()
operador, como Andrzej sugere em outra resposta . De acordo com a documentação oficial:
Para garantir que o operador seja executado, os usuários precisam passar o tf.compat.v1.Session
método de operação produzido para a operação, ou usar a operação como uma dependência de controle para operações executadas, especificando com tf.compat.v1.control_dependencies([print_op]
), que é impresso na saída padrão.
Observe também que:
Nos notebooks e colabs Jupyter, tf.print
imprime nas saídas da célula do notebook. Ele não será gravado nos logs do console do notebook.
[B]: Você poderá usar a tf.get_static_value()
função para obter o valor constante do tensor fornecido, se o seu valor for eficientemente calculável.
tf.Session()
não funciona no Tensorflow 2. Você pode usartf.compat.v1.Session()
.Enquanto outras respostas estão corretas, você não pode imprimir o valor até avaliar o gráfico, mas elas não falam sobre uma maneira fácil de realmente imprimir um valor dentro do gráfico, depois que você o avaliar.
A maneira mais fácil de ver o valor de um tensor sempre que o gráfico é avaliado (usando
run
oueval
) é usar aPrint
operação como neste exemplo:Agora, sempre que avaliarmos o gráfico inteiro, por exemplo
b.eval()
, usando , obtemos:fonte
a.eval()
então!tf.Print()
foi preterido e (agora) removido. Em vez disso, usetf.print()
. Consulte docs: tensorflow.org/api_docs/python/tf/Print e tensorflow.org/api_docs/python/tf/print .Reiterando o que os outros disseram, não é possível verificar os valores sem executar o gráfico.
Um trecho simples para quem procura um exemplo fácil para imprimir valores é o seguinte. O código pode ser executado sem nenhuma modificação no notebook ipython
Resultado:
fonte
WARNING:tensorflow:From <ipython-input-25-8583e1c5b3d6>:1: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02. Instructions for updating: Use 'tf.global_variables_initializer' instead.
Não, você não pode ver o conteúdo do tensor sem executar o gráfico (fazer
session.run()
). As únicas coisas que você pode ver são:transpose_1:0
,random_uniform:0
)float32
)Não encontrei isso na documentação, mas acredito que os valores das variáveis (e algumas das constantes não são calculadas no momento da atribuição).
Veja este exemplo:
O primeiro exemplo em que eu apenas inicio um tensor constante de números aleatórios é executado aproximadamente ao mesmo tempo, independentemente de dim (
0:00:00.003261
)No segundo caso, onde a constante é realmente avaliada e os valores atribuídos, o tempo depende claramente de dim (
0:00:01.244642
)E você pode deixar isso mais claro ao calcular algo (
d = tf.matrix_determinant(m1)
tendo em mente que o tempo se esgotaráO(dim^2.8)
)PS eu encontrei onde é explicado na documentação :
fonte
Eu acho que você precisa acertar alguns fundamentos. Com os exemplos acima, você criou tensores (matriz multidimensional). Mas, para que o fluxo tensor funcione, é necessário iniciar uma " sessão " e executar sua " operação " na sessão. Observe a palavra "sessão" e "operação". Você precisa saber quatro coisas para trabalhar com o tensorflow:
Agora, pelo que você escreveu, você forneceu o tensor e a operação, mas não possui sessão em execução nem gráfico. O tensor (bordas do gráfico) flui pelos gráficos e é manipulado por operações (nós do gráfico). Há um gráfico padrão, mas você pode iniciar o seu em uma sessão.
Quando você diz imprimir, você acessa apenas o formato da variável ou constante que você definiu.
Então você pode ver o que está perdendo:
Espero que ajude!
fonte
No
Tensorflow 1.x
Com o Tensorflow 2.x, o modo ansioso é ativado por padrão. portanto, o código a seguir funciona com o TF2.0.
fonte
Com base nas respostas acima, com seu snippet de código específico, você pode imprimir o produto assim:
fonte
No Tensorflow 2.0+ (ou no ambiente do modo Ansioso), você pode chamar o
.numpy()
método:fonte
tf.print(product)
também me dá a mesma saída queprint(product.numpy())
com o TF 2.0.tf.keras.backend.eval
é útil para avaliar pequenas expressões.TF 1.xe TF 2.0 compatíveis.
Exemplo mínimo verificável
Isso é útil porque você não precisa criar explicitamente um
Session
ouInteractiveSession
.fonte
Você pode verificar a saída de um TensorObject sem executar o gráfico em uma sessão, permitindo uma execução rápida .
Basta adicionar as duas linhas de código a seguir:
import tensorflow.contrib.eager as tfe tfe.enable_eager_execution()
logo depois de você
import tensorflow
.A saída de
print product
no seu exemplo agora será:tf.Tensor([[ 12.]], shape=(1, 1), dtype=float32)
Observe que, a partir de agora (novembro de 2017), você precisará instalar uma compilação noturna do Tensorflow para permitir uma execução rápida. Rodas pré-fabricadas podem ser encontradas aqui .
fonte
Observe que
tf.Print()
isso mudará o nome do tensor. Se o tensor que você deseja imprimir for um espaço reservado, a alimentação dos dados falhará, pois o nome original não será encontrado durante a alimentação. Por exemplo:A saída é:
fonte
Você deve pensar nos programas do TensorFlow Core como consistindo em duas seções distintas:
Portanto, para o código abaixo, você apenas Constrói o gráfico computacional.
Você também precisa Para inicializar todas as variáveis em um programa TensorFlow, você deve chamar explicitamente uma operação especial da seguinte maneira:
Agora você constrói o gráfico e inicializa todas as variáveis. O próximo passo é avaliar os nós; você deve executar o gráfico computacional em uma sessão. Uma sessão encapsula o controle e o estado do tempo de execução do TensorFlow.
O código a seguir cria um objeto Session e chama seu método run para executar o suficiente do gráfico computacional para avaliar
product
:fonte
Você pode usar o Keras, a resposta em uma linha será usar o
eval
método da seguinte forma:fonte
Experimente este código simples! (é auto-explicativo)
fonte
Não achei fácil entender o que é necessário, mesmo depois de ler todas as respostas até executar isso. O TensofFlow também é novo para mim.
Mas você ainda pode precisar do valor retornado executando a sessão.
fonte
Basicamente, no tensorflow, quando você cria um tensor de qualquer tipo, ele é criado e armazenado dentro do qual só pode ser acessado quando você executa uma sessão de tensorflow. Digamos que você tenha criado um tensor constante
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Sem executar uma sessão, você pode obter
-
op
: Uma Operação. Operação que calcula este tensor.-
value_index
: Um int. Índice do terminal da operação que produz esse tensor.-
dtype
: um DType. Tipo de elementos armazenados neste tensor.Para obter os valores, você pode executar uma sessão com o tensor necessário, como:
A saída será algo como isto:
fonte
Habilite a execução rápida que é introduzida no tensorflow após a versão 1.10. É muito fácil de usar.
fonte
Usando as dicas fornecidas em https://www.tensorflow.org/api_docs/python/tf/print , uso a
log_d
função para imprimir seqüências de caracteres formatadas.fonte
fonte
Agora, o tf.Print está obsoleto. Veja como usar o tf.print (letra minúscula p).
Embora a execução de uma sessão seja uma boa opção, nem sempre é o caminho a percorrer. Por exemplo, você pode imprimir algum tensor em uma sessão específica.
O novo método de impressão retorna uma operação de impressão que não possui tensores de saída:
Como não possui saídas, não é possível inseri-lo em um gráfico da mesma maneira que faria com tf.Print. Em vez disso, você pode adicioná-lo para controlar as dependências da sua sessão para imprimi-la.
Às vezes, em um gráfico maior, talvez criado parcialmente em subfunções, é complicado propagar o print_op para a chamada da sessão. Em seguida, tf.tuple pode ser usado para associar a operação de impressão a outra operação, que será executada com essa operação, independentemente da sessão que executar o código. Aqui está como isso é feito:
fonte
Pergunta: Como imprimir o valor de um objeto Tensor no TensorFlow?
Responda:
fonte