Tensorfow2를 활용해서 모델을 작성하는 방법에는 크게 Sequential, Functional, Model Subclassinf 3가지가 존재한다.
1. Tensorflow2 Sequential Model
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential()
model.add(__넣고싶은 레이어__)
model.add(__넣고싶은 레이어__)
model.add(__넣고싶은 레이어__)
model.fit(x, y, epochs=10, batch_size=32)
입력부터 출력까지 레이어를 sequential하게 add해서 쌓아나가는 방식으로 초보자가 접근하기 매우 쉬우나, 모델의 입력과 출력이 여러개인 경우는 적합하지 않은 모델링 방식이다.(입력1, 출력1을 전제)
2. Tensorflow2 Functional API
import tensorflow as tf
from tensorflow import keras
inputs = keras.Input(shape=(__원하는 입력값 모양__))
x = keras.layers.__넣고싶은 레이어__(관련 파라미터)(input)
x = keras.layers.__넣고싶은 레이어__(관련 파라미터)(x)
outputs = keras.layers.__넣고싶은 레이어__(관련 파라미터)(x)
model = keras.Model(inputs=inputs, outputs=outputs)
model.fit(x,y, epochs=10, batch_size=32)
Sequential 모델과 다르게 keras.Model을 사용한다. Functional API를 사용하면 Sequential Model을 활용하는 것보다 자유로운 모델링을 진행할 수 있다.
함수형으로 모델을 구성한다는 것은 입력과 출력을 규정함으로써 모델 전체를 규정한다는 의미이다. input을 원하는 만큼 규정하고 레이어들을 엮어 Output까지 규정하면 모델이 생성된다.
3. Tensorflow2 Subclassing
import tensorflow as tf
from tensorflow import keras
class CustomModel(keras.Model):
def __init__(self):
super(CustomModel, self).__init__()
self.__정의하고자 하는 레이어__()
self.__정의하고자 하는 레이어__()
self.__정의하고자 하는 레이어__()
def call(self, x):
x = self.__정의하고자 하는 레이어__(x)
x = self.__정의하고자 하는 레이어__(x)
x = self.__정의하고자 하는 레이어__(x)
return x
model = CustomModel()
model.fit(x,y, epochs=10, batch_size=32)
가장 자유로문 모델링을 진행할 수 있다. Functional한 접근과 본질적으로는 차이가 없는데 이는 keras.Model을 상속받은 모델 클래스는 만드는 것이기 때문이다.
위와같이 __init__이라는 메서드 안에서 레이어 구성을 정의하고, call() 메서드 안에서 레이어간 forward propagation을 구현하게 된다.
'Aiffel > Fundamental' 카테고리의 다른 글
Regularization, Normalization (0) | 2022.02.15 |
---|---|
seq2seq(Sequence to Sequence) (0) | 2022.01.27 |
텍스트 요약(Text Summarization) (0) | 2022.01.27 |
Softmax 함수와 Cross Entropy (0) | 2022.01.24 |
로지스틱 회귀분석(Logistic Regression) (0) | 2022.01.24 |
댓글