더북(TheBook)

4.1.2 데이터 준비

신경망에 숫자 리스트를 바로 주입할 수는 없습니다. 이 숫자 리스트는 모두 길이가 다르지만 신경망은 동일한 크기의 배치를 기대하기 때문입니다. 리스트를 텐서로 바꾸는 두 가지 방법이 있습니다.

같은 길이가 되도록 리스트에 패딩(padding)을 추가하고 (samples, max_length) 크기의 정수 텐서로 변환합니다.7 그다음 이 정수 텐서를 다룰 수 있는 층으로 신경망을 시작합니다(Embedding 층을 말하며, 나중에 자세히 다루겠습니다8).

리스트를 멀티-핫 인코딩(multi-hot encoding)하여 0과 1의 벡터로 변환합니다. 예를 들어 시퀀스 [8, 5]를 인덱스 8과 5의 위치는 1이고 그 외는 모두 0인 10,000차원의 벡터로 각각 변환합니다.9 그다음 부동 소수점 벡터 데이터를 다룰 수 있는 Dense 층을 신경망의 첫 번째 층으로 사용합니다.

여기에서는 두 번째 방식을 사용하고 이해를 돕기 위해 직접 데이터를 멀티-핫 벡터로 만들겠습니다.

코드 4-3 정수 시퀀스를 멀티-핫 인코딩으로 인코딩하기

import numpy as np

def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension)) 
    for i, sequence in enumerate(sequences):
        for j in sequence:
            results[i, j] = 1.  
    return results
x_train = vectorize_sequences(train_data) 
x_test = vectorize_sequences(test_data) 

크기가 (len(sequences), dimension)이고 모든 원소가 0인 행렬을 만듭니다.

results[i]에서 특정 인덱스의 위치를 1로 만듭니다.

훈련 데이터를 벡터로 변환합니다.

테스트 데이터를 벡터로 변환합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.