两个函数都是从张量中提取切片
slice
tf.slice(input,begin,size,name=None)
参数说明:
input:输入数据
begin:是一个list,切片索引,对应各个维度,例如[0,1,2],三个维度分别冲0、1、2开始
size:是一个list,对应begin中指定位置开始,取多少元素
举个栗子
import tensorflow as tf
import numpy as np
#一个4x2x3的tensor
input = tf.constant([[[1, 1, 1], [2, 2, 2]],
[[3, 3, 3], [4, 4, 4]],
[[5, 5, 5], [6, 6, 6]],
[[7, 7, 7], [8, 8, 8]],
])
out=tf.slice(input, [2, 0, 0], [2, 1, 2])
print(out)
输出:
tf.Tensor(
[[[5 5]]
[[7 7]]], shape=(2, 1, 2), dtype=int32)
第一个维度从2开始取2个,即变为
[[[5, 5, 5], [6, 6, 6]],
[[7, 7, 7], [8, 8, 8]]]
第二个维度从 0开始取1个,即变为
[[[5, 5, 5]],
[[7, 7, 7]]]
第三个维度从0开始取2个,即变为
[[[5, 5]],
[[7, 7]]]
strided_slice
tf.strided_slice(
input_, begin, end, strides=None, begin_mask=0, end_mask=0, ellipsis_mask=0,
new_axis_mask=0, shrink_axis_mask=0, var=None, name=None)
参数解释:
input_:输入数据
begin:是一个list,切片索引,对应各个维度
end:是一个list,终止切片索引(开区间),对应各个维度终止索引
strides:各个维度进行切片的步长,不设置即为1
举个栗子,和前面一样
import tensorflow as tf
import numpy as np
#一个4x2x3的tensor
input = tf.constant([[[1, 1, 1], [2, 2, 2]],
[[3, 3, 3], [4, 4, 4]],
[[5, 5, 5], [6, 6, 6]],
[[7, 7, 7], [8, 8, 8]],
])
out = tf.strided_slice(input, [1, 0, 0], [4, 1, 2],[2,1,1])
print(out)
输出:
tf.Tensor(
[[[3 3]]
[[7 7]]], shape=(2, 1, 2), dtype=int32)
第一个维度从1开始 区间[1,4),步长为2,切片为
[[[3, 3, 3], [4, 4, 4]],
[[7, 7, 7], [8, 8, 8]]]
第二个维度从0开始 区间[0,1),步长为1,切片为
[[[3, 3, 3]],
[[7, 7, 7]]]
第二个维度从0开始 区间[0,2),步长为1,切片为
[[[3, 3],],
[[7, 7]]]