페이지

2022년 7월 23일 토요일

3.4.2 데이터 준비

 신경망에 숫자 리스트를 주입할 수는 없습니다. 리스트를 텐서로 바꾸는 두 가지 방법이 있습니다.

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

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

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

    import numpy as np


    def vectorize_sequences(sequences, dimension=10000):

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

        for i, sequence in enumerate(sequences):

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

        return results


    x_train = vectorize_sequences(trin_data) ....... 훈련 데이터를 벡터로 변환합니다.

    x_test = vectorize_sequences(test_data) ........ 테스트 데이터를 벡터로 변환합니다.

이제 샘플은 다음과 같이 나타납니다.

>>> x_train[0]

array([0., 1., 1., ....., 0., 0., 0.])

레이블은 쉽게 벡터로 바꿀 수 있습니다.

    y_train = np.asarray(train_labels).astype('float32')

    y_test = np.asarray(test_labels).astype('float32')

이제 신경망에 주입할 데이터가 준비되었습니다.


    



댓글 없음: