Keras 필기 번호 분류
먼저 신경망에 대해 알아보십시오.
이 기사에서는 mnist 데이터 세트를 사용하여 신경망을 이해하고 Python의 Keras 라이브러리를 배우고 학습하기 전에 먼저 다음 개념을 이해합니다.
1. MNIST 데이터 세트 : 머신 러닝 클래식 데이터 세트,이 데이터 세트는 수기 디지털 그레이 스케일 이미지 (28 픽셀 x 28 픽셀), 60,000 개의 학습 이미지와 10,000 개의 테스트 이미지를 포함하여 총 10 개의 범주 (0-9)입니다.
2. 클래스 : 머신 러닝 분류 문제의 특정 카테고리를 클래스라고합니다. 예 : 0에서 9까지 10 개의 숫자, 10 개의 범주가 있습니다.
3. 샘플 : 데이터 포인트를 샘플이라고하며, 모든 이미지는 니스트 데이터 세트에 있습니다.
4. 라벨 : 샘플에 해당하는 클래스를 라벨이라고합니다.
예 : 아래 그림에 해당하는 레이블은 9입니다.
2. 손으로 쓴 숫자 분류
Keras 에서 신경망을 구축하는 단계 는 다음과 같습니다.
1. Keras에서 mnist 데이터 세트를로드합니다.
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_iamges 및 train_labels 는 모델 의 학습 세트 를 형성하고 모델은 학습 세트를 통해 학습합니다.
test_images 및 test_labels 는 모델 의 테스트 세트 를 형성 하고 모델은 테스트 세트를 통해 테스트됩니다.
이미지는 레이블이 있는 Numpy 배열로 인코딩됩니다 값 범위가 0-9 인 숫자 배열입니다. 이미지와 레이블은 일대일로 대응합니다.
train_images.shape #(60000, 28, 28)
len(train_labels) #60000
test_images.shape #(10000, 28, 28)
len(test_labels) #10000
위의 코드를 통해 학습 세트에 28x28 크기의 이미지 60,000 개가 포함되어 있음을 알 수 있습니다.
2. 네트워크 아키텍처
from keras import models
from keras import layers
network = models.Sequential() #创建神经网络模型
network.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))
network.add(layers.Dense(10, activation='softmax'))
위 코드에서 Dense 는 신경망의 완전히 연결된 계층을 나타냅니다 . 첫 번째 계층에는 512 개의 뉴런이 있고 활성화 함수는 relu이고 두 번째 계층은 10 채널 소프트 맥스 계층입니다. 일반적으로 마지막 레이어의 출력 크기는 총 데이터 범주 수입니다. 예 :이 기사에서 손으로 쓴 숫자 세트 (0-9)에는 10 개의 범주가 있습니다.
3. 컴파일 단계
network.compile(optimizer = 'rmsprop',
loss = 'categorical_crossentropy',
metrics = ['accuracy'])
Optimeizer는 의미 최적화 :이 문서는 rmsprop 최적화를 사용하며,
손실은입니다 손실 함수 :;이 문서는 일반적으로 사용되는 교차 엔트로피 손실 함수를 사용하는
메트릭은입니다 모니터링 지표 : 정확성에 대한 예를 들어,이 문서에서는 걱정.
4. 이미지 데이터 준비
훈련을 시작하기 전에 먼저 데이터를 전처리하고 데이터를 float32 배열로 변환합니다. 모양은 (60000, 28 * 28)이고 값 범위는 0 ~ 1입니다.
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
5. 라벨 준비
from keras.utils import to_categorical
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels
제 모델 트레이닝
트레이닝 방법에 맞는 데이터 호출함으로써 이루어진다 피팅 (착용감) 초상권
network.fit(train_images, train_labels, epochs = 50, batch_size = 128)
Epochs는 50 라운드의 훈련을 나타내며 자신의 기계 성능에 따라 설정할 수 있습니다.
batch_size는 각 학습 라운드의 샘플 수를 나타냅니다 (예 :이 문서의 128 개, 즉 학습 당 128 개 샘플).
7. 모델 정확도
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)
모델 성능 평가 결과로 학습 세트의 정확도 만 사용하면 과적 합이 발생할 수 있으며, 일반적으로 딥 러닝은 데이터 세트의 일부를 테스트 세트로 남겨 모델의 분류 성능을 평가합니다.
셋, 코드
전체 코드 목록
from keras.datasets import mnist
from keras import models
from keras import layers
from keras.utils import to_categorical
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))
network.add(layers.Dense(10, activation='softmax'))
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
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
network.fit(train_images, train_labels, epochs = 50, batch_size = 128)
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)