这是原始的数据,假设是一个图片
(
h
e
i
g
h
t
,
w
i
d
t
h
,
c
h
a
n
n
e
l
)
(height,width,channel)
(height,width,channel),可以看作是一个三维数组
从每行的方向看去,第一维有height个元素,第二维有width个元素,第三维有channel个元素。
从第三维的角度看,最后得到的只有三行。
割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割
第一个函数是tf.concat(values,axis,name='concat')
,数据拼接,如果axis=0,也就是一行一行放进去就行了,
这个是axis=1,也就是按列拼接
这个是axis=2,也就是按通道拼接
一开始觉得这个维度很难理解,后来发现只要按照对应的维度拼接就可以了。第0维包含着第1维,第一维包含着第2维,拼接第一维的时候,我们只需要将第0维的括号不变,第一维包含的内容不变,然后一个个拼接起来就行了。用numpy的concatenate
做例子
a = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[1,4,7]]])
b = a
# a.shape -> (2, 2, 3)
c=np.concatenate((a,b),axis=0) # c.shape -> (2+2,2,3)
"""
Out :
array([[[1, 2, 3],
[4, 5, 6]],
[[7, 8, 9],
[1, 4, 7]],
[[1, 2, 3],
[4, 5, 6]],
[[7, 8, 9],
[1, 4, 7]]])
"""
#稍作润色
"""
[[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [1, 4, 7]],
-----------------------拼接
[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [1, 4, 7]]]
"""
c=np.concatenate((a,b),axis=1) #c.shape -> (2, 4, 3)
"""
Out:
array([[[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]],
[[7, 8, 9],
[1, 4, 7],
[7, 8, 9],
[1, 4, 7]]])
"""
#稍作润色
"""
[[[1, 2, 3],[4, 5, 6],[1, 2, 3],[4, 5, 6]],
[[7, 8, 9],[1, 4, 7],[7, 8, 9],[1, 4, 7]]]
"""
c=np.concatenate((a,b),axis=2)
"""
array([[[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]],
[[7, 8, 9, 7, 8, 9],
[1, 4, 7, 1, 4, 7]]])
"""
然后第二个函数tf.slice( input_, begin,size,name=None)
,begin
和size
都是Tensor
,begin[i]
是从本维度的哪里开始,size[i]
是本维度取出的大小。比如我们要取出某个图片的第一行
first_row = tf.slice(image, [0, 0, 0], [1, -1, -1]) # -1 is first row,all col,all channel
然后可以进行行拼接
image = tf.concat([first_row, image], 0)