টেনসরফ্লো কোড স্টাইল গাইড

পাইথন শৈলী

PEP 8 Python শৈলী নির্দেশিকা অনুসরণ করুন, TensorFlow ব্যতীত 4 এর পরিবর্তে 2টি স্পেস ব্যবহার করে। অনুগ্রহ করে Google Python শৈলী নির্দেশিকা মেনে চলুন, এবং আপনার Python পরিবর্তনগুলি পরীক্ষা করতে pylint ব্যবহার করুন।

পাইলিন্ট

pylint ইনস্টল করতে:

$ pip install pylint

টেনসরফ্লো সোর্স কোড রুট ডিরেক্টরি থেকে pylint সহ একটি ফাইল পরীক্ষা করতে:

$ pylint --rcfile=tensorflow/tools/ci_build/pylintrc tensorflow/python/keras/losses.py

সমর্থিত পাইথন সংস্করণ

সমর্থিত পাইথন সংস্করণের জন্য, TensorFlow ইনস্টলেশন গাইড দেখুন।

অফিসিয়াল এবং সম্প্রদায় সমর্থিত বিল্ডগুলির জন্য TensorFlow ক্রমাগত বিল্ড স্ট্যাটাস দেখুন।

C++ কোডিং স্টাইল

TensorFlow C++ কোডের পরিবর্তনগুলি Google C++ স্টাইল গাইড এবং TensorFlow নির্দিষ্ট শৈলীর বিবরণের সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত। আপনার C/C++ পরিবর্তনগুলি পরীক্ষা করতে clang-format ব্যবহার করুন।

উবুন্টু 16+ এ ইনস্টল করতে, করুন:

$ apt-get install -y clang-format

আপনি নিম্নলিখিতগুলির সাথে একটি C/C++ ফাইলের বিন্যাস পরীক্ষা করতে পারেন:

$ clang-format <my_cc_file> --style=google > /tmp/my_cc_file.cc
$ diff <my_cc_file> /tmp/my_cc_file.cc

অন্যান্য ভাষাসমূহ

টেনসরফ্লো কনভেনশন এবং বিশেষ ব্যবহার

পাইথন অপারেশন

একটি টেনসরফ্লো অপারেশন হল একটি ফাংশন যা প্রদত্ত ইনপুট টেনসরগুলি আউটপুট টেনসর প্রদান করে (বা গ্রাফ তৈরি করার সময় একটি গ্রাফে একটি বিকল্প যোগ করে)।

  • প্রথম আর্গুমেন্টটি টেনসর হওয়া উচিত, তারপরে মৌলিক পাইথন প্যারামিটারগুলি। শেষ আর্গুমেন্টটি None এর একটি ডিফল্ট মান সহ name
  • টেনসর আর্গুমেন্ট একটি একক টেনসর বা টেনসরের পুনরাবৃত্তিযোগ্য হওয়া উচিত। অর্থাৎ, একটি "টেনসর বা টেনসরের তালিকা" খুব বিস্তৃত। assert_proper_iterable দেখুন।
  • যে অপারেশনগুলি টেনসরগুলিকে আর্গুমেন্ট হিসাবে গ্রহণ করে সেগুলি C++ অপারেশন ব্যবহার করলে নন-টেনসর ইনপুটগুলিকে টেনসরে রূপান্তর করতে convert_to_tensor কল করা উচিত। নোট করুন যে আর্গুমেন্টগুলি এখনও ডকুমেন্টেশনে একটি নির্দিষ্ট dtype-এর একটি Tensor অবজেক্ট হিসাবে বর্ণনা করা হয়েছে।
  • প্রতিটি পাইথন অপারেশনের একটি name_scope থাকা উচিত। নীচের হিসাবে, একটি স্ট্রিং হিসাবে op এর নাম পাস.
  • অপারেশনগুলিতে আর্গস এবং রিটার্নস ঘোষণা সহ একটি বিস্তৃত পাইথন মন্তব্য থাকা উচিত যা প্রতিটি মানের প্রকার এবং অর্থ উভয়ই ব্যাখ্যা করে। সম্ভাব্য আকার, dtypes, বা র‌্যাঙ্কগুলি বর্ণনায় উল্লেখ করা উচিত। ডকুমেন্টেশন বিবরণ দেখুন.
  • বর্ধিত ব্যবহারযোগ্যতার জন্য, উদাহরণ বিভাগে অপ-এর ইনপুট/আউটপুট সহ ব্যবহারের একটি উদাহরণ অন্তর্ভুক্ত করুন।
  • tf.Tensor.eval বা tf.Session.run এর সুস্পষ্ট ব্যবহার এড়িয়ে চলুন। উদাহরণস্বরূপ, টেনসর মানের উপর নির্ভর করে এমন যুক্তি লিখতে, টেনসরফ্লো নিয়ন্ত্রণ প্রবাহ ব্যবহার করুন। বিকল্পভাবে, ক্রিয়াটি শুধুমাত্র তখনই চালানোর জন্য সীমাবদ্ধ করুন যখন eager execution সক্ষম করা হয় ( tf.executing_eagerly() )।

উদাহরণ:

def my_op(tensor_in, other_tensor_in, my_param, other_param=0.5,
          output_collections=(), name=None):
  """My operation that adds two tensors with given coefficients.

  Args:
    tensor_in: `Tensor`, input tensor.
    other_tensor_in: `Tensor`, same shape as `tensor_in`, other input tensor.
    my_param: `float`, coefficient for `tensor_in`.
    other_param: `float`, coefficient for `other_tensor_in`.
    output_collections: `tuple` of `string`s, name of the collection to
                        collect result of this op.
    name: `string`, name of the operation.

  Returns:
    `Tensor` of same shape as `tensor_in`, sum of input values with coefficients.

  Example:
    >>> my_op([1., 2.], [3., 4.], my_param=0.5, other_param=0.6,
              output_collections=['MY_OPS'], name='add_t1t2')
    [2.3, 3.4]
  """
  with tf.name_scope(name or "my_op"):
    tensor_in = tf.convert_to_tensor(tensor_in)
    other_tensor_in = tf.convert_to_tensor(other_tensor_in)
    result = my_param * tensor_in + other_param * other_tensor_in
    tf.add_to_collection(output_collections, result)
    return result

ব্যবহার:

output = my_op(t1, t2, my_param=0.5, other_param=0.6,
               output_collections=['MY_OPS'], name='add_t1t2')