본문 바로가기
Artificial Intelligence/Keras

[Tensorflow 2][Keras] Week 1 - Branching models

by 개발자J의일상 2021. 3. 7.
반응형

본 포스팅은 다음 과정을 정리 한 글입니다.

 

Custom Models, Layers, and Loss Functions with TensorFlow

www.coursera.org/specializations/tensorflow-advanced-techniques

 

여태까지 Functional API를 어떻게 사용하는지 배웠습니다. (Layer들을 선언하고 연결)

그러면 Functional API를 사용하려면 특정한 순서로 layer를 코딩해야만 할까요? 예를들면 input layer가 오면 그 다음 flattened layer를 코딩하고 그리고 다음 줄로, 다음 레이어...

 

고맙게도 정답은 NO입니다!! 원하는경우 Layer를 순서없이 코딩할 수 있습니다. 이것은 정말로 많은 가능성을 열어주는데요!

Model을 다른 경로로 분할하고 나중에 병합하는 Model 구조를 정의할 수 있다는 것입니다! 아직 무슨 말인지 어리둥절 하실텐데요? 차근차근 살펴보겠습니다.

 

아래 모델은 정말 유명한 Inception Model의 구조입니다. Layer에서 Layer로의 직접적인 선형 모델이 아닙니다. 아래 그림의 빨간색 네모 부분을 보시면, 빨간색 네모 앞에 부분은 순차적으로 Layer에서 Layer로 연결이 되어있습니다.

하지만 빨간색 네모부분은 4개의 Layer로 각각 분기합니다. 그 다음 다시 하나의 Layer로 합쳐지는 것을 볼 수 있습니다.

 

 

빨간색 네모박스와 비슷한 쉬운 예제 코드로 먼저 개념을 잡아봅시다!

 

 

처음에 layer1을 32개의 뉴런을 가지는 Dense Layer를 생성합니다.

 

 

그런 다음 4개의 layer를 정의하는데, 4개의 레이어 모두가 layer1과 동일한 32개의 뉴런을 가진 Dense Layer를 선언합니다. 그리고 layer1의 다음에 연결 되도록 선언을 합니다.

위에 보이는 것 처럼 layer2_1, layer2_2, layer2_3, layer2_4의 ()에 layer1을 넣고 연결하는 것입니다.

 

그 다음으로는 Concatenate라는 layer을 넣어주는데 이 것은 모든 레이어를 합치겠다는 의미입니다. 합치고나면 하나의 Layer만 남게 되는 것입니다.

 

Model 객체의 parameter들을 보면 뭔가 흥미로운데, 그것은 parameter들을 살펴보면 inputs/outputs로 복수형인 것을 알 수 있습니다. 이 것은 input과 output이 한개만 들어갈 필요가 없다는 것입니다!! 

 

 

그래서 우리는 여러 입력과 여러 출력을 가지는 모델을 만들 수 있는 것입니다!! 

inputs와 outputs에 파이썬 목록을 나타내는 [ ] 대괄호를 그냥 사용해 주면 됩니다. 여러 입력을 정의 할 수 있으므로 모델에 이렇게 사용할 것임을 알리기만 하면 됩니다. 

 

이러한 점이 바로 Functional API가 제공하는 유연성이라고 볼 수 있겠습니다.

 

감사합니다.

300x250

댓글