ส่งกลับเทนเซอร์แนวทแยงแบบแบทช์พร้อมค่าแนวทแยงแบบแบทช์ที่กำหนด
ส่งกลับเทนเซอร์ที่มีเนื้อหาอยู่ใน "แนวทแยง" เป็นเส้นทแยงมุม "k[0]`-th ถึง `k[1]`-th ของเมทริกซ์ โดยที่ส่วนที่เหลือทั้งหมดเสริมด้วย "padding" `num_rows` และ `num_cols` ระบุขนาดของเมทริกซ์ที่อยู่ด้านในสุดของเอาต์พุต หากไม่ได้ระบุทั้งสองอย่าง op จะถือว่าเมทริกซ์ด้านในสุดเป็นสี่เหลี่ยมจัตุรัส และอนุมานขนาดจาก `k` และมิติด้านในสุดเป็น 'diagonal' หากมีการระบุเพียงค่าเดียว op จะถือว่าค่าที่ไม่ได้ระบุมีค่าน้อยที่สุดที่เป็นไปได้ตามเกณฑ์อื่นๆ
ให้ `เส้นทแยงมุม` มี `ขนาด `r` `[I, J, ..., L, M, N]` เอาท์พุตเทนเซอร์มีอันดับ `r+1` โดยมีรูปร่าง `[I, J, ..., L, M, num_rows, num_cols]` เมื่อให้เส้นทแยงมุมเพียงเส้นเดียว (`k` เป็นจำนวนเต็มหรือ `k[0] == ค[1]`) มิฉะนั้น จะมีอันดับ `r` ที่มีรูปร่าง `[I, J, ..., L, num_rows, num_cols]`
มิติด้านในสุดที่สองของ "เส้นทแยงมุม" มีความหมายสองเท่า เมื่อ `k` เป็นสเกลาร์หรือ `k[0] == k[1]` `M` จะเป็นส่วนหนึ่งของขนาดแบตช์ [I, J, ..., M] และเทนเซอร์เอาท์พุตคือ:
output[i, j, ..., l, m, n]
= diagonal[i, j, ..., l, n-max(d_upper, 0)] ; if n - m == d_upper
padding_value ; otherwise
มิฉะนั้น `M` จะถือว่าเป็นจำนวนเส้นทแยงมุมสำหรับเมทริกซ์ในชุดเดียวกัน (`M = k[1]-k[0]+1`) และเทนเซอร์เอาท์พุตจะเป็น: output[i, j, ..., l, m, n]
= diagonal[i, j, ..., l, diag_index, index_in_diag] ; if k[0] <= d <= k[1]
padding_value ; otherwise
โดยที่ `d = n - m`, `diag_index = [k] - d` และ `index_in_diag = n - max(d, 0) + offset``ออฟเซ็ต` จะเป็นศูนย์ ยกเว้นเมื่อการจัดแนวทแยงอยู่ทางด้านขวา
offset = max_diag_len - diag_len(d) ; if (`align` in {RIGHT_LEFT, RIGHT_RIGHT}
and `d >= 0`) or
(`align` in {LEFT_RIGHT, RIGHT_RIGHT}
and `d <= 0`)
0 ; otherwise
โดยที่ `diag_len(d) = min(cols - max(d, 0), row + min(d, 0))`ตัวอย่างเช่น:
# The main diagonal.
diagonal = np.array([[1, 2, 3, 4], # Input shape: (2, 4)
[5, 6, 7, 8]])
tf.matrix_diag(diagonal) ==> [[[1, 0, 0, 0], # Output shape: (2, 4, 4)
[0, 2, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 4]],
[[5, 0, 0, 0],
[0, 6, 0, 0],
[0, 0, 7, 0],
[0, 0, 0, 8]]]
# A superdiagonal (per batch).
diagonal = np.array([[1, 2, 3], # Input shape: (2, 3)
[4, 5, 6]])
tf.matrix_diag(diagonal, k = 1)
==> [[[0, 1, 0, 0], # Output shape: (2, 4, 4)
[0, 0, 2, 0],
[0, 0, 0, 3],
[0, 0, 0, 0]],
[[0, 4, 0, 0],
[0, 0, 5, 0],
[0, 0, 0, 6],
[0, 0, 0, 0]]]
# A tridiagonal band (per batch).
diagonals = np.array([[[0, 8, 9], # Input shape: (2, 2, 3)
[1, 2, 3],
[4, 5, 0]],
[[0, 2, 3],
[6, 7, 9],
[9, 1, 0]]])
tf.matrix_diag(diagonals, k = (-1, 1))
==> [[[1, 8, 0], # Output shape: (2, 3, 3)
[4, 2, 9],
[0, 5, 3]],
[[6, 2, 0],
[9, 7, 3],
[0, 1, 9]]]
# LEFT_RIGHT alignment.
diagonals = np.array([[[8, 9, 0], # Input shape: (2, 2, 3)
[1, 2, 3],
[0, 4, 5]],
[[2, 3, 0],
[6, 7, 9],
[0, 9, 1]]])
tf.matrix_diag(diagonals, k = (-1, 1), align="LEFT_RIGHT")
==> [[[1, 8, 0], # Output shape: (2, 3, 3)
[4, 2, 9],
[0, 5, 3]],
[[6, 2, 0],
[9, 7, 3],
[0, 1, 9]]]
# Rectangular matrix.
diagonal = np.array([1, 2]) # Input shape: (2)
tf.matrix_diag(diagonal, k = -1, num_rows = 3, num_cols = 4)
==> [[0, 0, 0, 0], # Output shape: (3, 4)
[1, 0, 0, 0],
[0, 2, 0, 0]]
# Rectangular matrix with inferred num_cols and padding_value = 9.
tf.matrix_diag(diagonal, k = -1, num_rows = 3, padding_value = 9)
==> [[9, 9], # Output shape: (3, 2)
[1, 9],
[9, 2]]
คลาสที่ซ้อนกัน
ระดับ | MatrixDiagV3.ตัวเลือก | คุณลักษณะทางเลือกสำหรับ MatrixDiagV3 |
วิธีการสาธารณะ
MatrixDiagV3.Options แบบคงที่ | จัดตำแหน่ง (จัดตำแหน่งสตริง) |
เอาท์พุต <T> | เป็นเอาท์พุต () ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์ |
คงที่ <T> MatrixDiagV3 <T> | สร้าง (ขอบเขต ขอบเขต , ตัวดำเนินการ <T> เส้นทแยงมุม, ตัวดำเนิน การ <Integer> k, ตัวดำเนินการ <Integer> numRows, ตัวดำเนินการ <Integer> numCols, ตัวดำเนินการ <T> paddingValue, ตัวเลือก... ตัวเลือก) วิธีการจากโรงงานเพื่อสร้างคลาสที่ห่อการดำเนินการ MatrixDiagV3 ใหม่ |
เอาท์พุต <T> | เอาท์พุท () มีอันดับ `r+1` เมื่อ `k` เป็นจำนวนเต็มหรือ `k[0] == k[1]` ให้จัดอันดับ `r` มิฉะนั้น |
วิธีการสืบทอด
วิธีการสาธารณะ
การจัดตำแหน่ง MatrixDiagV3.Options สาธารณะแบบคงที่ (การจัดตำแหน่งสตริง)
พารามิเตอร์
จัดตำแหน่ง | เส้นทแยงมุมบางเส้นสั้นกว่า `max_diag_len` และจำเป็นต้องเสริมด้วย `align` คือสตริงที่ระบุว่าควรจัดแนว superdiagonals และ subdiagonals อย่างไรตามลำดับ มีการจัดแนวที่เป็นไปได้สี่แบบ: "RIGHT_LEFT" (ค่าเริ่มต้น), "LEFT_RIGHT", "LEFT_LEFT" และ "RIGHT_RIGHT" "RIGHT_LEFT" จัดแนวเหนือเส้นทแยงมุมไปทางขวา (วางด้านซ้ายบนแถว) และเส้นทแยงมุมย่อยไปทางซ้าย (วางด้านขวาบนแถว) เป็นรูปแบบการบรรจุที่ LAPACK ใช้ cuSPARSE ใช้ "LEFT_RIGHT" ซึ่งเป็นการจัดตำแหน่งที่ตรงกันข้าม |
---|
เอาท์พุท สาธารณะ <T> asOutput ()
ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์
อินพุตสำหรับการดำเนินการ TensorFlow คือเอาต์พุตของการดำเนินการ TensorFlow อื่น วิธีการนี้ใช้เพื่อรับหมายเลขอ้างอิงสัญลักษณ์ที่แสดงถึงการคำนวณอินพุต
การสร้าง MatrixDiagV3 <T> แบบคงที่สาธารณะ (ขอบเขต ขอบเขต , ตัวดำเนินการ <T> เส้นทแยงมุม, ตัวดำเนิน การ <Integer> k, ตัวดำเนิน การ <Integer> numRows, ตัวดำเนิน การ <Integer> numCols, ตัวดำเนินการ <T> paddingValue, ตัวเลือก... ตัวเลือก)
วิธีการจากโรงงานเพื่อสร้างคลาสที่ห่อการดำเนินการ MatrixDiagV3 ใหม่
พารามิเตอร์
ขอบเขต | ขอบเขตปัจจุบัน |
---|---|
เส้นทแยงมุม | อันดับ `r` โดยที่ `r >= 1` |
เค | ออฟเซ็ตแนวทแยง ค่าบวกหมายถึงเส้นทแยงมุมเหนือ, 0 หมายถึงเส้นทแยงมุมหลัก และค่าลบหมายถึงเส้นทแยงมุมย่อย `k` อาจเป็นจำนวนเต็มเดี่ยว (สำหรับเส้นทแยงมุมเดียว) หรือจำนวนเต็มคู่ที่ระบุจุดต่ำสุดและสูงของแถบเมทริกซ์ `k[0]` ต้องไม่ใหญ่กว่า `k[1]` |
numRows | จำนวนแถวของเมทริกซ์เอาต์พุต หากไม่ได้ระบุไว้ op จะถือว่าเมทริกซ์เอาต์พุตเป็นเมทริกซ์จัตุรัสและอนุมานขนาดเมทริกซ์จาก k และมิติด้านในสุดของ "เส้นทแยงมุม" |
numCols | จำนวนคอลัมน์ของเมทริกซ์เอาต์พุต หากไม่ได้ระบุไว้ op จะถือว่าเมทริกซ์เอาต์พุตเป็นเมทริกซ์จัตุรัสและอนุมานขนาดเมทริกซ์จาก k และมิติด้านในสุดของ "เส้นทแยงมุม" |
ค่าช่องว่างภายใน | ตัวเลขที่ใช้เติมพื้นที่นอกแถบแนวทแยงที่ระบุ ค่าเริ่มต้นคือ 0 |
ตัวเลือก | มีค่าแอตทริบิวต์ทางเลือก |
การส่งคืน
- ตัวอย่างใหม่ของ MatrixDiagV3
เอาท์พุท สาธารณะ <T> เอาท์พุท ()
มีอันดับ `r+1` เมื่อ `k` เป็นจำนวนเต็มหรือ `k[0] == k[1]` ให้จัดอันดับ `r` มิฉะนั้น