【问题标题】:tensorflow slice with negative size具有负大小的张量流切片
【发布时间】:2016-11-03 04:04:23
【问题描述】:

在本教程中 http://learningtensorflow.com/lesson4/ 它在一些图像数据上调用 tensorflow slice 方法 raw_image_data = mpimg.imread(文件名)

image = tf.placeholder("uint8", [None, None, 3])
slice = tf.slice(image, [1000, 0, 0], [3000, -1, -1])

来自切片定义 tf.slice(input_, begin, size, name=None)

我认为它的意思是从像素 1000,0 R 层(在 rgb 之外)开始,取一个大小为 3000、-1 的切片,并减去 -1 层。对于第二个图像维度和 rgb 层,我不知道如何从 0 变为 -1。

有人知道吗?

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    -1 这里相当于“*”或“取该维度中的所有元素”,即根据documentation“如果 size[i] 为 -1,则维度 i 中的所有剩余元素都包含在切片中。”

    换句话说,如果

    x = [[1,2,3],[4,5,6]]
    

    然后

    tf.slice(x, [0, 0], [1, -1])
    

    会回来

    [1 2 3]
    

    【讨论】:

    • 请问为什么不返回 [1 2],因为 slice 调用中只指定了两个维度。
    • [0, 0] 表示我们从第 0 行第 0 列开始切片。[1, -1] 表示对于维度 0(行),取 1 个元素,对于维度 1(列) , 取所有元素。
    • 但是[1 2 3]中的3是维度2,切片调用中没有提到。那么为什么结果会包含维度 2?
    • 索引 [0, 2] 中的值 '3'。 (维度 0 的索引 0,维度 1 的索引 2)。没有维度 2。包含它是因为 size 参数 [1, -1] 中的“-1”表示包含维度 1 的所有元素。 size 参数 [1, -1] 中的“1”表示仅包含 1 行(在维度 0 空间中)。
    【解决方案2】:

    -1 是张量大小定义中的一个特殊值。

    这并不意味着-1,而是意味着一切

    排队

    image = tf.placeholder("uint8", [None, None, 3])
    

    您正在定义一个形状为 (?, ?, 3) 的占位符。

    在下面一行:

    slice = tf.slice(image, [1000, 0, 0], [3000, -1, -1])
    

    您正在定义slice 操作。这个操作意味着:

    image 中提取一个形状为(?, ?, 3) 的切片。

    从位置(1000, 0, 0)开始提取形状为(3000, ?, 3)的切片。

    3000 表示返回的切片将有3000 元素,从image 中提取,在维度0 中的位置1000 之后。

    ? 表示 Tensorflow 将在运行时确定该值(由于image 未定义形状而无法确定)。

    3image 推断。提取切片的每个元素都将具有3 的深度。

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 2019-11-05
      • 2019-03-20
      相关资源
      最近更新 更多