[PYTHON] Verketten verstehen

Einführung

Wenn Sie Keras 'F. Chollet-Buch lesen, gibt es einen Teil, der die verkettete Ebene erklärt. Es ist im Bild unten dargestellt, aber es war eine erfrischende Vorstellung davon, welche Art von Berechnung dabei durchgeführt wurde.

image.png

Übrigens, da die Verkettungsschicht eine wichtige Rolle in U-NET, Resnet usw. spielt, ist es nicht gut, sie zu verlassen, ohne die Verkettungsschicht mehr zu verstehen. Verwenden Sie also einen einfachen Tensor und verwenden Sie die Verkettungsschicht. Ich beschloss, das Verhalten zu überprüfen.

image.png Abbildung U-Net-Architektur image.png Abbildung ResNet-Block

Verstehen

In Excel habe ich beim Verketten von Zeichenfolgen die Funktion Verketten verwendet, sodass ich ein Bild von ** Anhängen mehrerer Arrays ohne Operation ** hatte, aber von [Teratail](https: /) /teratail.com/questions/163385) hat ein leicht verständliches Diagramm, daher werde ich es hier vorstellen.

Hier gibt es zwei Matrizen, blau und grün. Diese Matrizen sind zweidimensionale (2D) Tensoren, und die Form dieser Matrizen ist (3,3). Achse bezieht sich auf die Abmessung des Tensors. [Tensor verstehen (2): Form]![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/9c722160-613a- 1df8-6773-ad133d433db8.png)

Achse bezieht sich auch auf die Achse der Tensordimension. (Es kann gut sein, an den Vektor zu denken, wenn man den Moment in der Physik ausdrückt.)

Bei einem zweidimensionalen Tensor bedeutet Achse = 0 die vertikale Richtung und Achse = 1 die horizontale Richtung.

Wenn jedoch Achse = -1 ist, bedeutet dies die letzte Achse. Betrachten Sie einen Ausschnitt aus einer Python-Liste.

Zum Zeitpunkt der Verkettungsebene ist es dann möglich, die Verbindungsrichtung anzugeben.

** (1) Wenn Achse = 0, vertikal verbinden. ** ** **

** (2) Wenn Achse = 1, horizontal verbinden. (Im Fall von 2D hat Achse = -1 jedoch dieselbe Bedeutung) **

image.png

Programmcode

python



import tensorflow as tf
import numpy as np

#Vorbereitung für 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

Vertikale Verbindung

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

Vertikales Verknüpfungsergebnis


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)

Horizontale Verbindung

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

Ergebnis der horizontalen Verbindung


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)

Zusammenfassung

Endlich habe ich die Funktionsweise von Concatenate Layer verstanden. (Ich fühle.) Die Schreibweise von Concatenate fällt jedoch schwer ein. (Tränen)

Referenzmaterial

  1. [Ich verstehe die Bedeutung von axis = -1 (Python / Keras) nicht]](https://teratail.com/questions/163385)
  2. tf.keras.layers.Concatenate
  3. Tipps zur Realisierung der mit keras ~ Lambda edition ~ vorgesehenen Netzwerkstruktur

Recommended Posts

Verketten verstehen
Im2col gründliches Verständnis
[Discord.py] Cog verstehen
Tensor verstehen (1): Dimension
Python selbst verstehen
TensorFlow mit Arithmetik verstehen