在知乎上写小问题的记录一般是没什么人点赞的,而又因为没有阅读数的显示,经常会感觉这篇文章就gg了,但还是一点点地记录学习的过程。
自从Lab转为以Deep Learning为主之后,就经常会看到如DenseNet用conatenate操作或者某些Net用add操作,所以想来记录一下concatenate操作做了啥。
Neural Network中的concatenate一般就是用来将特征联合,多个卷积特征提取框架提取的特征融合或者是讲输出层的信息进行融合[2]。
那这个联合是什么意思呢?
其实就是维度的一个联合,以Keras.concatenate()为例子:
import numpy as np
import keras.backend as K
import tensorflow as tf
a = K.variable(np.array([[[1, 2], [2, 3]], [[4, 4], [5, 3]]]))
b = K.variable(np.array([[[7, 4], [8, 4]], [[2, 10], [15, 11]]]))
c1 = K.concatenate([a, b], axis=0)
c2 = K.concatenate([a, b], axis=1)
c3 = K.concatenate([a, b], axis=2)
#试试默认的参数
c4 = K.concatenate([a, b])
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run(c1))
print()
print(sess.run(c2))
print()
print(sess.run(c3))
print()
print(sess.run(c4))
以上的axis=0表示列维,1表示行维,沿着通道维度连接两个张量。
输出的结果会是这样的:
[[[ 1. 2.]
[ 2. 3.]]
[[ 4. 4.]
[ 5. 3.]]
[[ 7. 4.]
[ 8. 4.]]
[[ 2. 10.]
[15. 11.]]]
[[[ 1. 2.]
[ 2. 3.]
[ 7. 4.]
[ 8. 4.]]
[[ 4. 4.]
[ 5. 3.]
[ 2. 10.]
[15. 11.]]]
[[[ 1. 2. 7. 4.]
[ 2. 3. 8. 4.]]
[[ 4. 4. 2. 10.]
[ 5. 3. 15. 11.]]]
[[[ 1. 2. 7. 4.]
[ 2. 3. 8. 4.]]
[[ 4. 4. 2. 10.]
[ 5. 3. 15. 11.]]]
另外,除联合维度之外其它维度都必须相等。
先写到这里吧,感兴趣的话可以看这篇文章keras中的K.concatenate()详解
参考文献:
[1]:keras中的K.concatenate()详解
[2]:神经网络中concatenate和add层的不同