Chapter.9 텍스트를 위한 인공 신경망¶ 09-1 순차 데이터와 순차 신경망¶ - 순차 데이터¶ 순차 데이터는 텍스트나 시계열 데이터와 같이 순서에 의미가 있는 데이터를 말한다. 예를 들면 일별 온도를 기록한 데이터에서 날짜 순서를 뒤죽박죽 섞는다면 내일의 온도를 쉽게 예상하기 어렵다. 지금까지 우리가 보았던 데이터는 순서와는 상관이 없었다. 예를 들어 패션 MNIST 데이터를 생각해보자. 이 데이터를 신경망 모델에 전달할 때 샘플을 랜덤하게 섞은 후 훈련 세트와 검증 세트로 나누었다. 즉 샘플의 순서는 상관이 없었다. 심지어 골고루 섞는 편이 결과가 더 좋았다. 이 장에서 사용하려는 댓글, 즉 텍스트 데이터는 단어의 순서가 중요한 순차 데이터이다. 이런 데이터는 순서를 유지하며 신경망에 주입해야 ..
Chapter.8 이미지를 위한 인공 신경망¶ 08-1 합성곱 신경망의 구성 요소¶ - 합성곱¶ 합성곱은 마치 입력 데이터에 마법의 도장을 찍어서 유용한 특성만 드러나게 하는 것으로 드러나게 하는 것으로 비유할 수 있다. 그럼 여기서 합성곱의 동작 원리를 자세히 알아보자. 7장에서 사용한 밀집층에는 뉴런마다 입력 개수만큼의 가중치가 있다. 즉 모든 입력에 가중치를 곱한다. 인공 신경망은 처음에 가중치 w1 ~ w10과 절편 b를 랜덤하게 초기화한 다음 에포크를 반복하면서 경사 하강법 알고리즘을 사용하여 손실이 낮아지도록 최적의 가중치와 절편을 찾아간다. 이것이 바로 모델 훈련이다. 예를 들어 밀집층에 뉴런이 3개 있다면 출력은 3개가 된다. 입력 개수에 상관없이 동일하다. 7장에서 패션 MNIST 이미지..
07-3 신경망 모델 훈련¶ 이번 절에서는 케라스 API를 사용해 모델을 훈련하는데 필요한 다양한 도구들을 알아보자. 이 과정에서 여러가지 중요한 개념과 모범 사례를 함께 살펴보자. - 손실 곡선¶ 2절에서 fit() 메서드로 모델을 훈련하면 훈련 과정이 상세하게 출력되어 확인할 수 있었다. 여기에는 에포트 횟수, 손실, 정확도 등이 있었다. 그런데 아래와 같이 출력의 마지막에 다음과 같은 메시지를 본 기억이 있을 것이다. 노트북의 코드 셀은 print() 명령을 사용하지 않더라도 마지막 라인의 실행 결과를 자동으로 출력한다. 즉 이 메세지는 fit() 메서드의 실행 결과를 출력한 것이다. 다시 말해 fit() 메서드가 무엇인가 반환한다는 증거이다. 사실 케라스의 fit() 메서드는 History 클래스..
07-2 심층 신경망¶ - 2개의 층¶ 다시 케라스 API를 사용하여 패션 MNIST 데이터셋을 불러오자. In [30]: from tensorflow import keras (train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data() 그다음 이미지의 픽셀값을 0 ~ 255 범위에서 0 ~ 1 사이로 변환하고, 28 x 28 크기의 2차원 배열을 784 크기의 1차원 배열로 펼친다. 마지막 사이킷런의 train_test_split() 함수로 훈련 세트와 검증 세트로 나눈다. 여기까지는 1절에서 했던 것과 같습니다. 다음 코드가 이해되지 않는다면 1절을 다시 학습해 보자. In [31]: fr..
chapter.7 딥러닝을 시작합니다¶ 07-1 인공 신경망¶ - 패션 MNIST¶ 판매할 패션 상품의 데이터는 아직 없지만 chapter7과 chapter8에선 패션 MNIST 데이터셋을 사용하자. 이 데이터셋은 10종류의 패션 아이템으로 구성되어 있다. MNIST는 머신러닝과 딥러닝을 처음 배울 때 많이 사용된다. 딥러닝에서는 MNIST 데이터셋이 유명하다. 이 데이터는 손으로 쓴 0 ~ 9 까지의 숫자로 이루어져 있다. MNIST와 크기, 개수가 동일하지만 숫자 대신 패션 아이템으로 이루어진 데이터가 바로 패션 MNIST이다. 패션 MNIST 데이터는 워낙 유명하기 때문에 많은 딥러닝 라이브러리에서 이 데이터를 가져올 수 있는 도구를 제공한다. 여기서는 텐서플로를 사용해 데이터를 불러오자. 딥러닝이..
06-3 주성분 분석¶ - 차원과 차원 축소¶ 지금까지 우리는 데이터가 가진 속성을 특성이라 불렀다. 앞서 과일 사진의 경우 10000개의 픽셀이 있기 때문에 10000개의 특성이 있는 것이다. 머신러닝에서는 이런 특성을 차원이라고 부른다. 10000개의 특성은 결국 10000개의 차원이라는 것인데 이 차원을 줄일 수 있다면 저장 공간을 크게 절약할 수 있다. 이를 위해 비지도 학습 작업 중 하나인 차원 축소 알고리즘을 다뤄보자. 차원 축소는 데이터를 가장 잘 나타내는 일부 특성을 선택하여 데이터 크기를 줄이고 지도 학습 모델의 성능을 향상시킬 수 있는 방법이다. 또한 줄어든 차원에서 다시 원본 차원으로 손실을 최대한 줄이면서 복원할 수도 있다. 이번엔 대표적인 차원 축소 알고리즘인 주성분 분석을 배우자..
06-2 k-평균¶ 앞에서 사과, 파인애플, 바나나에 있는 각 픽셀의 평균값을 구해서 가장 가까운 사진을 골랐다. 이 경우에는 사과, 파인애플, 바나나 사진임을 미리 알고 있었기 때문에 각 과일의 평균을 구할 수 있었다. 하지만 진짜 비지도 학습에서는 사진에 어떤 과일이 들어 있는지 알지 못한다. 이런 경우 k-평균 군집 알고리즘이 평균값을 자동으로 찾아준다. 이 평균값이 클러스터의 중심에 위치하기 때문에 클러스터 중심 또는 센트로이드라고 부른다. - k-평균 알고리즘 소개¶ k-평균 알고리즘의 작동 방식은 다음과 같다. 무작위로 k개의 클러스터 중심을 정한다. 각 샘플에서 가장 가까운 클러스터 중심을 찾아 해당 클러스터의 샘플로 저장한다. 클러스터에 속한 샘플의 평균값으로 클러스터 중심을 변경한다. 클..
chapter.6 비지도 학습¶ 06-1 군집 알고리즘¶ - 타깃을 모르는 비지도 학습¶ 이번 시간엔 타깃을 모르는 사진을 종류별로 분류하려 한다. 이렇게 타깃이 없을 때 사용하는 머신러닝 알고리즘이 있다. 바로 비지도 학습이다. 사람이 가르쳐 주지 않아도 데이터에 있는 무언가를 학습하는 것이다. - 과일 사진 데이터 준비하기¶ 준비된 과일 데이터는 사과, 바나나, 파인애플을 담고 있는 흑백사진이다. 데이터 출처 : https://github.com/rickiepark/hg-mldl 이 데이터는 넘파이 배열의 기본 저장 포맷인 npy 파일로 저장되어 있다. 넘파이에서 이 파일을 읽으려면 먼저 아래 코드를 입력해서 파일을 다운로드 하자. In [1]: !wget https://bit.ly/fruits_30..
05-3 트리의 앙상블¶ - 정형 데이터와 비정형 데이터¶ 랜덤 포레스트에 대해 배우기 전에 잠시 우리가 다루었던 데이터를 되돌아보자. 이전에 사용한 생선 데이터와 와인 데이터는 모두 CSV 파일이다. 이런 형태의 데이터를 정형 데이터라고 부른다. 쉽게 말해 어떤 구조로 되어있는 이런 데이터는 CSV나 데이터베이스, 혹은 엑셀에 저장하기 쉽다. 이와 반대되는 데이터를 비정형 데이터라고 부른다. 비정형 데이터는 데이터베이스나 엑셀로 표현하기 어려운 것들이다. 예를 들면 텍스트 데이터, 카메라로 찍은 사진, 핸드폰으로 듣는 디지털 음악 등이 있다. 지금까지 배운 머신러닝 알고리즘은 정형 데이터에 잘 맞는다. 그중에 정형 데이터를 다루는데 가장 뛰어난 성과를 내는 알고리즘이 앙상블 학습이다. 이 알고리즘은 대..
05-2 교차 검증과 그리드 서치¶ - 검증 세트¶ 테스트 세트를 사용하지 않으면 모델이 과대적합인지 과소적합인지 판단하기 어렵다. 테스트 세트를 사용하지 않고 이를 측정하는 간단한 방법은 훈련 세트를 또 나누는 것이다. 이 데이터를 검증 세트라고 부른다. 앞서 전체 와인 데이터중 20%를 테스트 세트로 만들고 80%를 훈련 세트로 만들었다. 이 훈련 세트중에서 다시 20%를 떼어 내어 검증 세트로 만든다. 훈련 세트에서 모델을 훈련하고 검증 세트로 모델을 평가한다. 이런 식으로 테스트하고 싶은 매개변수를 바꿔가며 가장 좋은 모델을 고른다. 그다음 이 매개변수를 사용해 훈련 세트와 검증 세트를 합쳐 전체 훈련 데이터에서 모델을 다시 훈련한다. 그리고 마지막에 테스트 세트에서 최종 점수를 평가한다. 데이터..