การหดตัวของเทนเซอร์ตามแบบแผนการรวมของไอน์สไตน์
ใช้การหดตัวและลดเทนเซอร์ทั่วไป เทนเซอร์อินพุตแต่ละตัวจะต้องมีตัวห้อยอินพุตที่เกี่ยวข้องซึ่งปรากฏในด้านซ้ายมือของสมการโดยคั่นด้วยเครื่องหมายจุลภาค ทางด้านขวาของสมการประกอบด้วยตัวห้อยเอาต์พุต ตัวห้อยอินพุตและตัวห้อยเอาต์พุตควรประกอบด้วยป้ายกำกับแกนที่มีชื่อเป็นศูนย์หรือมากกว่าและมีจุดไข่ปลาไม่เกินหนึ่งตัว (`...`)
ป้ายกำกับแกนที่มีชื่ออาจเป็นอักขระเดี่ยวๆ ที่ไม่ใช่อักขระที่มีความหมายพิเศษ เช่น `,.->` พฤติกรรมของ Op นี้ไม่ได้ถูกกำหนดไว้หากได้รับสมการที่มีรูปแบบไม่ถูกต้อง เนื่องจากการตรวจสอบเสร็จสิ้น ณ เวลาสร้างกราฟ เราจึงละเว้นการตรวจสอบความถูกต้องของรูปแบบ ณ รันไทม์
หมายเหตุ: Op นี้ ไม่ได้ ตั้งใจให้ผู้ใช้เรียก ผู้ใช้ควรโทรหา tf.einsum
โดยตรงแทน มันเป็น Op ที่ซ่อนอยู่ซึ่งใช้โดย tf.einsum
การดำเนินการจะถูกนำไปใช้กับอินพุตตามกฎต่อไปนี้:
(a) เส้นทแยงมุมทั่วไป: สำหรับขนาดอินพุตที่สอดคล้องกับป้ายกำกับแกนที่ปรากฏมากกว่าหนึ่งครั้งในตัวห้อยอินพุตเดียวกัน เราจะใช้เส้นทแยงมุมทั่วไป (`k` มิติ) ตัวอย่างเช่น ในสมการ `iii->i` ที่มีรูปร่างอินพุต `[3, 3, 3]` เส้นทแยงมุมทั่วไปจะประกอบด้วยองค์ประกอบ `3` ที่ดัชนี `(0, 0, 0)`, `(1 , 1, 1)` และ `(2, 2, 2)` เพื่อสร้างเทนเซอร์ของรูปร่าง `[3]`
(b) การลดลง: แกนที่สอดคล้องกับป้ายกำกับที่ปรากฏเฉพาะในตัวห้อยอินพุตเดียว แต่ไม่ได้อยู่ในตัวห้อยเอาต์พุตจะถูกรวมเข้าด้วยกันก่อนที่จะหดตัวของเทนเซอร์ ตัวอย่างเช่น ในสมการ `ab,bc->b` ป้ายแกน `a` และ `c` คือป้ายกำกับแกนลด
(c) ขนาดแบทช์: แกนที่สอดคล้องกับป้ายกำกับที่ปรากฏในแต่ละตัวห้อยอินพุตและในตัวห้อยเอาต์พุตประกอบเป็นขนาดแบทช์ในการหดตัวของเทนเซอร์ ป้ายแกนที่ไม่มีชื่อซึ่งสอดคล้องกับจุดไข่ปลา (`...`) ยังสอดคล้องกับมิติข้อมูลแบทช์อีกด้วย ตัวอย่างเช่น สำหรับสมการที่แสดงถึงการคูณเมทริกซ์แบบแบตช์ `bij,bjk->bik` ป้ายแกน `b` จะสอดคล้องกับมิติแบบแบตช์
(d) การหดตัว: ในกรณีของไบนารีไอน์ซัม แกนที่สอดคล้องกับฉลากที่ปรากฏในอินพุตที่แตกต่างกันสองอัน (และไม่ใช่ในเอาต์พุต) จะถูกหดตัวซึ่งกันและกัน เมื่อพิจารณาสมการการคูณเมทริกซ์แบบแบตช์อีกครั้ง (`bij,bjk->bik`) ป้ายกำกับแกนที่หดตัวคือ `j`
(e) ขยายเส้นทแยงมุม: หากตัวห้อยเอาต์พุตมีป้ายกำกับแกนซ้ำ (ชัดเจน) การดำเนินการตรงกันข้ามของ (a) จะถูกนำไปใช้ ตัวอย่างเช่น ในสมการ `i->iii` และรูปร่างอินพุต `[3]` ผลลัพธ์ของรูปร่าง `[3, 3, 3]` ล้วนเป็นศูนย์ทั้งหมด ยกเว้นเส้นทแยงมุม (ทั่วไป) ที่เติมด้วย ค่าจากอินพุต หมายเหตุ: `np.einsum` หรือ tf.einsum
ไม่รองรับการดำเนินการนี้ มีไว้เพื่อให้สามารถคำนวณการไล่ระดับสีเชิงสัญลักษณ์ของ tf.einsum
ตัวห้อยเอาต์พุตจะต้องมีเฉพาะป้ายกำกับที่ปรากฏในตัวห้อยอินพุตอย่างน้อยหนึ่งตัว นอกจากนี้ การแมปมิติข้อมูลทั้งหมดกับป้ายกำกับแกนเดียวกันจะต้องเท่ากัน
ตัวห้อยอินพุตและเอาต์พุตใดๆ อาจมีจุดไข่ปลาจุดเดียว (`...`) ได้มากที่สุด จุดไข่ปลาเหล่านี้ถูกแมปกับมิติข้อมูลที่ไม่สอดคล้องกับป้ายกำกับแกนที่มีชื่อใดๆ หากอินพุตสองตัวมีจุดไข่ปลา อินพุตเหล่านั้นจะถูกถ่ายทอดตามมาตรฐานการออกอากาศ NumPy [กฎ](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)
มิติที่ออกอากาศจะถูกวางไว้ในตำแหน่งที่สอดคล้องกันของจุดไข่ปลาในตัวห้อยเอาต์พุต หากมิติที่ออกอากาศไม่ว่างเปล่า และตัวห้อยเอาต์พุตไม่มีจุดไข่ปลา ข้อผิดพลาด InvalidArgument จะเกิดขึ้น
วิธีการสาธารณะ
เอาท์พุต <T> | เป็นเอาท์พุต () ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์ |
คงที่ <T> Einsum <T> | |
เอาท์พุต <T> | เอาท์พุท () เอาท์พุตเทนเซอร์ที่มีรูปร่างขึ้นอยู่กับ "สมการ" |
วิธีการสืบทอด
วิธีการสาธารณะ
เอาท์ พุท สาธารณะ <T> asOutput ()
ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์
อินพุตสำหรับการดำเนินการ TensorFlow คือเอาต์พุตของการดำเนินการ TensorFlow อื่น วิธีการนี้ใช้เพื่อรับหมายเลขอ้างอิงสัญลักษณ์ที่แสดงถึงการคำนวณอินพุต
สร้าง Einsum คงที่สาธารณะ <T> (ขอบเขต ขอบเขต , อินพุต < ตัวดำเนินการ <T>> , สมการสตริง)
วิธีการจากโรงงานเพื่อสร้างคลาสที่รวมการดำเนินการ Einsum ใหม่
พารามิเตอร์
ขอบเขต | ขอบเขตปัจจุบัน |
---|---|
อินพุต | รายชื่อเทนเซอร์ 1 หรือ 2 ตัว |
สมการ | สตริงที่อธิบายการดำเนินการสรุปของไอน์สไตน์ ในรูปแบบของ np.einsum |
การส่งคืน
- ตัวอย่างใหม่ของ Einsum