Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

TensorFlow에서 Python으로 모델 최상단에 Dense(밀집) 레이어 추가하기

TensorFlow에서는 Sequential 모델에 add 메서드를 사용하고 레이어 유형을 Dense로 지정하여 밀집(Dense) 레이어를 손쉽게 추가할 수 있습니다. 이때 합성곱 기반(convolutional base)의 출력은 먼저 Flatten 레이어로 평탄화한 뒤 Dense 레이어가 이어지며, 새로 추가된 레이어는 전체 학습 데이터셋에 적용됩니다.

관련 글: TensorFlow란 무엇이며, Keras는 TensorFlow와 함께 어떻게 신경망을 구성할까요?

Keras Sequential API 활용

이 튜토리얼에서는 Keras의 Sequential API를 사용합니다. Sequential API는 각 레이어가 정확히 하나의 입력 텐서와 하나의 출력 텐서를 가지는 단순한 레이어 스택 구조의 모델을 만들 때 매우 유용합니다.

실행 환경: Google Colaboratory

아래 코드는 Google Colaboratory(Colab)에서 실행됩니다. Colab은 브라우저에서 바로 Python 코드를 실행할 수 있도록 도와주며, 별도의 설정 없이 무료로 GPU(그래픽 처리 장치)를 사용할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.

Dense 레이어 추가 코드

print("Adding dense layer on top")
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
print("Complete architecture of the model")
model.summary()

코드 출처: https://www.tensorflow.org/tutorials/images/cnn

실행 결과

Adding dense layer on top
Complete architecture of the model
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_3 (Conv2D)            (None, 30, 30, 32)        896       
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 15, 15, 32)        0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 13, 13, 64)        18496     
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 6, 6, 64)          0         
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 4, 4, 64)          36928     
_________________________________________________________________
flatten (Flatten)            (None, 1024)              0         
_________________________________________________________________
dense (Dense)                (None, 64)                65600     
_________________________________________________________________
dense_1 (Dense)              (None, 10)                650       
=================================================================
Total params: 122,570
Trainable params: 122,570
Non-trainable params: 0
_________________________________________________________________

동작 원리 설명

  • 모델을 완성하려면 합성곱 기반(convolutional base)의 마지막 출력 텐서(형태: (4, 4, 64))를 하나 이상의 Dense 레이어에 입력하여 분류 작업을 수행해야 합니다.
  • Dense 레이어는 1차원 벡터만 입력으로 받을 수 있지만, 현재 출력은 3차원 텐서입니다.
  • 따라서 먼저 3차원 출력을 1차원으로 평탄화(Flatten)한 후, 그 위에 하나 이상의 Dense 레이어를 추가합니다.
  • CIFAR 데이터셋은 10개의 출력 클래스를 가지므로, 마지막에는 출력 개수가 10개인 Dense 레이어를 추가합니다.
  • (4, 4, 64) 형태의 출력은 두 개의 Dense 레이어를 통과하기 전에 (1024) 크기의 벡터로 평탄화됩니다.