คู่มือสไตล์โค้ด TensorFlow

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

สไตล์ Python

ทำตาม คำแนะนำสไตล์ PEP 8 Python ยกเว้น TensorFlow ใช้ 2 ช่องว่างแทน 4 โปรดปฏิบัติตาม Google Python Style Guide และใช้ ไพลินต์ เพื่อตรวจสอบการเปลี่ยนแปลง Python ของคุณ

ไพลินท์

ในการติดตั้ง pylint :

$ pip install pylint

การตรวจสอบไฟล์ที่มี pylint จากไดเรกทอรีแหล่ง TensorFlow รากรหัส:

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

เวอร์ชัน Python ที่รองรับ

สำหรับเวอร์ชัน Python ที่รองรับโปรดดู คู่มือการติดตั้ง TensorFlow

ดู สถานะการสร้างแบบต่อเนื่องของ TensorFlow สำหรับงานสร้างที่สนับสนุนอย่างเป็นทางการและชุมชน

รูปแบบการเข้ารหัส C ++

การเปลี่ยนแปลงโค้ด TensorFlow C ++ ควรเป็นไปตาม คู่มือสไตล์ Google C ++ และ รายละเอียดสไตล์เฉพาะของ TensorFlow ใช้ clang-format เพื่อตรวจสอบการเปลี่ยนแปลง C / C ++ ของคุณ

ในการติดตั้งบน Ubuntu 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

ภาษาอื่น ๆ

อนุสัญญา TensorFlow และการใช้งานพิเศษ

การดำเนินการ Python

การ ดำเนินการ TensorFlow เป็นฟังก์ชันที่ให้อินพุตเทนเซอร์ส่งกลับค่าเทนเซอร์เอาต์พุต (หรือเพิ่ม op ให้กับกราฟเมื่อสร้างกราฟ)

  • อาร์กิวเมนต์แรกควรเป็นเทนเซอร์ตามด้วยพารามิเตอร์ Python พื้นฐาน อาร์กิวเมนต์สุดท้ายคือ name มีค่าเริ่มต้นเป็น None
  • อาร์กิวเมนต์เทนเซอร์ควรเป็นเทนเซอร์ตัวเดียวหรือเทนเซอร์ที่ทำซ้ำได้ นั่นคือ "Tensor หรือ list of Tensors" กว้างเกินไป ดู assert_proper_iterable
  • การดำเนินการที่ใช้เทนเซอร์เป็นอาร์กิวเมนต์ควรเรียกใช้ convert_to_tensor เพื่อแปลงอินพุตที่ไม่ใช่เทนเซอร์เป็นเทนเซอร์หากใช้การดำเนินการ C ++ โปรดสังเกตว่าอาร์กิวเมนต์ยังคงอธิบายว่าเป็นวัตถุ Tensor ของ dtype เฉพาะในเอกสารประกอบ
  • การดำเนินการ Python แต่ละรายการควรมี name_scope ดังที่แสดงด้านล่างให้ส่งชื่อของ op เป็นสตริง
  • การดำเนินการควรมีข้อคิดเห็น Python ที่ครอบคลุมพร้อมการประกาศ Args และ Returns ที่อธิบายทั้งประเภทและความหมายของแต่ละค่า ควรระบุรูปร่างประเภท dtypes หรืออันดับที่เป็นไปได้ในคำอธิบาย ดูรายละเอียดเอกสาร
  • สำหรับการใช้งานที่เพิ่มขึ้นให้รวมตัวอย่างการใช้งานกับอินพุต / เอาต์พุตของ op ในส่วนตัวอย่าง
  • หลีกเลี่ยงการใช้ tf.Tensor.eval หรือ tf.Session.run อย่าง tf.Session.run ตัวอย่างเช่นในการเขียนตรรกะที่ขึ้นอยู่กับค่า Tensor ให้ใช้โฟลว์ควบคุม TensorFlow หรืออีกวิธีหนึ่งคือ จำกัด การดำเนินการให้ทำงานเฉพาะเมื่อเปิดใช้งานการดำเนินการอย่างกระตือรือร้น ( 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')