본문 바로가기
Python

[Keras] Sequential Model

by Henry Cho 2022. 7. 19.
728x90

Sequential Model


포스트 난이도: HOO_Middle

 

[Notice] 포스트 난이도에 대한 설명

안녕하세요, HOOAI의 Henry입니다. Bro들의 질문에 대한 내용을 우선적으로 포스팅이 되다 보니 각각의 포스트에 대한 난이도가 달라서 난이도에 대한 부분을 작성하면 좋겠다는 의견을 들었습니다

whoishoo.tistory.com


# Keras

Sequential model은 Keras, 또는 케라스에서 사용되는 기능 중 하나이다.

케라스(Keras)는 파이썬 언어 기반으로 사용되는 라이브러리 중 하나이며,  Open source로 제공되는 신경망 라이브러리이다.

케라스 라이브러리는 Tensorflow를 같이 사용하여 비교적 쉽고 간단하게 Deep learning model를 구현할 수 있다는 점에서 많이 사용되는 라이브러리이다.

따라서 Keras를 사용하기 위해서는 Keras와 같이 Tensorflow도 import 해줘서 같이 사용한다.

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# Sequential model

Sequential model은 Layer stack에 사용되는 모델이며, 하나의 input tensor와 output tensor가 존재하는 모델에 해당한다.

Sequential model이라는 단어의 뜻에서 유추해볼 수 있듯이 순차적으로 stack 되어 있는 모델에 해당한다.

따라서 Sequential model에 있어서 다중입력(Multiple inputs or multiple input tensors) 또는 다중 출력(Multiple outputs or multiple output tensors)이 있을 경우 해당 모델에는 적합하지 않다.

또는 모델이 아닌 모든 레이어에 마찬가지로 다중 입력이나 다중 출력이 있어도 안된다.

레이어를 공유해서는 안되며 다중 분기 모델과 같은 비선형 토폴로지(Non-linear topology)도 해당 모델에서는 적합하지 않다.

Sequential model에는 레이어로 나타내서 작성하며, Dense, BatchNormalization, Dropout 등의 기능을 레이어를 나타내는데 같이 사용한다.

아래와 같이 Keras에서 Sequential model을 사용할 수 있다.

참고로 각각의 Parameter들이 대문자를 사용하기 때문에 유의할 필요가 있다.

필자도 가끔 오타로 인해 소문자로 표기를 해놓고 컴파일을 돌렸을 때 문제를 찾아 헤매는 경우가 종종 있다.

model = keras.Sequential([
    layers.BatchNormalization(input_shape=input_shape),
    layers.Dense(256, activation='relu'),
    layers.BatchNormalization(),
    layers.Dropout(0.3),
    layers.Dense(256, activation='relu'),
    layers.BatchNormalization(),
    layers.Dropout(0.3),
    layers.Dense(1, activation = 'sigmoid')
])

# Sequential model 예제

위의 예제는 Dense, BatchNormalization, Dropout을 모두 사용한 예제이며, 간단한 Sequential model 예제를 살펴보도록 하자.

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential(
    [
        layers.Dense(1, activation="relu"),
        layers.Dense(2, activation="relu"),
        layers.Dense(3),
    ]
)

model.layers

위의 예제는 Sequential model의 간단한 예제이다.

Dense에 대해서는 다음 포스트에서 구체적으로 알아볼 예정이기에 간단하게 설명하면 Sequential model에 특징과 어떻게 operation이 되는지를 나타내 주는 class에 해당한다.

해당 예제에서는 Dense class안에 2가지 operation 특징만을 담고 있지만 그 외에도 10가지가량의 operation 특징을 나타낼 수 있다.

우선 첫 번째 숫자는 output space를 나타내며 두 번째에 있는 activation은 Rectifier 또는 ReLU 함수를 나타내고 있다.

Rectified Linear Unit은 Deep learning model에서 정말 많이 사용되는 일반적인 방식 중 하나이다.

Anyway, Sequential model에만 집중해서 보도록 하자.

우선 Sequential model은 괄호와 대괄호를 사용하여 나타내기 때문에  keras.Seuqential([])와 같이 작성된다.

또한 stack의 특성을 고려하고 가독성을 높이기 위해 각 줄의 layer를 한 줄씩 나타내 주는 것이 코드 작성에 있어서 좋다.

model이 keras.Sequential로 정의되어 있기 때문에 model.layers들로 sequential model 안의 layers들을 출력해줄 수 있다.


 

728x90

'Python' 카테고리의 다른 글

[Keras] Dense layer, Dense class  (0) 2022.07.21
[Keras] Batch Normalization  (0) 2022.07.21
[Pandas] head() function  (0) 2022.07.19
[Python] Numpy Shape()  (0) 2022.07.12
[PyTorch] 데이터셋과 데이터로더 (Dataloader and Dataset)  (0) 2022.07.12

댓글