我将通过示例来解释您的代码,因此我创建了一些案例,但首先,我将向您解释tf.slice(input, begin, size)参数:
>输入是对张量的引用.
> begin是切片的索引开始.
> size是切片的偏移量.
因此,tf.slice的工作是从输入中选择一个从Tensor索引开始并以Begin大小终止的子Tensor,将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:
" + str(slice1.eval()) + "
")
print("slice2:
" + str(slice2.eval()) + "
")
print("slice3:
" + str(slice3.eval()) + "
")
print("slice4:
" + str(slice4.eval()) + "
")
在这种情况下的输出是:
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]开始,并在两个第一维中选择一个元素,并在三个和四个维中选择2个元素.
> slice3选择Tensor的第一个元素,因为它从[1,1,1,0]开始,并且在前三个维度中仅选择一个元素,在最后一个维度中选择2.
> slice4选择Tensor的所有元素,因为它以[0,0,0,0]开头,并且按维度两个元素,因此它覆盖了所有Tensor
请注意,所有幻灯片中的维数均相同.如果仅用一个元素删除尺寸,则可以使用tf.squeeze.