# 함수형 API 문법
- sequential API vs. functional API
1) 입력층 :
> sequential API : 입력층이 따로 필요없다. 입력 값 input_data_X 가 있으면 그대로 그걸 모델에 넣으면 된다.
> functional API : 입력층이 따로 존재한다.
입력 데이터가 있더라도, 해당 데이터의 크기에 맞을 수 있는 입력 층 인스턴스를 선언한 뒤에야 쓸 수 있다.
ex) inputs = Input(shape=(10, ))
- Input() : 입력층 객체를 반환한다.
그러나, "실제 input 데이터"는 없다. 그냥 "형태"만 있는 입력층 객체다
2) Dense() 함수 : "똑같은 패키지"에서 가져 온 함수지만, 사용되는 방식은 전혀 다르다
> sequential : Dense(~) 형식으로 사용되었으며, "구체적인 입력값"은 없다
-> 단순히, 어떤 구조를 띄고 있는지만 나타낸다
> functional : Dense(~)(입력값) 형식으로 사용되며, 구체적인 입력값이 "있다!"
ex) hidden1 = Dense(64, activation='relu')(inputs)
hidden2 = Dense(64, activation='relu')(hidden1)
3) Model() 함수 :
> sequential : 따로 Model 함수를 사용하지 않았다. model = Sequential() 을 이용해서 모델 객체를 전달받았었다.
> functional : 따로 Model 함수를 사용해야 한다. 위에서 사용한 함수들을 하나로 정리해야 하므로.
ex) inputs = Input(shape=(10,))
hidden1 = Dense(64, activation='relu')(inputs)
hidden2 = Dense(64, activation='relu')(hidden1)
output = Dense(1, activation='sigmoid')(hidden2)
model = Model(inputs=inputs, outputs=output)
- 이처럼, input 과 output 을 Model 의 파라미터로 넣어준다면 Model 객체가 완성되어서 반환된다
> 이렇게 만든 model 객체는, sequential API의 경우와 마찬가지로 다뤄주면 된다.
fit, predict 등등의 함수를 이용해서 훈련
- Functional API 의 장점 (Sequential 과 비교시)
> 다중 입력을 받을 수 있다
ex)
# 두 개의 입력층을 정의
inputA = Input(shape=(64,))
inputB = Input(shape=(128,))
x = Model(inputs=inputA, outputs=x)
y = Model(inputs=inputB, outputs=y)
result = concatenate([x.output, y.output])
z = Dense(2, activation="relu")(result)
model = Model(inputs=[x.input, y.input], outputs=z)
- 문법적으로 동일한 표기 :
> encoder = Dense(128)(input)
> encoder = Dense(128)
encoder(input)
'프로그래밍 언어 기본 문법 > 파이썬' 카테고리의 다른 글
Dataframe - Pandas 자료형 정리 (0) | 2020.03.11 |
---|---|
파이썬 데이터/자료형 (0) | 2020.03.11 |
딥러닝 라이브러리 모음 (0) | 2020.02.15 |
(최신화 중)여러 패키지 문법 정리 - 딥러닝을 이용한 자연어처리 입문 (0) | 2020.01.31 |
케라스 기본 문법 정리 - 딥러닝을 이용한 자연어처리 입문 (0) | 2020.01.30 |