টেনসরফ্লো-তে, সেশন.আরুন () এবং টেনসর.এভাল () এর মধ্যে পার্থক্য কী?


204

টেনসরফ্লো গ্রাফের অংশটি মূল্যায়নের দুটি উপায় রয়েছে: Session.runভেরিয়েবলের তালিকায় এবং Tensor.eval। এই দুজনের মধ্যে কি পার্থক্য আছে?


পূর্ণ নামস্থান tf.Tensor.eval()এবং tf.Session.run()কিন্তু সংযুক্ত হয় tf.Operation.run()এবং tf.Tensor.eval()ব্যাখ্যা হিসাবে এখানে
prosti থেকে

উত্তর:


243

আপনার যদি Tensorটি থাকে, কল t.eval()করা কল করার সমতুল্য tf.get_default_session().run(t)

আপনি নিম্নলিখিতভাবে একটি সেশনটিকে ডিফল্ট করতে পারেন:

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)

সর্বাধিক গুরুত্বপূর্ণ পার্থক্য হ'ল আপনি sess.run()একই পদক্ষেপে অনেক টেনেসরের মান আনতে ব্যবহার করতে পারেন :

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

মনে রাখবেন যে, প্রতিটি কল evalএবং runস্ক্র্যাচ থেকে পুরো গ্রাফ চালানো হবে। কোনও গণনার ফলাফলকে ক্যাশে করতে এটিতে একটি নিয়োগ করুন tf.Variable


দ্বিতীয় উদাহরণে ভিন্ন কি? আপনি কি পৃথক ক্রিয়াকলাপের জন্য মূল্যায়ন করতে পারবেন (বা গ্রাফগুলি? পার্থক্য কী তা নিশ্চিত নয়)?
পিনোচিও

1
অপেক্ষা করুন, আপনার উদাহরণ আসলে চালিত হয়? আমি চেষ্টা করেছি: a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a, b) এবং আমি মাত্র টেনস্রফ্লো থেকে অভিযোগ পেয়েছি যে আকারগুলি মেলে না, আমি আরও স্পষ্টভাবে অনুমান করি যে র‌্যাঙ্কটি কমপক্ষে 2 হওয়া উচিত
পিনোচিও

@ পিনোচিও আমি মনে করি মূল উত্তরটি 4 বছর আগে পোস্ট হওয়ার সাথে সাথে এপিআই পরিবর্তন হয়েছে। আমি ব্যবহার করেছি tf.multiply(t, u)এবং এটি ভাল কাজ করেছে।
yuqli

42

টেনসর প্রবাহ সম্পর্কিত FAQ সেশনের ঠিক একই প্রশ্নের উত্তর রয়েছে । আমি কেবল এগিয়ে যাব এবং এটি এখানে রাখব:


যদি tকোনও Tensorঅবজেক্ট t.eval()হয় তবে এর জন্য শর্টহ্যান্ড sess.run(t)( sessবর্তমান ডিফল্ট সেশনটি কোথায় । নিম্নোক্ত কোডের দুটি স্নিপেটই সমান:

sess = tf.Session()
c = tf.constant(5.0)
print sess.run(c)

c = tf.constant(5.0)
with tf.Session():
  print c.eval()

দ্বিতীয় উদাহরণে, সেশনটি একটি প্রসঙ্গ পরিচালক হিসাবে কাজ করে, যা withব্লকটির আজীবন এটি ডিফল্ট সেশন হিসাবে ইনস্টল করার প্রভাব ফেলে । প্রসঙ্গ ব্যবস্থাপক পদ্ধতির সহজ ব্যবহারের ক্ষেত্রে আরও ইউনিট কোডের দিকে নিয়ে যেতে পারে (ইউনিট পরীক্ষার মতো); যদি আপনার কোডটি একাধিক গ্রাফ এবং সেশনগুলির সাথে সম্পর্কিত হয় তবে তা স্পষ্ট কলগুলিতে আরও সোজা হতে পারে Session.run()

আমি আপনাকে সুপারিশ করব যে আপনি কমপক্ষে পুরো FAQ জুড়ে স্কিম করুন, কারণ এটি অনেক কিছুই স্পষ্ট করে দিতে পারে a


2

eval() তালিকা অবজেক্টটি পরিচালনা করতে পারবেন না

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())

কিন্তু Session.run()পারে

print("grad", sess.run(grad))

আমি ভুল হলে আমাকে সংশোধন করুন


1

মনে রাখা সবচেয়ে গুরুত্বপূর্ণ বিষয়:

টেনারফ্লো থেকে স্থির, পরিবর্তনশীল (যে কোনও ফলাফল) পাওয়ার একমাত্র উপায় সেশন session

এই সমস্ত কিছু জানা সহজ :

উভয়ই tf.Session.run()এবং tf.Tensor.eval()অধিবেশন থেকে ফলাফল পান যেখানে tf.Tensor.eval()কল করার শর্টকাট রয়েছে istf.get_default_session().run(t)


আমি এখানেtf.Operation.run() যেমন পদ্ধতিটি রূপরেখা করব :

একটি অধিবেশনটিতে গ্রাফটি চালু হওয়ার পরে, কোনও অপারেশন এটি পাস করে কার্যকর করা যেতে পারে tf.Session.run()op.run()কল করার জন্য একটি শর্টকাট tf.get_default_session().run(op)


0

টেনসরফ্লোতে আপনি গ্রাফ তৈরি করেন এবং সেই গ্রাফটিতে মানগুলি প্রেরণ করেন। গ্রাফ সমস্ত কঠোর পরিশ্রম করে এবং গ্রাফটিতে আপনি যে কনফিগারেশন করেছেন তার উপর ভিত্তি করে আউটপুট উত্পন্ন করে। এখন আপনি যখন গ্রাফটিতে মানগুলি পাস করবেন তারপরে প্রথমে আপনাকে একটি সেন্সরফ্লো সেশন তৈরি করতে হবে।

tf.Session()

একবার সেশন শুরু হওয়ার পরে আপনি সেই অধিবেশনটি ব্যবহার করবেন বলে ধারণা করা হচ্ছে কারণ সমস্ত ভেরিয়েবল এবং সেটিংস এখন সেশনের অংশ। সুতরাং, গ্রাফটিতে বাহ্যিক মানগুলি পাস করার জন্য দুটি উপায় রয়েছে যাতে গ্রাফ তাদের গ্রহণ করে। একটি আপনি সেশনটি কার্যকর করার সময় .run () কে কল করতে পারেন।

অন্যান্য উপায় যা মূলত এটির শর্টকাট .eval () ব্যবহার করা। আমি শর্টকাট বলেছিলাম কারণ .eve () এর সম্পূর্ণ ফর্মটি

tf.get_default_session().run(values)

আপনি নিজে যাচাই করতে পারেন। values.eval()রানের জায়গায় tf.get_default_session().run(values)। আপনার অবশ্যই একই আচরণ পেতে হবে।

Eval যা করছে তা হ'ল ডিফল্ট সেশনটি ব্যবহার করা এবং তারপরে রান () চালানো।


0

টেনস্রোফ্লো ২.x সামঞ্জস্যপূর্ণ উত্তর : Tensorflow 2.x (>= 2.0)সম্প্রদায়ের সুবিধার জন্য মিউরির কোডকে রূপান্তর করা ।

!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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.