TensorFlow, grafiğin bir bölümünü değerlendirmenin iki yolunu sunar: Session.run
değişkenlerin bir listesi ve Tensor.eval
. Bu ikisi arasında bir fark var mı?TensorFlow'da, Session.run() ve Tensor.eval() arasındaki fark nedir?
cevap
Tensor
t ürününüz varsa, t.eval()
numaralı telefonu arayarak tf.get_default_session().run(t)
numaralı telefonu arayın.
:
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
:
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, aynı adımda birçok tensörlerinin değerlerini almak için sess.run()
kullanabilirsiniz olmasıdır eval
ve run
numaralı her aramanın tüm grafiği sıfırdan yürüteceğini unutmayın. Bir hesaplama sonucunu önbelleğe almak için onu tf.Variable
'a atayın.
Tensör akışı hakkındaki SSS oturumu answer to exactly the same question'a sahiptir. t.eval()
sess
geçerli varsayılan oturumu olan sess.run(t)
(demenin kısa yoludur,
t
bir Tensor
nesne ise iki kod aşağıdaki parçacıkları eşdeğerdir: Sadece devam edin ve burada bırakmak istiyorum.
sess = tf.Session()
c = tf.constant(5.0)
print sess.run(c)
c = tf.constant(5.0)
with tf.Session():
print c.eval()
, blok ömrü için varsayılan oturum olarak yükleme etkisine sahiptir. bağlam yönetici olarak aktif davranır bağlam yöneticisi yaklaşım basit kullanım durumları için daha kısa kod yol açabilir (ünite testleri gibi); Çoklu grafikler ve oturumlar,
Session.run()
'a yapılan açık çağrılar için daha basit olabilir.
Çoğu SSS'yi açıklığa kavuşturacağından, tüm SSS boyunca en azından gözden geçirmenizi tavsiye ederim.
eval() işleyemez hatam varsa
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()
print("grad",sess.run(grad))
düzeltebilir liste nesnesi
bir beslemek için bir türlü mümkün mü tutucudur? ([sorum] (http://stackoverflow.com/questions/33810990/how-to-feed-a-placeholder)) – displayname
İkinci örnekte farklı olan nedir? Ayrı işlemleri (ya da grafikleri? Ne fark ettiğinden emin değil) değerlendirmek için mi? – Pinocchio
bekleyin, örneğiniz gerçekten çalışıyor mu? Denedim: 'a = tf.constant (2.0) b = tf.constant (3.0) ab = tf.matmul (a, b)' ve sadece şekiller, sanırım eşleşmediğini tensorflow gelen şikayetleri var daha doğrusu, rütbenin en az 2 olması gerekir. – Pinocchio