张量为负的张量流切片

时间:2016-11-02 19:39:49

标签: tensorflow

在本教程中     http://learningtensorflow.com/lesson4/ 它在一些图像数据上调用张量流切片方法     raw_image_data = mpimg.imread(filename)

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,我很遗憾。

有谁知道?

2 个答案:

答案 0 :(得分:3)

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

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

这并不意味着-1,但意味着一切

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

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

在以下行中:

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

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

从形状为image的{​​{1}}中提取切片。

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

(3000, ?, 3)表示返回的切片将具有3000个元素,这些元素是从3000中提取的,位于维度image中的1000位置之后。

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

image3推断。提取切片的每个元素的深度都为image