본문 바로가기
프로그래밍 언어 기본 문법/파이썬

케라스 함수형 API - 딥러닝을 이용한 자연어처리 입문

by tryotto 2020. 1. 30.

# 함수형 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)