본 포스팅은 다음 과정을 정리 한 글입니다.
Custom Models, Layers, and Loss Functions with TensorFlow
www.coursera.org/specializations/tensorflow-advanced-techniques
바로 코드를 보고 설명 드리겠습니다. Sequential Model은 Sequential로 부터 return되는 모델 그 자체입니다.
Sequential을 생성하고 그 안에 각각의 layer를 정의합니다.
위의 예시는 Deep Neural Network(DNN)를 구성한 것으로 density connected layer들로 구성되어 있습니다.
첫 번째 layer는 Flatten으로 Input으로 28x28 사이즈의 이미지를 받고 이 것을 평평하게 하여 1차원 배열로 만듭니다.
두 번째 layer는 Dense layer로 128개의 뉴런이 있고, activation function(활성화 함수)로 Relu를 사용하고 있습니다. 첫 번째 layer에서 나온 1차원 배열을 input으로 받습니다.
마지막 layer는 10개의 뉴런을 가지고 있고 각 뉴런은 10개의 class를 의미(ex : 강아지, 고양이, 사람 등등)합니다. activation function으로 softmax를 사용합니다. softmax는 10개의 class를 구별하는데 도움을 줍니다. (하나의 이미지가 들어왔을 때 이 것이 어떤 class에 해당하는지 확률을 구하게 해줌, softmax의 합은 항상 1)
지금까지 Sequential Model에 대해 간단하게 살펴보았습니다.
이번에는 Functional API를 통해 model을 만드는 법에 대해 살펴보겠습니다.
Functional API를 만드는 법은 세가지로 나뉩니다.
1. model의 input을 정의한다.
2. input부터 정의하고자 하는 layer들을 연결한다.
3. input과 output layer를 이용하여 model을 정의한다.
그럼 1번부터 코드로 살펴보겠습니다. 첫 번째는 input을 정의해 줍니다.
Sequential Model에서는 Flatten에 그냥 input_shape를 바로 넣어줬었는데요!
Functional API에서는 Input이라는 것을 import하여 실제로 정의해주고 위와 같이 shape를 정해줍니다.
두 번째로 Layer들을 정의해 줍니다.
첫 번째에서 정의한 input을 위와 같이 Flatten의 괄호 밖에 괄호를 만들어서 집어 넣습니다. 그 것을 x에 대입하고 그 x를 다음 layer인 Dense layer에 집어 넣습니다. 나머지 뉴런의 size나 activation function은 그대로 기입해 줍니다.
마지막으로 x를 다시 마지막 layer에 집어넣고 그 것을 predictions에 넣어줍니다.
세 번째로 Model을 정의합니다.
첫 번째에서 정의한 input을 Model의 inputs로 두 번째에서 정의한 predictions를 ouputs에 각각 대입하면 Model의 정의가 완성됩니다!!
세가지를 모두 한번에 정리하면 아래와 같이 한번에 정리가 됩니다.
Sequential Model 보다 코드도 훨씬 길어졌고 뭔가 복잡한 것 같은데....
Functional API는 왜 사용하는 걸까요?
Functional API를 통해 우리가 원하는 형태의 Model을 구성할 수 있는 장점이 있습니다.
이 것에 대해서는 차근차근 알아보도록 하겠습니다.
다음시간에 만나요~!!
감사합니다.
'Artificial Intelligence > Keras' 카테고리의 다른 글
[Tensorflow 2][Keras] Programming Assignment: Multiple Output Models using Keras Functional API (0) | 2021.03.13 |
---|---|
[Tensorflow 2][Keras] Week 1 - Siamese Network (0) | 2021.03.13 |
[Tensorflow 2][Keras] Week 1 - Creating a Multi-Output Architecture (0) | 2021.03.08 |
[Tensorflow 2][Keras] Week 1 - Branching models (0) | 2021.03.07 |
[Tensorflow 2][Keras] Week 1 - Declaring and stacking layers (0) | 2021.03.05 |
댓글