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

TensorFlow와 Python으로 1차원 컨볼루션 신경망(CNN) 구축하는 방법

TensorFlow는 Google이 제공하는 머신러닝 프레임워크입니다. 오픈소스 프레임워크로서 Python과 함께 사용되어 다양한 알고리즘, 딥러닝 애플리케이션 등을 구현할 수 있으며, 연구 목적과 상용 환경 모두에서 활용됩니다.

TensorFlow의 주요 특징

TensorFlow는 복잡한 수학 연산을 빠르게 수행할 수 있도록 돕는 최적화 기법을 갖추고 있습니다. 이는 내부적으로 NumPy와 다차원 배열을 활용하기 때문인데, 이러한 다차원 배열을 '텐서(tensor)'라고 부릅니다.

이 프레임워크는 딥러닝 신경망 작업을 폭넓게 지원하며, 뛰어난 확장성을 자랑합니다. 또한 인기 있는 데이터셋을 다수 포함하고 있고, GPU 연산을 활용해 리소스 관리를 자동화합니다. 다양한 머신러닝 라이브러리를 제공하며 문서화가 잘 되어 있어 지원 체계도 탄탄합니다. 딥러닝 모델을 실행하고 학습시키며, 데이터셋의 관련 특성을 예측하는 애플리케이션을 만드는 것까지 가능합니다.

Windows 환경에서는 아래 명령어 한 줄로 'tensorflow' 패키지를 설치할 수 있습니다.

pip install tensorflow

텐서(Tensor)란 무엇인가?

텐서는 TensorFlow에서 사용되는 핵심 데이터 구조입니다. 플로우 다이어그램에서 엣지(edge)를 연결하는 역할을 하며, 이 다이어그램을 '데이터 흐름 그래프(Data Flow Graph)'라고 합니다. 텐서는 결국 다차원 배열 또는 리스트라고 할 수 있습니다.

본 예제 코드는 Google Colaboratory 환경에서 실행됩니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정이 필요 없고 GPU에 무료로 접근할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.

예제 코드

다음은 1차원 컨볼루션 네트워크를 구축하는 코드입니다.

print("1차원 컨볼루션 네트워크를 구축하는 함수 정의")
def create_model(vocab_size, num_labels):
    model = tf.keras.Sequential([
      layers.Embedding(vocab_size, 64, mask_zero=True),
      layers.Conv1D(64, 5, padding="valid", activation="relu", strides=2),
      layers.GlobalMaxPooling1D(),
      layers.Dense(num_labels)
    ])
    return model

코드 출처: https://www.tensorflow.org/tutorials/load_data/text

실행 결과

1차원 컨볼루션 네트워크를 구축하는 함수 정의

코드 설명

  • 'create_model' 함수는 Keras의 Sequential API를 사용하여 1차원 컨볼루션 신경망(1D CNN)을 구축합니다.

  • 모델은 Embedding 레이어로 시작해 Conv1D 레이어에서 특징을 추출하고, GlobalMaxPooling1D로 차원을 축소한 뒤 Dense 레이어를 통해 최종 라벨을 예측하는 구조입니다.

  • Embedding 레이어의 mask_zero=True 옵션은 패딩(padding) 값인 0을 학습 과정에서 무시하도록 설정합니다.

  • Conv1D 레이어는 64개의 필터와 크기 5의 커널을 사용하며, ReLU 활성화 함수와 스트라이드 2를 적용해 시퀀스 데이터의 지역적 패턴을 효과적으로 학습합니다.