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

TensorFlow로 일리아드(Illiad) 데이터셋을 훈련 및 검증 데이터로 분할하는 방법

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

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

pip install tensorflow

텐서(Tensor)란?

텐서는 TensorFlow에서 사용되는 기본 데이터 구조입니다. 플로우 다이어그램의 엣지(edge)를 연결하는 역할을 하며, 이 다이어그램은 '데이터 흐름 그래프(Data Flow Graph)'라고 불립니다. 텐서는 본질적으로 다차원 배열 또는 리스트에 해당합니다.

텐서는 다음 세 가지 주요 속성으로 식별할 수 있습니다.

  • 랭크(Rank) - 텐서의 차원 수를 나타냅니다. 텐서의 차수(order), 즉 정의된 텐서가 가진 차원의 개수로 이해할 수 있습니다.

  • 타입(Type) - 텐서 요소와 연관된 데이터 타입을 나타냅니다. 1차원, 2차원 또는 n차원 텐서일 수 있습니다.

  • 형태(Shape) - 행과 열의 개수를 함께 나타낸 값입니다.

일리아드 데이터셋 소개

이번 예제에서는 일리아드(Illiad) 데이터셋을 사용합니다. 이 데이터셋에는 윌리엄 카우퍼(William Cowper), 에드워드(더비 백작, Earl of Derby), 새뮤얼 버틀러(Samuel Butler)의 세 가지 번역본 텍스트 데이터가 담겨 있습니다. 모델은 한 줄의 텍스트가 주어졌을 때 해당 텍스트를 번역한 사람이 누구인지 식별하도록 훈련됩니다. 사용된 텍스트 파일은 사전 전처리 과정을 거쳤으며, 여기에는 문서 머리글과 바닥글, 행 번호, 챕터 제목 제거 작업이 포함됩니다.

아래 코드는 Google Colaboratory(Colab)에서 실행합니다. Google Colab은 브라우저에서 Python 코드를 실행할 수 있게 해주며, 별도의 설정이 필요 없고 GPU(그래픽 처리 장치)에 무료로 접근할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.

예제 코드

다음은 코드 스니펫입니다.

train_data = all_encoded_data.skip(VALIDATION_SIZE).shuffle(BUFFER_SIZE)
validation_data = all_encoded_data.take(VALIDATION_SIZE)

train_data = train_data.padded_batch(BATCH_SIZE)
validation_data = validation_data.padded_batch(BATCH_SIZE)

sample_text, sample_labels = next(iter(validation_data))
print("텍스트 배치의 형태 : ", sample_text.shape)
print("레이블 배치의 형태 : ", sample_labels.shape)
print("텍스트 예시 : ", sample_text[5])
print("레이블 예시 : ", sample_labels[5])

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

출력 결과

텍스트 배치의 형태 : (64, 18)
레이블 배치의 형태 : (64,)
텍스트 예시 : tf.Tensor(
[ 20 391 2 11 144 787 2 3498 16 49 2 0 0 0
   0 0 0 0], shape=(18,), dtype=int64)
레이블 예시 : tf.Tensor(1, shape=(), dtype=int64)

코드 설명

  • Keras의 TextVectorization 레이어를 사용하여 벡터화된 데이터를 그룹화(배치 처리)하고 패딩(padding)을 적용합니다.

  • 패딩이 필요한 이유는 배치 내부의 모든 예제가 동일한 크기와 형태를 가져야 하지만, 데이터셋의 개별 예제들은 크기가 서로 다를 수 있기 때문입니다.

  • 텍스트의 각 줄마다 포함된 단어 수가 다를 수 있습니다.

  • 'tf.data.Dataset' 메서드는 데이터셋을 분할하고 패딩 배치(padded-batch) 처리하는 데 유용하게 활용됩니다.

  • 'validation_data'와 'train_data'는 배치 데이터들의 모음(collection)입니다.

  • 각 배치는 (여러 개의 예제, 여러 개의 레이블) 쌍으로 구성되며, 배열 형태로 표현됩니다.