টেনসরফ্লো গ্রাফের অংশটি মূল্যায়নের দুটি উপায় রয়েছে: Session.run
ভেরিয়েবলের তালিকায় এবং Tensor.eval
। এই দুজনের মধ্যে কি পার্থক্য আছে?
টেনসরফ্লো গ্রাফের অংশটি মূল্যায়নের দুটি উপায় রয়েছে: Session.run
ভেরিয়েবলের তালিকায় এবং Tensor.eval
। এই দুজনের মধ্যে কি পার্থক্য আছে?
উত্তর:
আপনার যদি 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
।
a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a, b)
এবং আমি মাত্র টেনস্রফ্লো থেকে অভিযোগ পেয়েছি যে আকারগুলি মেলে না, আমি আরও স্পষ্টভাবে অনুমান করি যে র্যাঙ্কটি কমপক্ষে 2 হওয়া উচিত
tf.multiply(t, u)
এবং এটি ভাল কাজ করেছে।
টেনসর প্রবাহ সম্পর্কিত 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
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))
আমি ভুল হলে আমাকে সংশোধন করুন
মনে রাখা সবচেয়ে গুরুত্বপূর্ণ বিষয়:
টেনারফ্লো থেকে স্থির, পরিবর্তনশীল (যে কোনও ফলাফল) পাওয়ার একমাত্র উপায় সেশন 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)
।
টেনসরফ্লোতে আপনি গ্রাফ তৈরি করেন এবং সেই গ্রাফটিতে মানগুলি প্রেরণ করেন। গ্রাফ সমস্ত কঠোর পরিশ্রম করে এবং গ্রাফটিতে আপনি যে কনফিগারেশন করেছেন তার উপর ভিত্তি করে আউটপুট উত্পন্ন করে। এখন আপনি যখন গ্রাফটিতে মানগুলি পাস করবেন তারপরে প্রথমে আপনাকে একটি সেন্সরফ্লো সেশন তৈরি করতে হবে।
tf.Session()
একবার সেশন শুরু হওয়ার পরে আপনি সেই অধিবেশনটি ব্যবহার করবেন বলে ধারণা করা হচ্ছে কারণ সমস্ত ভেরিয়েবল এবং সেটিংস এখন সেশনের অংশ। সুতরাং, গ্রাফটিতে বাহ্যিক মানগুলি পাস করার জন্য দুটি উপায় রয়েছে যাতে গ্রাফ তাদের গ্রহণ করে। একটি আপনি সেশনটি কার্যকর করার সময় .run () কে কল করতে পারেন।
অন্যান্য উপায় যা মূলত এটির শর্টকাট .eval () ব্যবহার করা। আমি শর্টকাট বলেছিলাম কারণ .eve () এর সম্পূর্ণ ফর্মটি
tf.get_default_session().run(values)
আপনি নিজে যাচাই করতে পারেন। values.eval()
রানের জায়গায় tf.get_default_session().run(values)
। আপনার অবশ্যই একই আচরণ পেতে হবে।
Eval যা করছে তা হ'ল ডিফল্ট সেশনটি ব্যবহার করা এবং তারপরে রান () চালানো।
টেনস্রোফ্লো ২.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
tf.Tensor.eval()
এবংtf.Session.run()
কিন্তু সংযুক্ত হয়tf.Operation.run()
এবংtf.Tensor.eval()
ব্যাখ্যা হিসাবে এখানে