tf.slice详解

tf.slice函数为:

tf.slice(
    input_,
    begin,
    size,
    name=None
)

官网描述为:This operation extracts a slice of size size from a tensor input starting at the location specified by begin

翻译为:从原始输入input数据中选择以begin开始的尺度大小为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]]]

上述结果的来历:begin为[1,0,0],size为[1,1,3],为什么是三个数列表,因为原始数据维度为3。首先从起始位置开始[1,0,0],第一位1,表示从axis=0的第二个位置开始,及从[[[3,3,3],[4,4,4]]]开始,尺度[1,1,3]的第一位为1,表示axis=0选择一个尺度的数据,即begin和size第一位共同作用,得到第一步数据[[[3,3,3],[4,4,4]]];

以上述结果为基础[[[3,3,3],[4,4,4]]]

第二位0,表示从axis=1的第1个位置开始,及从[[[3,3,3]]]开始,尺度[1,1,3]的第二位为1,表示axis=1选择一个尺度的数据,即begin和size第二位共同作用,得到第二步数据[[[3,3,3]]];

以上述结果为基础[[[3,3,3]]]

第三位0,表示从axis=2的第1个位置开始,及从[[[3]]]开始,尺度[1,1,3]的第三位为3,表示axis=2选择三个尺度的数据,即begin和size第三位共同作用,得到第二步数据[[[3,3,3]]]。

程序示例

    import tensorflow as tf
    
    t = tf.constant([[[1, 1, 1], [2, 2, 2]],
                 [[3, 3, 3], [4, 4, 4]],
                 [[5, 5, 5], [6, 6, 6]]])
    sess = tf.Session()
    data = tf.slice(t, [1,0,0], [1,1,3])
    print(sess.run(data))
    data = tf.slice(t, [1, 0, 0], [2, 2, 3])
    print(sess.run(data))

输出结果

[[[3 3 3]]]

[[[3 3 3]
  [4 4 4]]
 [[5 5 5]
  [6 6 6]]]

常见用途

当把几个尺度不同的数据concat时,可以选择这个函数作为处理。比如一个尺度为4*56*56*512和4*48*48*512的数据concat时,因为尺度不一样,所以需要从第一个数据选择一部分出来和后者concat。

现在可以这样做,裁剪数据1尺度为4*48*48*512

x1_crop = tf.slice(x1, [0,4,4,0], [-1, 48, 48, -1])

第一维选择所有数,第二维和第三维选择从第4位开始的48尺度,第四维选择所有数。此时数据维度为[4*48*48*512],所以可以concat。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值