728x90
반응형
MNIST 데이터셋
- 1980년대 미국 국립표준기술연구소(National Institute of Standards and Technology, NIST)에서 수집한 6만 개의 훈련 이미지와 1만 개의 테스트 이미지로 구성되어 있다.
- 넘파이 배열의 형태로 케라스에 포함되어 있다.
클래스와 레이블에 관한 노트
- 머신 러닝 분류 문제의 범주(category)를 클래스(class)라 한다.
- 데이터 포인트는 샘플(sample)이라고 한다.
- 특정 샘플의 클래스는 레이블(label)이라고 한다.
MNIST import
# 케라스에서 MNIST 데이터셋 적재
from tensorflow.keras import datasets
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
# train_images, train_labels는 모델이 학습해야 할 훈련 세트(training set)을 구성
# test_images, test_labels는 모델이 테스트하는 테스트 세트(test set)다.
훈련 데이터셋
# 훈련 데이터셋 확인
print(train_images.shape) # 데이터 살펴보기
print(len(train_labels))
print(train_labels)
테스트 데이터셋
# 테스트 데이터셋 확인
print(test_images.shape)
print(len(test_labels))
print(train_labels)
신경망 구조
# 신경망 구조
from tensorflow.keras import models, layers
network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28,28)))
network.add(layers.Dense(10, activation='softmax'))
- 신경망의 핵심 구성 요소는 일종의 데이터 처리 필터라고 생각할 수 있는 층(layer)다.
- 층은 주어진 문제에 더 의미있는 표현(representation)을 입력된 데이터로부터 추출한다.
- 대부분의 딥러닝은 간단한 층을 연결해 구성되어 있고, 점진적으로 데이터를 정제하는 형태를 띠고 있다.
- 이 코드에서는 완전 연결(fully coneect)된 신경망 층인 Dense 층 2개가 연속되어 있다.
- 두 번째 층은 10개의 확률 점수가 들어 있는 배열(모두 더하면 1)을 반환하는 소프트맥스(softmax)층이다.
신경망 컴파일 단계에 포함될 세 가지
- 손실 함수(loss function) : 훈련 데이터에서 신경망의 성능을 측정하는 방법으로 네트워크가 옳은 방향으로 학습될 수 있도록 도와준다.
- 옵티마이저(optimizer) : 입력된 데이터와 손실 함수를 기반으로 네트워크를 업데이트하는 메커니즘이다.
- 훈련과 테스트 과정을 모니터링할 지표 : 여기에서는 정확도(정확히 분류된 이미지의 비율)만 고려
# 컴파일 단계
network.compile(optimizer = 'rmsprop',
loss = 'categorical_crossentropy',
metrics = ['accuracy'])
이미지 데이터 준비(전처리)
# 이미지 데이터 준비
train_images = train_images.reshape((60000,28*28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28*28))
test_images = test_images.astype('float32') / 255
- 데이터를 네트워크에 맞는 크기로 바꾸고 모든 값을 0과 1사이로 스케일을 조정
- 신경망은 입력 데이터의 스케일에 민감해 적절한 데이터 전처리 과정이 필요하다.
- 이미지의 경우 보통 픽셀의 최댓값인 255로 나누어 사용한다.
레이블 준비
# 레이블 준비
from tensorflow.keras import utils
train_labels = utils.to_categorical(train_labels)
test_labels = utils.to_categorical(test_labels)
#train_images = train_images /255.0
#test_images = test_images / 255.0
모델 훈련
# 모델 훈련
network.fit(train_images, train_labels,
epochs = 5, batch_size = 128)
테스트 세트로 모델 확인
# 테스트 세트로 모델 확인
test_loss , test_acc = network.evaluate(test_images, test_labels)
print('test_loss : ', test_loss)
print('test_acc : ', test_acc)
- 훈련 세트의 정확도보다 약간 낮다.
- 훈련 정확도와 테스트 정확도 사이의 차이는 과대적합(overfitting) 때문이다.
환경 문제로 Flatten을 사용
network.add(layers.Flatten())
train_images = train_images /255.0
test_images = test_images / 255.0
넘파이
- 파이썬의 대표적인 다차원 배열 라이브러리
- 케라스, 텐서플로, 사이킷런(scikit-learn) 등 많은 머신 러닝 라이브러리가 기본 데이터 구조로 넘파이 배열을 사용한다.
Dense
- 입력과 출력을 모두 연결해주며 입력과 출력을 각각 연결해주는 가중치를 포함하고 있다.
- Dense의 첫 번째 인자 : 출력 뉴런(노드)의 수를 결정
- Dense의 두번째 인자 : input_dim은 입력 뉴런(노드)의 수를 결정, 맨 처음 입력층에서만 사용, input_shape는 입력 텐서의 크기를 결정한다. input_shape를 기재하지 않는 경우 앞선 층의 출력 크기를 입력 크기로 자동으로 설정한다.
- Dense의 세 번째 인자 : activation 활성화 함수를 선택
rmsprop
- 기울기를 단순 누적하지 않고 지수 가중 이동 평균 Exponentially weighted moving average를 사용해 최신 기울기들이 더 크게 반영되도록 한다.
categorical_crossentropy
- 범주형 교차 엔트로피
- 레이블이 2개 이상일 경우, 멀티클래스 분류에 사용
- 라벨이 (0,0,1,0,0), (0,1,0,0,0)와 같이 one-hot encoding된 형태로 제공될 때 사용 가능하다.
출처 :
www.yes24.com/Product/Goods/65050162?OzSrank=1
728x90
반응형
최근댓글