tf.app.run()টেনসরফ্লোতে ডেমো অনুবাদ করে কীভাবে কাজ করে ?
ইন tensorflow/models/rnn/translate/translate.py, একটি কল আছে tf.app.run()। কীভাবে এটি পরিচালনা করা হচ্ছে?
if __name__ == "__main__":
tf.app.run()
tf.app.run()টেনসরফ্লোতে ডেমো অনুবাদ করে কীভাবে কাজ করে ?
ইন tensorflow/models/rnn/translate/translate.py, একটি কল আছে tf.app.run()। কীভাবে এটি পরিচালনা করা হচ্ছে?
if __name__ == "__main__":
tf.app.run()
উত্তর:
if __name__ == "__main__":
মানে বর্তমান ফাইলটি মডিউল হিসাবে আমদানির পরিবর্তে শেলের অধীনে কার্যকর করা হয়।
tf.app.run()
যেমন আপনি ফাইল মাধ্যমে দেখতে পারেন app.py
def run(main=None, argv=None):
"""Runs the program with an optional 'main' function and 'argv' list."""
f = flags.FLAGS
# Extract the args from the optional `argv` list.
args = argv[1:] if argv else None
# Parse the known flags from that list, or from the command
# line otherwise.
# pylint: disable=protected-access
flags_passthrough = f._parse_flags(args=args)
# pylint: enable=protected-access
main = main or sys.modules['__main__'].main
# Call the main function, passing through any arguments
# to the final program.
sys.exit(main(sys.argv[:1] + flags_passthrough))
আসুন লাইন লাইন ভেঙে দিন:
flags_passthrough = f._parse_flags(args=args)
এটি নিশ্চিত করে যে আপনি কমান্ড লাইনের মধ্য দিয়ে যে যুক্তিটি পাস করেছেন তা বৈধ, যেমন:
python my_model.py --data_dir='...' --max_iteration=10000প্রকৃতপক্ষে, অজগর স্ট্যান্ডার্ড argparseমডিউলটির ভিত্তিতে এই বৈশিষ্ট্যটি প্রয়োগ করা হয়েছে ।
main = main or sys.modules['__main__'].main
এর mainডান দিকের =প্রথমটি হ'ল বর্তমান ফাংশনের প্রথম যুক্তি run(main=None, argv=None)
। এর sys.modules['__main__']অর্থ বর্তমান চলমান ফাইল (যেমন my_model.py)।
সুতরাং দুটি মামলা আছে:
আপনার কোনও mainফাংশন নেই my_model.pyতারপরে আপনাকে কল করতে হবেtf.app.run(my_main_running_function)
আপনি যদি একটি আছে mainফাংশন my_model.py। (এটি বেশিরভাগ ক্ষেত্রেই হয়))
শেষ লাইন:
sys.exit(main(sys.argv[:1] + flags_passthrough))
আপনার main(argv)বা my_main_running_function(argv)ফাংশনটি সঠিকভাবে পার্স করা যুক্তির সাথে ডাকা হয়েছে তা নিশ্চিত করে ।
abseilযার দ্বারা টিএফ অবশ্যই abseil.io/docs/python/guides/flags
এটি কেবলমাত্র খুব দ্রুত একটি মোড়ক যা পতাকা বিশ্লেষণ পরিচালনা করে এবং তারপরে আপনার নিজস্ব প্রধানতে প্রেরণ করে। কোড দেখুন ।
main = main or sys.modules['__main__'].mainএবং এর sys.exit(main(sys.argv[:1] + flags_passthrough))অর্থ কী?
main()?
বিশেষ কিছু নেই tf.app। এটি কেবল একটি জেনেরিক এন্ট্রি পয়েন্ট স্ক্রিপ্ট , যা
একটি alচ্ছিক 'প্রধান' ফাংশন এবং 'আরজিভি' তালিকা সহ প্রোগ্রামটি চালায়।
নিউরাল নেটওয়ার্কগুলির সাথে এর কোনও যোগসূত্র নেই এবং এটি কোনও মূল যুক্তিটি কল করে এটিতে কোনও যুক্তি দিয়ে।
সাধারণ কথায়, এর কাজটি tf.app.run()হ'ল প্রথমে পরবর্তী ব্যবহারের জন্য বৈশ্বিক পতাকা সেট করা যেমন:
from tensorflow.python.platform import flags
f = flags.FLAGS
এবং তারপরে আপনার কাস্টম প্রধান ফাংশনটি একটি আর্গুমেন্টের সেট দিয়ে চালান ।
যেমন টেনসরফ্লো এনএমটি কোডবেসে প্রশিক্ষণ / অনুমানের জন্য প্রোগ্রামের প্রয়োগের প্রথম প্রথম প্রবেশ বিন্দু এই মুহুর্তে শুরু হয় (নীচের কোডটি দেখুন)
if __name__ == "__main__":
nmt_parser = argparse.ArgumentParser()
add_arguments(nmt_parser)
FLAGS, unparsed = nmt_parser.parse_known_args()
tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
যুক্তিগুলি পার্স করার পরে আপনার argparseসাথে tf.app.run()"প্রধান" ফাংশনটি চালিত করুন যা সংজ্ঞায়িত হয়:
def main(unused_argv):
default_hparams = create_hparams(FLAGS)
train_fn = train.train
inference_fn = inference.inference
run_main(FLAGS, default_hparams, train_fn, inference_fn)
সুতরাং, বিশ্বব্যাপী ব্যবহারের জন্য পতাকাগুলি সেট করার পরে, আপনি tf.app.run()কেবলমাত্র সেই mainফাংশনটি চালান যা আপনি argvএর পরামিতি হিসাবে এটিতে পাঠিয়েছেন ।
পিএস: সালভাদোর ডালির উত্তরটি যেমন বলেছে, এটি ঠিক একটি ভাল সফটওয়্যার ইঞ্জিনিয়ারিং অনুশীলন, আমার ধারণা, যদিও টেনসরফ্লো mainস্বাভাবিক সিপাইথন ব্যবহার করে চালানো ফাংশনটির কোনও অপ্টিমাইজড রান সঞ্চালন করে কিনা তা আমি নিশ্চিত নই ।
গুগল কোড লাইব্রেরি / বাইনারি / পাইথন স্ক্রিপ্টগুলিতে গ্লোবাল পতাকা অ্যাক্সেস করার উপর অনেক কিছু নির্ভর করে এবং তাই tf.app.run () FLAGs (বা অনুরূপ কিছু) পরিবর্তনশীলতে একটি বৈশ্বিক রাষ্ট্র তৈরি করতে এই পতাকাগুলি পার্স করে এবং তারপরে পাইথন মেইন ( ) এটি করা উচিত।
Tf.app.run () এ যদি তাদের এই কলটি না থাকে, তবে ব্যবহারকারীরা এফএলএজি পার্সিং করতে ভুলে যেতে পারেন, যার ফলে এই লাইব্রেরি / বাইনারি / স্ক্রিপ্টগুলিতে প্রয়োজনীয় FLAG- তে অ্যাক্সেস নেই।
2.0 সমঞ্জসে উত্তর : আপনি ব্যবহার করতে চান তাহলে tf.app.run()এ Tensorflow 2.0, আমরা কমান্ড ব্যবহার করা উচিত
tf.compat.v1.app.run()অথবা আপনি কোডটি tf_upgrade_v2রূপান্তর করতে ব্যবহার করতে পারেন ।1.x2.0
tf.flags.DEFINE_integer('batch_size', 128, 'Number of images to process in a batch.')এবং তারপরে আপনিtf.app.run()এটি ব্যবহার করলে জিনিসগুলি সেট আপ হয়ে যায় যাতে আপনি বিশ্বব্যাপী আপনার সংজ্ঞায়িত পতাকাগুলির পাস করা মানগুলিতে অ্যাক্সেস করতে পারবেন, যেমন আপনার কোডটিতেtf.flags.FLAGS.batch_sizeযেখানেই এটি প্রয়োজন from