我將解釋與例子來支持你的代碼,所以我創造了一些案件,但首先我將解釋tf.slice(input, begin, size) parametters:
input
是裁判張量。
begin
是從片開始的索引。
size
是切片的偏移量。
所以tf.slice
作品從input
選擇子張量始於begin
索引和結束在begin + size
,治療begin
和size
作爲索引向量。下面的例子將闡明這一點:
batch = tf.constant([
[#First image
[
[0.0,10.0],
[1.0,11.0]
],
[
[3.0,33.0],
[4.0,44.0]
]
],
[#Second image
[
[5.0,55.0],
[6.0,66.0]
],
[
[7.0,77.0],
[8.0,88.0]
]
]
])
slice1 = tf.slice(batch,[0,0,0,0], [1,1,1,1])
slice2 = tf.slice(batch,[0,1,0,0], [1,1,2,2])
slice3 = tf.slice(batch,[1,1,1,0], [1,1,1,2])
slice4 = tf.slice(batch,[0,0,0,0], [2,2,2,2])
sess = tf.InteractiveSession()
print("slice1: \n" + str(slice1.eval()) + "\n")
print("slice2: \n" + str(slice2.eval()) + "\n")
print("slice3: \n" + str(slice3.eval()) + "\n")
print("slice4: \n" + str(slice4.eval()) + "\n")
在這種情況下的輸出是:
slice1:
[[[[ 0.]]]]
slice2:
[[[[ 3. 33.]
[ 4. 44.]]]]
slice3:
[[[[ 8. 88.]]]]
slice4:
[[[[ 0. 10.]
[ 1. 11.]]
[[ 3. 33.]
[ 4. 44.]]]
[[[ 5. 55.]
[ 6. 66.]]
[[ 7. 77.]
[ 8. 88.]]]]
slice1
選擇張量的第一個元素,因爲它開始[0,0,0,0]
並挑選只有一個元素。
slice2
選擇張量的第一個元素,因爲它在[0,1,0,0]
上開始,並在兩個第一維中選取1個元素,在三維和四維中選取2個。
slice3
選擇張量的第一個元素,因爲它開始[1,1,1,0]
並挑選在三個第一維度2中的最後只有1元件和。
slice4
選擇張量的所有的元件,因爲它開始[0,0,0,0]
和兩個元件由尺寸,因此它覆蓋了所有的張量
注意,尺寸的去數目在所有的幻燈片相同的。如果你只用一個元素去除尺寸,你可以使用tf.squeeze。
感謝您的詳細解釋 – rida