
tf.slice 是tensorflow的切片用法
定义为:
def slice(input_, begin, size, name=None):
"""
:param input_: 输入数据,切片对象
:param begin: 切片的起始位置, begin.size = input_.shape[0].
:param size: 切片后数据的 shape,size[i] 表示在 input_ 的第 i
个维度中想要保留的数据个数
:param name:
:return:
"""
具体而言,切片就是以 begin 为起始点,size 为大小从 input_ 数据中截取一段内容。
以一种更 pythonic 的方式介绍就是,
tf.slice(input_,[0,1], [1,2]) == foo[0:1, 1:3]
所以这里需要注意的点是:
1. begin[i] + size[i] < input_.shape[i]
对应的维度和需要小于给定数据的维度
举个例子:
import tensorflow as tf
var = [[1,2,3],[4,5,6]]
with tf.Session() as sess:
print(sess.run(tf.slice(var, [0,0], [2,1]))) # [[1], [2]]
print(sess.run(tf.slice(var, [0,1], [1,2]))) # [[2 3]]
# begin[0] + size[0] = 1 + 2 > var[0] = 2
print(sess.run(tf.slice(var, [1,1], [2, 2]))) # 错误
上述的错误点在于从 input_的第[1,1] 开始的数据少于2行,从而不能在进行切分下去,所以有如上要求。
2. begin 的最小值是 0,size 的最小值是 1,如果size 设置为 -1, 则表示保留 size 对应维度上的所有数据
最后放上官方的一个例子
t = tf.constant([[[1, 1, 1], [2, 2, 2]],
[[3, 3, 3], [4, 4, 4]],
[[5, 5, 5], [6, 6, 6]]])
tf.slice(t, [1, 0, 0], [1, 1, 3]) # [[[3, 3, 3]]]
tf.slice(t, [1, 0, 0], [1, 2, 3]) # [[[3, 3, 3],
# [4, 4, 4]]]
tf.slice(t, [1, 0, 0], [2, 1, 3]) # [[[3, 3, 3]],
# [[5, 5, 5]]]
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)