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( , =10000):
results = np.zeros((len(sequences), dimension)) ➊
for i, sequence in enumerate(sequences):
for in sequence:
results[i, ] = 1. ➋
return results
x_train = vectorize_sequences(train_data) ➌
x_test = vectorize_sequences(test_data) ➍
➊ 크기가 (len(sequences), dimension)이고 모든 원소가 0인 행렬을 만듭니다.
➋ results[i]에서 특정 인덱스의 위치를 1로 만듭니다.
➌ 훈련 데이터를 벡터로 변환합니다.
➍ 테스트 데이터를 벡터로 변환합니다.