Ich habe mir kürzlich die Modalfusion angesehen und die Funktion concatenate () in Keras verwendet. Ich habe vorher nicht verstanden, was der Achsenparameter bedeutet. Nach einigen Recherchen habe ich es endlich herausgefunden.
Schauen Sie sich zuerst den Code an
import numpy as np
import keras.backend as K
import tensorflow as tf
a = K.variable(np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]))
b = K.variable(np.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]]))
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])
c5 = K.concatenate([a, b],axis=-1)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print('***************')
print(a.shape,b.shape)
print('***************')
print('*****C1******',c1.shape)
print(sess.run(c1))
print()
print('*****C2******',c2.shape)
print(sess.run(c2))
print()
print('*****C3******',c3.shape)
print(sess.run(c3))
print()
print('*****C4******',c4.shape)
print(sess.run(c4))
print('*****C5******',c5.shape)
print(sess.run(c5))
Schauen Sie sich den Ausgabeeffekt an:
Achse = n bedeutet Spleißen aus der n-ten Dimension. Für eine dreidimensionale Matrix kann der Wert der Achse [-3, -2, -1, 0, 1, 2] sein.
Achse = -2, was bedeutet, dass von der vorletzten Dimension gespleißt wird. Für eine dreidimensionale Matrix entspricht dies Achse = 1.
Achse = -1, was bedeutet, dass aus der vorletzten Dimension gespleißt wird. Für eine dreidimensionale Matrix entspricht dies Achse = 2.
Verstehe einfach:
Es mag komplizierter sein, das Bild zu verstehen, aber wenn es aus mathematischer Sicht sehr einfach ist, wie im obigen Beispiel
Zwei (2,2,2) (2,2,2) Arrays werden zusammengeführt.
- Die Fusion der ersten Dimension ist (4,2,2), dh Achse = 0
- Die Fusion der zweiten Dimension ist (2,4,2), dh Achse = 1
- Die Fusion der dritten Dimension ist (2,2,4), dh Achse = 2
Verweise
[1] https://blog.csdn.net/leviopku/article/details/82380710
[2] https://zhuanlan.zhihu.com/p/58672698