Help us understand the problem. What is going on with this article?

Concatenateの理解

はじめに

KerasのF.Cholletの本を読むと、Concatenate Layerの説明がされている部分がある。下記の絵で表現されているが、この中でどんな演算が行われているかさっぱりしたまなであった。

image.png

ところで、U-NET, ResnetなどにConcatenate Layerが重要な役割をしていることから、これ以上にConcatenate Layerを理解せず放置することは良くない判断で、簡単なテンソルを利用し、Concatenate Layerの挙動を確認することにした。

image.png
図 U-Net アーキテクチャー
image.png
図 ResNetブロック

理解

Excelで、文字列結合の時に、Concatenate関数を使ったことがあったので、何となく複数の配列を何の演算もせず、くっつけるイメージは持っていたが、Teratailにわかりやすい図があったので、ここで紹介する。

ここで、青と緑二つの行列がある。
これらの行列は2次元(2D)テンソルで、これらの行列のShapeは(3,3)である。
axisとは、テンソルの次元(Dimension)を言う。[テンソル(Tensor)の理解(2) : Shape]image.png

axisは、テンソルの次元の軸も指す。(物理でのモーメントを表記するときのベクトルを考えるといいかもしれない。)

2次元テンソルの場合、axis = 0が垂直方向、 axis = 1が水平方向を意味する。

ただし、axis = -1とした場合は、一番最後の軸を意味する。Pythonのリストのスライスを考えるといい。

そして、Concatenate Layerの時、結合方向を指定することが可能である。

(1) axis = 0の場合、垂直方向に結合する。

(2) axis = 1の場合、水平方向に結合する。(ただし、2次元の場合、axis = -1も同じ意味)

image.png

プログラムコード

import tensorflow as tf
import numpy as np

#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 

垂直結合

#Concantenate Layer
# axis = 0, 垂直方向結合
y1 = tf.keras.layers.Concatenate(axis=0)([x1,x2])
print('y1=',y1)
垂直結合結果
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)

水平結合

# axis = 1 (or axis = -1)  水平方向結合
y2 = tf.keras.layers.Concatenate(axis=-1)([x1,x2])
print('y2=',y2)
水平結合結果
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)

まとめ

やっとConcatenate Layerの動作を理解した。(気がする。)
ただし、Concatenateのスペリングがなかなか頭に入らない。(涙)

参考資料

  1. axis=-1の意味がわかりません(Python・Keras)
  2. tf.keras.layers.Concatenate
  3. kerasで頭に描いたネットワーク構造を実現するためのTips ~ Lambda 編 ~
kotai2003
Chief Executive Officer at Tomomi Research Inc. Engineering First!
https://www.wireless-squre.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした