인공 신경망은 생물학적 뉴런에서 영감을 받아 만든 머신러닝 알고리즘입니다. 이름이 신경망이지만 실제 우리 뇌를 모델링한 것은 아닙니다. 신경망은 기존의 머신러닝 알고리즘으로 다루기 어려웠던 이미지, 음성, 텍스트 분야에서 뛰어난 성능을 발휘하면서 크게 주목받고 있습니다. 인공 신경망 알고리즘을 종종 딥러닝이라고도 부릅니다.
텐서플로는 구글이 만든 딥러닝 라이브러리로 매우 인기가 높습니다. CPU와 GPU를 사용해 인공 신경망 모델을 효율적으로 훈련하며 모델 구축과 서비스에 필요한 다양한 도구를 제공합니다. 텐서플로 2.0부터는 신경망 모델을 빠르게 구성할 수 있는 케라스를 핵심 API로 채택하였습니다. 케라스를 사용하면 간단한 모델에서 아주 복잡한 모델까지 손쉽게 만들 수 있습니다.
밀집층은 가장 간단한 인공 신경망의 층입니다. 인공 신경망에는 여러 종류의 층이 있습니다. 밀집층에서는 뉴런들이 모두 연결되어 있기 때문에 완전 연결 층이라고도 부릅니다. 특별히 출력층에 밀집층을 사용할 때는 분류하려는 클래스와 동일한 개수의 뉴런을 사용합니다.
원-핫 인코딩은 정숫값을 배열에서 해당 정수 위치의 원소만 1이고 나머지는 모두 0으로 변환합니다. 이런 변환이 필요한 이유는 다중 분류에서 출력층에서 만든 확률과 크로스 엔트로피 손실을 계산하기 위해서 입니다. 텐서플로에서는 'sparse_categorical_entropy' 손실을 지정하면 이런 변환을 수행할 필요가 없습니다.
Dense는 신경망에서 가장 기본 층인 밀집층을 만드는 클래스입니다.
이 층에서 첫 번째 매개변수에는 뉴런의 개수를 지정합니다.
activation 매개변수에는 사용할 활성화 함수를 지정합니다. 대표적으로 'sigmoid', 'softmax'함수가 있습니다. 아무것도 지정하지 않으면 활성화 함수를 사용하지 않습니다.
케라스의 Sequential 클래스에 맨 처음 추가되는 층에는 input_shape 매개변수로 입력의 크기를 지정해야 합니다.
Sequential은 케라스에서 신경망 모델을 만드는 클래스입니다.
이 클래스의 객체를 생성할 때 신경망 모델에 추가할 층을 지정할 수 있습니다. 추가할 층이 1개 이상일 경우 파이썬 리스트로 전달합니다.
Compile()은 모델 객체를 만든 후 훈련하기 전에 사용할 손실 함수와 측정 지표 등을 지정하는 메서드 입니다.
loss 매개변수에 손실 함수를 지정합니다. 이진 분류일 경우 'binary_crossentropy', 다중 분류일 경우 'categorical_crossentropy'를 지정합니다. 클래스 레이블이 정수일 경우 'sparse_categorical_crossentropy'로 지정합니다. 회귀 모델일 경우 'mean_square_error'등으로 지정할 수 있습니다.
fit()은 모델을 훈련하는 메서드입니다.
첫 번째와 두 번째 매개변수에 입력과 타깃 데이터를 전달합니다.
epochs 매개변수에 전체 데이터에 대해 반복할 에포크 횟수를 지정합니다.
evaluate()는 모델 성능을 평가하는 메서드입니다.
첫 번째와 두 번째 매개변수에 입력과 타깃 데이터를 전달합니다.
compile() 메서드에서 loss 매개변수에 지정한 손실 함수의 값과 metrics 매개변수에서 지정한 측정 지표를 출력합니다.