在本教程中 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,我很遗憾。
有谁知道?
答案 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将在运行时确定该值(由于?
未定义的形状而无法生成)。
image
由3
推断。提取切片的每个元素的深度都为image
。