2.5 첫 번째 예제 다시 살펴보기
이제 신경망의 이면에 어떤 원리가 있는지 기초적인 내용을 이해했을 것입니다. 첫 번째 예제로 다시 돌아가서 이전 절에서 배웠던 내용을 이용하여 코드를 자세하게 리뷰합시다.
입력 데이터
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
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
- type : float32,
- 훈련 데이터 크기: (60000, 28*28)
- 테스트 데이터 크기: (10000, 28*28)
신경망
network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))
- 네트워크에 2개의 Dense 층이 연결
- 각 층은 가중치 텐서를 포함하여 입력 데이터에 대한 몇 개의 간단한 텐서 연산을 적용
- 가중치 텐서는 네트워크가 정보를 저장하는 곳
네트워크 컴파일 단계
network.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
- 손실함수 :
categorical_crossentropy
가중치 텐서를 학습하기 위한 피드백 신호로 사용되며 훈련하는 동안 최소화 - 미니 배치 확률적 경사 하강법을 통해 손실이 감소
- 경사 하강법을 적용하는 구체적인 방식은 첫 번째 매개변수로 전달된
rmsprop
옵티마이저에 의해 결정
훈련 반복
network.fit(train_images, train_labels, epochs=5, batch_size=128)
fit 메서드를 호출했을 때 다음과 같은 일이 일어납니다.
댓글남기기