tensorflow 函数解读系列之 tf.slice()

tensorflow 函数解读系列之 tf.slice(),第1张

tensorflow 函数解读系列之 tf.slice()

 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]]]

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/3972926.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-10-21
下一篇2022-10-21

发表评论

登录后才能评论

评论列表(0条)

    保存