TensorFlow öğesinin grafiğin bir bölümünü değerlendirmenin iki yolu vardır: Session.run
değişkenler listesinde ve Tensor.eval
. Bu ikisi arasında bir fark var mı?
TensorFlow öğesinin grafiğin bir bölümünü değerlendirmenin iki yolu vardır: Session.run
değişkenler listesinde ve Tensor.eval
. Bu ikisi arasında bir fark var mı?
Yanıtlar:
Eğer bir varsa Tensor
t, arama t.eval()
çağırmak aynıdır tf.get_default_session().run(t)
.
Bir oturumu aşağıdaki gibi varsayılan yapabilirsiniz:
t = tf.constant(42.0)
sess = tf.Session()
with sess.as_default(): # or `with sess:` to close on exit
assert sess is tf.get_default_session()
assert t.eval() == sess.run(t)
En önemli fark, sess.run()
aynı adımda birçok tensörün değerlerini almak için kullanabilmenizdir :
t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.mul(t, u)
ut = tf.mul(u, t)
with sess.as_default():
tu.eval() # runs one step
ut.eval() # runs one step
sess.run([tu, ut]) # evaluates both tensors in a single step
Her çağrı unutmayın eval
ve run
sıfırdan tüm grafik çalıştırır. Bir hesaplamanın sonucunu önbelleğe almak için, a tf.Variable
.
a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a, b)
ve tensorflow'dan, şekillerin eşleşmediği, daha kesin olarak, rütbenin en az 2 olması gerektiği konusunda şikayetler aldım.
tf.multiply(t, u)
ve iyi çalıştı.
Tensör akışıyla ilgili SSS oturumunda tam olarak aynı soruya bir cevap var . Sadece devam edip burada bırakacağım:
Eğer t
bir olan Tensor
nesne, t.eval()
için kısaltmadır sess.run(t)
nerede ( sess
geçerli varsayılan seansı iki kod aşağıdaki parçacıkları eşdeğerdir.:
sess = tf.Session()
c = tf.constant(5.0)
print sess.run(c)
c = tf.constant(5.0)
with tf.Session():
print c.eval()
İkinci örnekte, oturum, with
bloğun ömrü boyunca varsayılan oturum olarak yüklenme etkisi olan bir bağlam yöneticisi olarak görev yapar . Bağlam yöneticisi yaklaşımı, basit kullanım durumları (birim testleri gibi) için daha özlü koda yol açabilir; kodunuz birden fazla grafik ve oturumla ilgiliyse, açık çağrılar yapmak daha kolay olabilir Session.run()
.
Bir sürü şeyi açıklığa kavuşturabileceği için en azından SSS'nin tamamında gözden geçirmenizi tavsiye ederim.
eval()
liste nesnesini işleyemiyor
tf.reset_default_graph()
a = tf.Variable(0.2, name="a")
b = tf.Variable(0.3, name="b")
z = tf.constant(0.0, name="z0")
for i in range(100):
z = a * tf.cos(z + i) + z * tf.sin(b - i)
grad = tf.gradients(z, [a, b])
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
print("z:", z.eval())
print("grad", grad.eval())
ama Session.run()
yapabilir
print("grad", sess.run(grad))
Eğer Yanlışsam beni düzelt
Hatırlanması gereken en önemli şey:
TenorFlow'dan sabit, değişken (herhangi bir sonuç) almanın tek yolu oturumdur.
Bunu bilmek her şey kolaydır :
Hem
tf.Session.run()
vetf.Tensor.eval()
oturumdan sonuç almaktf.Tensor.eval()
arama için bir kısayoldurtf.get_default_session().run(t)
Ayrıca buradatf.Operation.run()
olduğu gibi yöntemi özetlemek istiyorum :
Grafik bir oturumda başlatıldıktan sonra, bir İşlem geçirilerek çalıştırılabilir
tf.Session.run()
.op.run()
arama için bir kısayoldurtf.get_default_session().run(op)
.
Tensorflow'da grafikler oluşturur ve değerleri bu grafiğe geçirirsiniz. Grafik tüm çalışmayı yapar ve çıktıyı grafikte yaptığınız yapılandırmaya göre oluşturur. Şimdi grafiğe değerler ilettiğinizde, önce bir tensorflow oturumu oluşturmanız gerekir.
tf.Session()
Oturum başlatıldıktan sonra, tüm değişkenler ve ayarlar artık oturumun bir parçası olduğu için bu oturumu kullanmanız gerekir. Dolayısıyla, dış değerleri grafiğe iletmenin iki yolu vardır, böylece grafik bunları kabul eder. Bunlardan biri, yürütülmekte olan oturumu kullanırken .run () yöntemini çağırmaktır.
Temel olarak bunun bir kısayolu olan başka bir yol .eval () kullanmaktır. Kısayol dedim çünkü tam .eval () biçimi
tf.get_default_session().run(values)
Bunu kendiniz kontrol edebilirsiniz. Yerinde values.eval()
vadede tf.get_default_session().run(values)
. Aynı davranışa sahip olmalısınız.
eval'in yaptığı şey varsayılan oturumu kullanmak ve ardından run () öğesini çalıştırmaktır.
Tensorflow 2.x Uyumlu Cevap : mrry'nin kodunu Tensorflow 2.x (>= 2.0)
topluluk yararına dönüştürmek .
!pip install tensorflow==2.1
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
t = tf.constant(42.0)
sess = tf.compat.v1.Session()
with sess.as_default(): # or `with sess:` to close on exit
assert sess is tf.compat.v1.get_default_session()
assert t.eval() == sess.run(t)
#The most important difference is that you can use sess.run() to fetch the values of many tensors in the same step:
t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.multiply(t, u)
ut = tf.multiply(u, t)
with sess.as_default():
tu.eval() # runs one step
ut.eval() # runs one step
sess.run([tu, ut]) # evaluates both tensors in a single step
tf.Tensor.eval()
vetf.Session.run()
, ama bağlıtf.Operation.run()
ve buradatf.Tensor.eval()
açıklandığı gibi