# ch4 - Basic Keras Layers

korkite·2022년 7월 1일
0

목록 보기
3/11

## Linear Based Layers

### Dense Layer (Fully Connected Layer)

tf.keras.layers.Dense(
units, activation=None, use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros', kernel_regularizer=None,
bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
bias_constraint=None, **kwargs
)

단순한 Linear Layer로 y = wx + b 의 단순 연산을 수행

## Convolution Based Layers

Convolution 연산을 수행하는 레이어이다. 컨볼루션 연산을 모른다면 구글을 참고!

### 1. 1D Convolution Layer

tf.keras.layers.Conv1D(
filters, kernel_size, strides=1, padding='valid',
data_format='channels_last', dilation_rate=1, groups=1,
activation=None, use_bias=True, kernel_initializer='glorot_uniform',
bias_initializer='zeros', kernel_regularizer=None,
bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
bias_constraint=None, **kwargs
)

### 2. 2D Convolution Layer

tf.keras.layers.Conv2D(
filters, kernel_size, strides=(1, 1), padding='valid',
data_format=None, dilation_rate=(1, 1), groups=1, activation=None,
use_bias=True, kernel_initializer='glorot_uniform',
bias_initializer='zeros', kernel_regularizer=None,
bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
bias_constraint=None, **kwargs
)

### 3. 3D Convolution Layer

tf.keras.layers.Conv3D(
filters, kernel_size, strides=(1, 1, 1), padding='valid',
data_format=None, dilation_rate=(1, 1, 1), groups=1, activation=None,
use_bias=True, kernel_initializer='glorot_uniform',
bias_initializer='zeros', kernel_regularizer=None,
bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
bias_constraint=None, **kwargs
)

### 4. ConvTranspose (UpConv, DeConv)

Convolution을 반대로 해주는 것이다. 오토인코더의 디코더 부분, GAN의 Generator, Unet 등에 활용된다.

#### 1. Upconv 1D

tf.keras.layers.Conv1DTranspose(
filters, kernel_size, strides=(1, 1), padding='valid', ...
)

#### 2. Upconv 2D

tf.keras.layers.Conv2DTranspose(
filters, kernel_size, strides=(1, 1), padding='valid', ...
)

#### 3. Upconv 3D

tf.keras.layers.Conv3DTranspose(
filters, kernel_size, strides=(1, 1), padding='valid', ...
)

### Upsampling VS ConvTranspose

두개의 차이가 햇갈린다면 아래의 인용구를 참고!

UpSampling2D is just a simple scaling up of the image by using nearest neighbour or bilinear upsampling, so nothing smart. Advantage is it's cheap. Conv2DTranspose is a convolution operation whose kernel is learnt (just like normal conv2d operation) while training your model.
= Upsampling은 단순히 스케일 업해서 만든걸로 파라미터 X / ConvTranspose는 실제 역-컨볼루션 연산으로 파라미터 O

## Pooling Layers

### 1. Maxpooling (1D ~ 3D)

tf.keras.layers.MaxPool2D(
pool_size=(2, 2), strides=None, padding='valid'
)

### 2. Avgpooling (1D ~ 3D)

tf.keras.layers.AveragePooling2D(
pool_size=(2, 2), strides=None, padding='valid'
)

### 3. GlobalAveragePooling (= Flatten 대신 활용하는 레이어)

tf.keras.layers.GlobalAveragePooling2D()

각 피처맵을 하나로 요약해준다. 이를 통해 Flatten을 대체할 수 있으며, 피처사이즈를 줄여서 오버피팅을 방지한다. 이 레이어는 보통 FC layer를 대체하여 사용됨으로, 이 뒤에는 FC layer를 넣지 않고 Output layer만을 넣어준다. (ResNet 논문 참고)

## Recurrent Neural Net Based Layers

입력과 출력을 시퀀스 단위로 처리하는 모델.

### 1. RNN

tf.keras.layers.RNN(
cell, return_sequences=False, return_state=False, go_backwards=False,
)

### 2. GRU

tf.keras.layers.GRU(
units, activation='tanh', recurrent_activation='sigmoid',
use_bias=True, dropout=0.0, recurrent_dropout=0.0, return_sequences=False, return_state=False,
go_backwards=False,
)

### 3. LSTM

tf.keras.layers.LSTM(
units, activation='tanh', recurrent_activation='sigmoid',
use_bias=True, dropout=0.0, recurrent_dropout=0.0, return_sequences=False, return_state=False,
go_backwards=False,
)

## Layers etc.

### 1. Input Layer

tf.keras.layers.Input(
input_shape=None
)

Funtional API 사용시 Input 텐서를 정의하기 위한 레이어

### 2. Flatten

tf.keras.layers.Flatten()

LSTM, CONV에서 나온 피쳐맵을 Dense에 넣기 전 펴주기 위한 레이어

### 3. Dropout

tf.keras.layers.Dropout(
rate
)

특정 비율만큼 셀을 꺼서 훈련이 되지 않도록 하여 오버피팅을 방지하는 레이어

### 4. Bidirectional

tf.keras.layers.Bidirectional(
layer
)

양방향 LSTM을 만들어주기 위한 것으로, 앞 뒤의 sequence를 참조할 수 있도록 해줌

### 5. Concatenate

tf.keras.layers.Concatenate(
axis=-1
)

두 개의 레이어를 결합해준다. 한 개의 shape은 일치해야 결합이 가능함.

### 6. Add, Multiply

tf.keras.layers.Add()
tf.keras.layers.Multiply()

두 레이어 간의 곱샘, 덧샘 등의 연산을 수행할 수 있도록 해줌

### 7. Dot

tf.keras.layers.Dot(
axes,
)

두 레이어 출력 간의 행렬연산을 수행하도록 해줌.

💧 Constant dropping wears away a stone. 🪨