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

TensorFlow와 Python으로 일리아드(Illiad) 데이터셋 로드하는 방법

TensorFlow는 Google이 제공하는 머신러닝 프레임워크입니다. 오픈소스 기반으로 Python과 함께 사용되어 알고리즘 구현, 딥러닝 애플리케이션 개발 등 다양한 작업에 활용되며, 연구 목적과 실제 프로덕션 환경 모두에서 널리 쓰이고 있습니다.

텐서(Tensor)란 무엇인가?

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

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

  • 랭크(Rank) – 텐서의 차원 수를 나타냅니다. 정의된 텐서의 차수 또는 차원의 개수로 이해할 수 있습니다.

  • 타입(Type) – 텐서 요소에 연결된 데이터 타입을 나타냅니다. 1차원, 2차원 또는 n차원 텐서가 모두 가능합니다.

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

일리아드 데이터셋 소개

이번 예제에서는 William Cowper, Edward(더비 백작), Samuel Butler의 세 가지 번역본으로 구성된 일리아드(Illiad) 데이터셋을 사용합니다. 이 모델은 한 줄의 텍스트가 입력되었을 때 해당 번역가가 누구인지 식별하도록 학습됩니다. 사용된 텍스트 파일은 사전에 전처리 과정을 거쳤으며, 여기에는 문서 헤더와 푸터, 줄 번호, 장(chapter) 제목 제거 작업이 포함됩니다.

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

코드 예제

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

def labeler(example, index):
    return example, tf.cast(index, tf.int64)
print("빈 리스트가 생성되었습니다")
labeled_data_sets = []
print("파일 이름들을 순회하면서 'TextLineDataset' 메서드를 사용해 텍스트 파일로부터 데이터셋을 생성합니다")
for i, file_name in enumerate(FILE_NAMES):
    lines_dataset = tf.data.TextLineDataset(str(parent_dir/file_name))
    labeled_dataset = lines_dataset.map(lambda ex: labeler(ex, i))
    labeled_data_sets.append(labeled_dataset)

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

실행 결과

빈 리스트가 생성되었습니다
파일 이름들을 순회하면서 'TextLineDataset' 메서드를 사용해 텍스트 파일로부터 데이터셋을 생성합니다

코드 설명

  • 'TextLineDataset'은 텍스트 파일로부터 tf.data 데이터셋을 생성하는 데 사용됩니다.

  • 각 예제(example)는 원본 파일의 한 줄 텍스트에 해당합니다.

  • 'text_dataset_from_directory'는 파일 전체 내용을 하나의 예제로 취급하는 반면, TextLineDataset은 그렇지 않습니다.

  • TextLineDataset은 줄 단위로 구성된 텍스트 데이터를 다룰 때 특히 유용합니다.

  • 파일들을 순회하며 각 행(row)을 자체 데이터셋에 불러옵니다.

  • 모든 예제에는 개별적으로 레이블이 지정되어야 하므로, 'tf.data.Dataset.map'을 사용하여 각 행에 레이블링 함수(labeler)를 적용합니다.

  • 이 과정은 데이터셋의 모든 예제를 순회하며 (예제, 레이블) 쌍을 출력 결과로 반환합니다.