__call__ magic method
- 객체를 함수처럼 호출 할 수 있도록 한다.
객체()
로 호출 할 때 __call__ 메소드가 호출되어 실행된다.
Functional API
- Sequential 모델은 각 Layer들의 입력과 출력이 하나라고 가정한다. 그리고 각각의 Layer(입력층, 은닉층, 출력층)들을 차례대로 쌓아 구성한다. 그래서 다양한 구조의 네트워크를 만드는데 한계가 있다.
함수형 API를 사용하면 다중입력, 다중출력, 그래프 형태의 다양한 형태의 레이어들을 유연하게 구성할 수 있다.
- Functional API는 직접 텐서들의 입출력을 다룬다.
- 함수호출 처럼 Layer를 이용하여 입력 텐서(Input Tensor)를 입력 받고 그 결과를 출력 텐서(Output Tensor)로 반환하는 형식으로 모델을 구현한다.
1
2
3
4
5
input_tensor = Input(shape=(16,))
dense = layers.Dense(32, activation='relu')(input_tensor)
output_tensor = layers.Dense(32, activation='sigmoid')(dense)
model = models.Model(input_tensor, output_tensor)
여러개의 출력결과를 합치는 Layer
- 앞 레이어들에서 출력된 값이 여러개이고 이것을 하나의 Layer의 입력으로 넣어 줄 경우 여러개의 출력값을 합쳐 줘야 한다. 이때 단순이 합치거나 element wise 연산을 통해 합칠 수 있다.
- 함수와 Layer class 두가지 방식을 제공한다.
- tensorflow.keras.layers 모듈로 제공
- concatenate(list, axis=-1)/Concatenate(axis=-1)([list])
- 레이어들을 단순히 합친다. (붙이는 처리)
- list: 합칠 레이어들을 리스트에 묶어 전달
- axis: 합칠 기준축. (기본값: -1 : 마지막 축기준)
- add(list)/Add()(list), substract(list)/Subtract()(list), multiply(list)/Multiply()(list)
- 같은 index의 값들을 계산해서(더하기, 빼기, 곱하기) 하나의 레이어로 만든다.
- list: 합칠 레이어들을 리스트에 묶어 전달