✔️ imbd 데이터 셋은 케라스에 포함되어 있는 영화 리뷰 데이터를 이용해 파이썬으로 딥러닝을 구현할 수 있다.
우선 케라스에서 제공하는 imbd 데이터를 import해주고
train_data와 test_data의 단어를 10,000개만 제한하여 사용하기 위해
데이터 셋을 load해주었다.
이 데이터의 모양을 확인해보니 1차원의 25000개 샘플 데이터이다.
라벨 데이터는 1과 0으로만 이루어진 데이터이다.
max반복문은 모든 sequence함수 안에 있는 가장 큰 값을 찾는 것이다.
numpy 모듈을 import해 데이터를 준비한다.
크기가 (len(sequences), dimension)이고 모든 원소가 0인 행렬로 만들어주었다.
a 리스트의 원소들을 반복하면서 각 원소의 인덱스를 i 변수에,
원소 자체를 item 변수에 할당해준다.
enumerate() 함수는 순서가 있는 자료형(list, tuple, dictionary, string)을 입력받아 인덱스 값을 포함하는 enumerate 객체를 리턴한다.
train_data와 test_data를 각각 벡터로 변환해주면,
레이블을 쉽게 벡터로 바꿀 수 있게 된다.
여기서 영화리뷰 데이터는 긍정과 부정 두가지로 나뉘는 데이터인데,
이는 문자열 형태의 데이터이다.
각 단어에 해당하는 정수값을 부여하기 위해 레이블의 리스트를 정수 tensor로 변환하는 것이다.
보통 라벨 데이터는 0과 1사이의 값을 가지는 실수형으로 변환한다.
이는 분류 문제에서 모델의 출력과 0과 1사이의 값으로 나타나기 때문에
실수형으로으로 바꿔주어 신경망에 주입할 데이터로 준비해준다.
모델 만들기 위해 필요한 models와 layers 모듈을 import해준다.
1번째 input layer의 Dense 유닛 개수는 16개, activation은 'relu' 함수를 사용해준다.
그러면 16차원의 공간으로 바꾸어 선형적인 연산을 하게된다.
input_shape(10000,)은 1차원 배열에 10000개 요소가 들어간 입력모양이다.
2번째 hidden layer은 input layer와 동일하다.
3번째 output layer의 Dense 유닛은 1개이다. 긍정 or 부정 둘 중 하나의 값만 도출되어야 하기 때문에 하나로 설정한다.
activation은 0과 1사이의 점수로, 어떤 샘플 타깃이 1일 가능성이 높다는 것은 그 리뷰가 긍정일 가능성이 높다는 것을 의미한다.
이진분류 모델의 마지막 활성화로 시그모이드 활성화 함수를 사용하는 것이 좋다.
마지막으로 손실 함수와 옵티마이저를 선택해야한다.
model.compile은 rnsprop 옵티마이저와 binary_crossentropy 손실 함수로 모델을 설정하는 단계이다.
훈련하는 동안 accuracy(정확도)를 사용하여 metrics(평가)한다.
input layer / hidden layer / output layer 총 3개의 레이어를 생성하면 위와 같은 모양의 모델이 형성된다.
훈련하는 동안 train_data에 대한 모델의 정확도를 측정해준다.
10,000개의 샘플 데이터를 쪼개서 검증하기 위해 위와 같이 준비해준다.
x_train과 y_train tensor에 있는 샘플의 손실과 정확도를 측정할 것이다.
partial_x_train과 partial_y_train를 512개의 샘플씩
20번의 epoch(에포크)동안 반복 훈련,
vaildation_data 매개변수에 검증 데이터를 전달한다.
이 dictionary는 모델의 학습과정을 모니터링하기 위해 사용되는 검증데이터이다.
'acc': 학습 데이터에 대한 정확도(accuracy)를 나타내는 값
'loss': 학습 데이터에 대한 손실(loss)을 나타내는 값
'val_acc': 검증 데이터에 대한 정확도를 나타내는 값
'val_loss': 검증 데이터에 대한 손실을 나타내는 값
위는 loss에 대한 그래프이다.
노란색 포인트가 가장 좋은 epochs이고
그 이후는 훈련 데이터가 과하게 최적화되었다는 뜻의 overfitting이다.
위는 accuracy에 대한 그래프이다.
노란색 포인트가 가장 좋은 epochs이고
이를 기준으로 왼쪽은 underfitting, 오른쪽은 overfitting이다.