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

Python과 Keras로 계층 그래프에서 노드를 추출하고 재사용하는 방법

Keras는 ONEIROS(Open-ended Neuro-Electronic Intelligent Robot Operating System) 프로젝트의 연구 과정에서 개발된 딥러닝 API입니다. Python으로 작성되었으며, 머신러닝 문제를 효율적으로 해결할 수 있도록 돕는 생산성 높은 인터페이스를 갖춘 고수준(high-level) API입니다. Keras는 TensorFlow 프레임워크 위에서 실행되며, 빠르게 실험할 수 있도록 설계되었습니다. 또한 머신러닝 솔루션을 개발하고 캡슐화하는 데 필요한 핵심 추상화 계층과 빌딩 블록을 제공합니다.

Keras는 확장성이 뛰어나고 크로스 플랫폼을 지원합니다. 따라서 TPU나 GPU 클러스터에서도 실행할 수 있으며, Keras 모델은 웹 브라우저나 모바일 기기에서 동작하도록 내보내기(export)할 수도 있습니다.

Keras는 TensorFlow 패키지에 이미 포함되어 있으며, 아래 코드로 간단히 불러올 수 있습니다.

import tensorflow
from tensorflow import keras

Keras 함수형 API란?

Keras 함수형 API(Functional API)는 순차형(Sequential) API로 만든 모델보다 훨씬 유연한 모델을 구축할 수 있게 해줍니다. 비선형 토폴로지를 가진 모델을 다룰 수 있고, 레이어를 공유하거나 여러 입력과 출력을 가지는 모델도 손쉽게 정의할 수 있습니다.

일반적으로 딥러닝 모델은 여러 레이어로 구성된 방향성 비순환 그래프(DAG, Directed Acyclic Graph) 형태를 띱니다. 함수형 API는 바로 이러한 레이어 그래프를 구축하는 데 활용됩니다.

이 글의 코드는 Google Colaboratory에서 실행했습니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있는 환경으로, 별도의 설정 없이 무료로 GPU에 접근할 수 있으며 Jupyter Notebook을 기반으로 만들어졌습니다.

다음은 Keras를 사용하여 레이어 그래프에서 노드를 추출하고 재사용하는 코드 예시입니다.

예제 코드

print("사전 학습된 가중치를 가진 VGG19 모델")
vgg19 = tf.keras.applications.VGG19()
features_list = [layer.output for layer in vgg19.layers]
feat_extraction_model = keras.Model(inputs=vgg19.input, outputs=features_list)

img = np.random.random((1, 224, 224, 3)).astype("float32")
print("특징 추출(feature-extraction) 모델 생성")
extracted_features = feat_extraction_model(img)

코드 출처 - https://www.tensorflow.org/guide/keras/functional

실행 결과

VGG19 model with pre-trained weights
Downloading data from https://storage.googleapis.com/tensorflow/kerasapplications/vgg19/vgg19_weights_tf_dim_ordering_tf_kernels.h5
574717952/574710816 [==============================] - 6s 0us/step
Create feature-extraction model

코드 설명

  • 레이어 그래프는 정적(static) 데이터 구조이기 때문에 언제든 접근할 수 있습니다.

  • 이러한 특성 덕분에 함수형 모델은 이미지 형태로 시각화(플롯)할 수 있습니다.

  • 중간 레이어, 즉 노드(node)의 활성값(activation)에도 접근하여 재사용할 수 있습니다.

  • 이 기능은 특징 추출(feature extraction) 작업에 매우 유용하게 활용됩니다.

  • 여기서는 ImageNet 데이터셋으로 사전 학습된 가중치를 가진 VGG19 모델을 사용합니다.

  • 중간 레이어의 활성값은 그래프 데이터 구조를 조회(query)함으로써 얻을 수 있습니다.

  • 이렇게 얻은 특징들을 조합하면, 중간 레이어의 활성값을 출력으로 반환하는 새로운 특징 추출 모델을 만들 수 있습니다.