Keras 모델 생성 방법(Keras models)
Keras 모델 생성 방법(Keras models)
케라스의 구현 방식에는 Sequential API, Functional API, Subclassing API 총 3가지 구현 방식이 존재합니다.
오늘은 각 방식을 사용하며 모델을 생성하는 방법을 공부해 봅니다.
1. Sequential API를 사용한 모델 생성
- Sequential() 함수로 model 박스를 생성 후 add() 함수로 레이어들을 선택해 모델에 넣어준다.
직관적이고 ML 책에서 많이 사용되는 방식이다.
- 장점 : 단순하게 층을 샇는 방식으로 쉽고 사용하기가 간단하다.
- 단점 : 다수의 입출력을 가진 모델 또는 층 간의 연결이나 덧셈 같은 연산 모델 구현에는 적합하지 않다.
# 예제 코드
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, activate='relu', input_shape=(784,)),
Dense(10, activate='softmax')
])
model = Sequential()
model.add(Dense(32, activate='relu', input_dim=784))
model.add(Dense(10, activate='softmax'))
2. Functional API를 이용한 모델 생성
- input Layer를 변수에 정의한다.
- Dense Layer를 선언시에는 이전 레이어의 변수 정보를 레이어 선언 뒤에 ()가로로 넣어줘야한다.
- Model Class 방식은 input layer를 input 함수 로, Dense layer를 output 함수 로 넣어 모델을 만든다.
multi input과 multi output의 정의가 용이하다.
- 장점 : 구현하기 어려운 복잡한 모델들을 구현할 수 있다.
- 단점 : 입력층을 모델의 앞단에 정의해야 한다.
# 예제 코드
inputs = Input(shape=(1,)) # <-- 해당 부분
output = Dense(1, activation='linear')(inputs)
linear_model = Model(inputs, output)
sgd = optimizers.SGD(lr=0.01)
linear_model.compile(optimizer=sgd, loss='mse', metrics=['mse'])
linear_model.fit(X, y, epochs=300)
3. Subclassing API로 인공지능 망 만들기
- init 함수로 클래스의 매개변수를 지정한다.
- 매개변수 정보를 이용해 layer들을 선언한다
- call 같은 특정 함수로 모델을 반환한다.
모델 레이어를 세세하게 수정하고, 모델을 여러번 만들어야 하는 연구등에 사용된다.
- 장점 : Functional API로도 구현 안되는 모델들도 구현이 가능하다.
- 단점 : 객체 지향 프로그래밍에 익숙해야 하고 코드 사용이 까다롭다.
# 예제 코드
class SimpleMLP(keras.Model):
def __init__(self, num_classes=10):
super(SimpleMLP, self).__init__(name='mlp')
self.num_classes = num_classes
self.dense1 = keras.layers.Dense(32, activation='relu')
self.dense2 = keras.layers.Dense(num_classes, activation='softmax')
def call(self, inputs):
x = self.dense1(inputs)
return self.dense2(x)
model = SimpleMLP()
model.compile(...)
model.fit(...)
인공지능은 인류에게 작동하고 있는 가장 심오한 것 중 하나이다.
A.I is one of the most profound things that works for mankind.
불이나 전기보다 더 심오하다. -순다르 피차이(Sundar Pichai)
It is more profound than fir or electricity.