最近在用inception结构,然后在网上查了一下tf.concat这个函数,发现中文的博客里面对他的标注是错了,可能是tensorflow更新了,所以就发了这个
首先看一下,tensorflow官网对tfconcat的函数的解释
concat(
values,
axis,
name='concat'
)
这里只有value,axis函数,第一个参数就是你的输入,第二个参数就是你的维度,你从哪个维度上面合并
values=[D0, D1, ... Raxis, ...Dn],D0-Dn就是你要合并的输出
例子如下,注意格式和参数位置
0在2维的矩阵是堆叠,1是合并相同维度的行,t1 = [[1, 2, 3], [4, 5, 6]] #这是一个2*3的矩阵 t2 = [[7, 8, 9], [10, 11, 12]] #2*3 tf.concat([t1, t2], 0) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] tf.concat([t1, t2], 1) ==> [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]
下面是一个三维的数组,假设第一个是x,第二个是y
tf.concat([x,y],0)的结果是[[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] [[[ 2 3 4 5] [ 6 7 8 9] [10 11 12 13]] [[14 15 16 17] [18 19 20 21] [22 23 24 25]]]
[[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]] [[ 2 3 4 5] [ 6 7 8 9] [10 11 12 13]] [[14 15 16 17] [18 19 20 21] [22 23 24 25]]]
从图像的角度理解,这是在图像维度上面的堆叠,[[]]是一个维度。
tf.concat([x,y],1)的结果
[[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [ 2 3 4 5] [ 6 7 8 9] [10 11 12 13]] [[12 13 14 15] [16 17 18 19] [20 21 22 23] [14 15 16 17] [18 19 20 21] [22 23 24 25]]]
这是在像素上的堆叠
tf.concat([x,y],2)的结果是
[[[ 0 1 2 3 2 3 4 5] [ 4 5 6 7 6 7 8 9] [ 8 9 10 11 10 11 12 13]] [[12 13 14 15 14 15 16 17] [16 17 18 19 18 19 20 21] [20 21 22 23 22 23 24 25]]]
这个是空间上的堆叠,从原来的两个2*3*4变成了2*3*8,相当于8维的空间
最后还有一个tf.concat([x,y],3)这个是通道数量的堆叠,比如2个卷积后的矩阵是35*35*60,那么堆叠后是35*35*120