[PYTHON] Comprendre Concaténer

introduction

Si vous lisez le livre F. Chollet de Keras, il y a une partie qui explique Concatenate Layer. Il est représenté dans l'image ci-dessous, mais c'était une idée rafraîchissante du type de calcul effectué.

image.png

À propos, puisque Concatenate Layer joue un rôle important dans U-NET, Resnet, etc., il n'est pas bon de le laisser sans comprendre Concatenate Layer, alors utilisez un simple tenseur et utilisez Concatenate Layer. J'ai décidé de vérifier le comportement.

image.png Figure Architecture U-Net image.png Figure Bloc ResNet

Compréhension

Dans Excel, j'ai utilisé la fonction Concaténer lors de la concaténation de chaînes, donc j'avais une image de ** attacher plusieurs tableaux sans aucune opération **, mais [Teratail](https: /) /teratail.com/questions/163385) a un diagramme facile à comprendre, je vais donc le présenter ici.

Ici, il y a deux matrices, bleue et verte. Ces matrices sont des tenseurs bidimensionnels (2D), et la forme de ces matrices est (3,3). axe fait référence à la dimension du tenseur. [Comprendre Tensor (2): Shape]![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/9c722160-613a- 1df8-6773-ad133d433db8.png)

axis fait également référence à l'axe de la dimension du tenseur. (Il peut être bon de penser au vecteur lors de l'expression du moment en physique.)

Dans le cas d'un tenseur bidimensionnel, axis = 0 signifie la direction verticale et axis = 1 signifie la direction horizontale.

Cependant, lorsque axis = -1, cela signifie le dernier axe. Prenons une tranche d'une liste Python.

Ensuite, au moment de Concaténer la couche, il est possible de spécifier la direction de connexion.

** (1) Si axis = 0, joindre verticalement. ** **

** (2) Si axis = 1, joindre horizontalement. (Cependant, dans le cas de 2D, axis = -1 a la même signification) **

image.png

Code programme

python



import tensorflow as tf
import numpy as np

#Préparation pour 2D Tensor
x1 = np.array([[1,3,3],
               [5,2,1],
               [0,9,5]])

x2 = np.array([[3,2,3],
               [8,7,4],
               [0,1,1]])

print('x1=',x1)
print('x2=',x2)

Concatenate Layer

Connexion verticale

#Concantenate Layer
# axis = 0,Couplage vertical
y1 = tf.keras.layers.Concatenate(axis=0)([x1,x2])
print('y1=',y1)

Résultat de jointure verticale


y1= tf.Tensor(
[[1 3 3]
 [5 2 1]
 [0 9 5]
 [3 2 3]
 [8 7 4]
 [0 1 1]], shape=(6, 3), dtype=int32)

Connexion horizontale

# axis = 1 (or axis = -1)Accouplement horizontal
y2 = tf.keras.layers.Concatenate(axis=-1)([x1,x2])
print('y2=',y2)

Résultat de la connexion horizontale


y2= tf.Tensor(
[[1 3 3 3 2 3]
 [5 2 1 8 7 4]
 [0 9 5 0 1 1]], shape=(3, 6), dtype=int32)

Résumé

J'ai enfin compris le fonctionnement de Concatenate Layer. (Je ressens.) Cependant, l'orthographe de Concatenate est difficile à penser. (Larmes)

Matériel de référence

  1. Je ne comprends pas la signification de axis = -1 (Python / Keras)
  2. tf.keras.layers.Concatenate
  3. Conseils pour réaliser la structure du réseau envisagée avec keras ~ édition Lambda ~

Recommended Posts

Comprendre Concaténer
Comprendre Python Coroutine
Compréhension approfondie d'Im2col
[Discord.py] Comprendre Cog
Comprendre Tensor (1): Dimension
Comprendre l'auto python
Comprendre TensorFlow avec l'arithmétique