สิ่งที่สำคัญที่สุดที่ต้องคำนึงถึงเกี่ยวกับ TensorFlow คือส่วนใหญ่แกนไม่ได้เขียนใน Python : มันเขียนด้วยการผสมผสานระหว่าง C ++ และ CUDA ที่ได้รับการปรับปรุงประสิทธิภาพสูงสุด (ภาษาของ Nvidia สำหรับการเขียนโปรแกรม GPU) ส่วนใหญ่เกิดขึ้นโดยใช้Eigen (ไลบรารีตัวเลข C ++ และ CUDA ประสิทธิภาพสูง) และcuDNN ของ NVidia (ไลบรารี DNN ที่ปรับให้เหมาะสมที่สุดสำหรับNVidia GPUsสำหรับฟังก์ชั่นเช่นconvolutions )
แบบจำลองสำหรับ TensorFlow คือโปรแกรมเมอร์ใช้ "ภาษาบางภาษา" (ส่วนใหญ่เป็น Python!) เพื่อแสดงโมเดล รุ่นนี้เขียนในโครงสร้าง TensorFlow เช่น:
h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...
ไม่ได้ดำเนินการจริงเมื่อมีการเรียกใช้ Python สิ่งที่สร้างขึ้นจริงคือกราฟดาต้าโฟลว์ที่บอกว่าจะรับอินพุตเฉพาะใช้การดำเนินการเฉพาะส่งผลลัพธ์เป็นอินพุตไปยังการดำเนินการอื่นและอื่น ๆ รุ่นนี้จะถูกดำเนินการโดยเร็ว C ++ รหัสและส่วนใหญ่ข้อมูลที่เกิดขึ้นระหว่างการดำเนินการจะไม่คัดลอกกลับไปที่รหัสหลาม
จากนั้นโปรแกรมเมอร์จะ "ผลัก" การดำเนินการของแบบจำลองนี้โดยการดึงที่โหนด - สำหรับการฝึกอบรมซึ่งโดยปกติจะเป็น Python และสำหรับการให้บริการบางครั้งใน Python และบางครั้งใน C ++ แบบดิบ:
sess.run(eval_results)
Python (หรือการเรียกใช้ฟังก์ชัน C ++) อันนี้ใช้การเรียกระหว่างกระบวนการไปยัง C ++ หรือ RPCสำหรับรุ่นที่แจกจ่ายเพื่อโทรไปยังเซิร์ฟเวอร์ C ++ TensorFlow เพื่อบอกให้ดำเนินการแล้วคัดลอกผลลัพธ์กลับมา
ดังนั้นด้วยสิ่งที่กล่าวมาลองเติมคำถามอีกครั้ง: ทำไม TensorFlow จึงเลือก Python เป็นภาษาที่ได้รับการสนับสนุนเป็นอย่างแรกสำหรับการแสดงและควบคุมการฝึกอบรมของนางแบบ?
คำตอบนั้นง่าย: Python อาจเป็นภาษาที่สะดวกสบายที่สุดสำหรับนักวิทยาศาสตร์ข้อมูลจำนวนมากและผู้เชี่ยวชาญด้านการเรียนรู้ของเครื่องจักรซึ่งยังง่ายต่อการรวมและควบคุมแบ็คเอนด์ C ++ ในขณะเดียวกันก็เป็นคำทั่วไปที่ใช้กันอย่างแพร่หลายทั้งในและนอก ของ Google และโอเพนซอร์ส ด้วยรูปแบบพื้นฐานของ TensorFlow ประสิทธิภาพของ Python นั้นไม่สำคัญเลย มันเป็นข้อดีอย่างมากที่NumPyทำให้ง่ายต่อการประมวลผลล่วงหน้าใน Python และมีประสิทธิภาพสูงก่อนที่จะป้อนเข้าสู่ TensorFlow สำหรับสิ่งที่หนักหน่วงอย่างแท้จริงของ CPU
นอกจากนี้ยังมีความซับซ้อนมากมายในการแสดงแบบจำลองที่ไม่ได้ใช้เมื่อเรียกใช้งาน - การอนุมานรูปร่าง (เช่นถ้าคุณทำ matmul (A, B) รูปร่างของข้อมูลที่ได้จะเป็นอย่างไร) และการไล่ระดับสีอัตโนมัติการคำนวณการมันกลับกลายเป็นว่าเป็นเรื่องที่ดีมากที่จะสามารถแสดงสิ่งเหล่านั้นใน Python ได้ แต่ฉันคิดว่าในระยะยาวพวกเขาอาจจะย้ายไปที่แบ็กเอนด์ C ++ เพื่อเพิ่มภาษาอื่นให้ง่ายขึ้น
(ความหวังของหลักสูตรคือการสนับสนุนภาษาอื่น ๆ ในอนาคตสำหรับการสร้างและการแสดงรุ่นที่มันมีอยู่แล้วค่อนข้างตรงไปตรงมาเพื่อให้ทำงานได้อนุมานใช้ภาษาอื่น ๆ อีกหลาย -. c ++ ทำงานตอนนี้มีคนจาก Facebook มีส่วนไปผูกที่เรากำลังตรวจสอบในขณะนี้ ฯลฯ )