Tf.app.run () কীভাবে কাজ করে?


148

tf.app.run()টেনসরফ্লোতে ডেমো অনুবাদ করে কীভাবে কাজ করে ?

ইন tensorflow/models/rnn/translate/translate.py, একটি কল আছে tf.app.run()। কীভাবে এটি পরিচালনা করা হচ্ছে?

if __name__ == "__main__":
    tf.app.run() 

উত্তর:


134
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)।

সুতরাং দুটি মামলা আছে:

  1. আপনার কোনও mainফাংশন নেই my_model.pyতারপরে আপনাকে কল করতে হবেtf.app.run(my_main_running_function)

  2. আপনি যদি একটি আছে mainফাংশন my_model.py। (এটি বেশিরভাগ ক্ষেত্রেই হয়))

শেষ লাইন:

sys.exit(main(sys.argv[:1] + flags_passthrough))

আপনার main(argv)বা my_main_running_function(argv)ফাংশনটি সঠিকভাবে পার্স করা যুক্তির সাথে ডাকা হয়েছে তা নিশ্চিত করে ।


67
প্রবর্তক টেনসরফ্লো ব্যবহারকারীদের জন্য ধাঁধাটির একটি অনুপস্থিত অংশ: টেনসরফ্লোতে কিছু বিল্টিন কমান্ড লাইন পতাকা হ্যান্ডলিং প্রক্রিয়া রয়েছে। আপনি নিজের পতাকাগুলি এর মতো সংজ্ঞায়িত করতে পারেন tf.flags.DEFINE_integer('batch_size', 128, 'Number of images to process in a batch.')এবং তারপরে আপনি tf.app.run()এটি ব্যবহার করলে জিনিসগুলি সেট আপ হয়ে যায় যাতে আপনি বিশ্বব্যাপী আপনার সংজ্ঞায়িত পতাকাগুলির পাস করা মানগুলিতে অ্যাক্সেস করতে পারবেন, যেমন আপনার কোডটিতে tf.flags.FLAGS.batch_sizeযেখানেই এটি প্রয়োজন from
ইসরান্দি

1
এটি আমার মতে (বর্তমান) তিনটির আরও ভাল উত্তর। এটি "tf.app.run () কীভাবে কাজ করে" ব্যাখ্যা করে, অন্য দুটি উত্তর কেবল এটি কী করে তা বলে।
থমাস ফাউসঙ্কেঞ্জার

ফ্ল্যাগগুলি হ্যান্ডল করার মতো মনে হচ্ছে abseilযার দ্বারা টিএফ অবশ্যই abseil.io/docs/python/guides/flags
CpILL

75

এটি কেবলমাত্র খুব দ্রুত একটি মোড়ক যা পতাকা বিশ্লেষণ পরিচালনা করে এবং তারপরে আপনার নিজস্ব প্রধানতে প্রেরণ করে। কোড দেখুন ।


12
"পতাকা পার্সিং পরিচালনা করে" এর অর্থ কী? সম্ভবত আপনি কি লিঙ্ক যুক্ত করতে পারেন এর অর্থ কী?
পিনোচিও

4
এটি পতাকা প্যাকেজ ব্যবহার করে প্রোগ্রামে সরবরাহ করা কমান্ড-লাইন আর্গুমেন্টকে বিশ্লেষণ করে। (যা কিছু মোড়কের সাথে কভারের নীচে স্ট্যান্ডার্ড 'আরগপার্স' লাইব্রেরি ব্যবহার করে)। এটি আমার উত্তরটিতে আমি সংযুক্ত কোড থেকে লিঙ্কযুক্ত।
ডিগা

1
App.py এ, কী main = main or sys.modules['__main__'].mainএবং এর sys.exit(main(sys.argv[:1] + flags_passthrough))অর্থ কী?
hAcKnRoCk

3
এটি আমার কাছে অদ্ভুত বলে মনে হচ্ছে, কেন আপনি যদি সরাসরি এটি কল করতে পারেন তবে মূল ফাংশনটি কেন জড়িয়ে রাখুন main()?
চার্লি পার্কার

2
hAcKnRoCk: যদি ফাইলে কোনও প্রধান থাকে না, তবে এটি পরিবর্তে sys.modules [' main '] .main এ যা ব্যবহার করে তা ব্যবহার করে । Sys.exit এর অর্থ মেইন কমান্ড চালানো আরোগগুলি এবং যে কোনও পতাকা ব্যবহার করে এটি ব্যবহার করে এবং প্রধানটির ফিরে আসার মান দিয়ে বেরিয়ে আসা। @ চার্লিপার্কার - গুগলের বিদ্যমান পাইথন অ্যাপ্লিকেশন লাইব্রেরি যেমন জিফ্লেগস এবং গুগল-অ্যাপ্লিটালগুলির সাথে সামঞ্জস্যের জন্য। উদাহরণস্বরূপ, github.com/google/google-apputils দেখুন
dga

8

বিশেষ কিছু নেই tf.app। এটি কেবল একটি জেনেরিক এন্ট্রি পয়েন্ট স্ক্রিপ্ট , যা

একটি alচ্ছিক 'প্রধান' ফাংশন এবং 'আরজিভি' তালিকা সহ প্রোগ্রামটি চালায়।

নিউরাল নেটওয়ার্কগুলির সাথে এর কোনও যোগসূত্র নেই এবং এটি কোনও মূল যুক্তিটি কল করে এটিতে কোনও যুক্তি দিয়ে।


5

সাধারণ কথায়, এর কাজটি 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স্বাভাবিক সিপাইথন ব্যবহার করে চালানো ফাংশনটির কোনও অপ্টিমাইজড রান সঞ্চালন করে কিনা তা আমি নিশ্চিত নই ।


2

গুগল কোড লাইব্রেরি / বাইনারি / পাইথন স্ক্রিপ্টগুলিতে গ্লোবাল পতাকা অ্যাক্সেস করার উপর অনেক কিছু নির্ভর করে এবং তাই tf.app.run () FLAGs (বা অনুরূপ কিছু) পরিবর্তনশীলতে একটি বৈশ্বিক রাষ্ট্র তৈরি করতে এই পতাকাগুলি পার্স করে এবং তারপরে পাইথন মেইন ( ) এটি করা উচিত।

Tf.app.run () এ যদি তাদের এই কলটি না থাকে, তবে ব্যবহারকারীরা এফএলএজি পার্সিং করতে ভুলে যেতে পারেন, যার ফলে এই লাইব্রেরি / বাইনারি / স্ক্রিপ্টগুলিতে প্রয়োজনীয় FLAG- তে অ্যাক্সেস নেই।


1

2.0 সমঞ্জসে উত্তর : আপনি ব্যবহার করতে চান তাহলে tf.app.run()Tensorflow 2.0, আমরা কমান্ড ব্যবহার করা উচিত

tf.compat.v1.app.run()অথবা আপনি কোডটি tf_upgrade_v2রূপান্তর করতে ব্যবহার করতে পারেন ।1.x2.0

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