O TensorFlow tem duas maneiras de avaliar parte do gráfico: Session.run
em uma lista de variáveis e Tensor.eval
. Existe alguma diferença entre esses dois?
python
tensorflow
Geoffrey Irving
fonte
fonte
tf.Tensor.eval()
etf.Session.run()
, mas conectados sãotf.Operation.run()
etf.Tensor.eval()
como se explica no aquiRespostas:
Se você tiver um
Tensor
t, chamart.eval()
é equivalente a chamartf.get_default_session().run(t)
.Você pode tornar uma sessão o padrão da seguinte maneira:
A diferença mais importante é que você pode usar
sess.run()
para buscar os valores de muitos tensores na mesma etapa:Observe que cada chamada para
eval
erun
executará o gráfico inteiro do zero. Para armazenar em cache o resultado de uma computação, atribua-o a atf.Variable
.fonte
a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a, b)
e eu só tenho reclamações de tensorflow que as formas não correspondem, eu acho, mais precisamente, que a classificação deve ser de pelo menos 2tf.multiply(t, u)
e funcionou bem.A sessão de perguntas frequentes sobre o fluxo tensor tem uma resposta exatamente à mesma pergunta . Vou seguir em frente e deixar aqui:
If
t
é umTensor
objeto,t.eval()
é uma abreviação desess.run(t)
(ondesess
é a sessão padrão atual. Os dois trechos de código a seguir são equivalentes:No segundo exemplo, a sessão atua como um gerenciador de contexto, que tem o efeito de instalá-la como a sessão padrão para a vida útil do
with
bloco. A abordagem do gerenciador de contexto pode levar a um código mais conciso para casos de uso simples (como testes de unidade); se o seu código lida com vários gráficos e sessões, pode ser mais simples chamadas explícitas paraSession.run()
.Eu recomendo que você pelo menos percorra toda a FAQ, pois isso pode esclarecer muitas coisas.
fonte
eval()
não pode lidar com o objeto de listamas
Session.run()
podecorrija-me se eu estiver errada
fonte
A coisa mais importante a lembrar:
Saber disso tudo é fácil :
Eu também descreveria o método
tf.Operation.run()
como aqui :fonte
No tensorflow, você cria gráficos e passa valores para esse gráfico. O Graph faz todo o trabalho duro e gera a saída com base na configuração que você fez no gráfico. Agora, quando você passa valores para o gráfico, primeiro você precisa criar uma sessão de fluxo tensor.
Depois que a sessão é inicializada, você deve usá-la porque todas as variáveis e configurações agora fazem parte da sessão. Portanto, existem duas maneiras de passar valores externos para o gráfico, para que o gráfico os aceite. Uma é chamar o .run () enquanto você estiver usando a sessão que está sendo executada.
Outra maneira que é basicamente um atalho para isso é usar .eval (). Eu disse atalho porque a forma completa de .eval () é
Você pode verificar isso sozinho. No local da
values.eval()
corridatf.get_default_session().run(values)
. Você deve ter o mesmo comportamento.o que eval está fazendo é usar a sessão padrão e depois executar run ().
fonte
Resposta compatível com Tensorflow 2.x : Convertendo o código de mrry
Tensorflow 2.x (>= 2.0)
para o benefício da comunidade.fonte