[신경망-MNIST] MNIST 데이터셋

2026. 1. 22. 13:12·AI/이론
반응형

🔢 MNIST( Modified National Institute of Standards and Technology)

 

🧩 역할

 

손글씨 숫자 이미지 데이터셋, 딥러닝 입문 데이터셋

 

🧱 구성

  • 훈련용 이미지 60,000장
  • 시험 이미지 10,000장
  • 28x28크기의 회색이미지(1채널) = 784픽셀
  • 픽셀은 0 ~ 255

 

✅  입력 데이터 살펴보기

(train_images, train_labels), (test_images, test_labels) = load_mnist(flatten = True, nomalize= Flase)

print(train_images.shape) # (60000,784)
print(train_labels.shape) # (60000, )
print(test_images.shape) # (10000,784)
print(test_labels.shape) # (10000,784)

 

스펙을 보면 구성 형태와 동일하다는 것을 볼 수 있다. 

 

옵션

  • normalize: 입력 이미지의 픽셀 값을 0.0 ~ 1.0으로 정규화할 지, False면 0~255
  • flatten: 입력 이미지를 1차원 배열로 할 지, True면 784, False면 1 x 28 x28의 3차원 배열 형태
  • one_hot_label: 원-핫 인코딩 형태, True면 정답만 1 나머지는 0, False면 일반 숫자

🔍 예측

 

상세 코드는 조금 건너띄고 굵직한 흐름만 살펴보자.

 

test_images, test_labels = get_data()
network = init_network() # 가중치와 편향 데이터 가져오기

def predict(network, input):

    w1, w2, w3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    a1 = np.dot(input,w1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1,w1) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2,w1) + b3
    y = softmax(a3)

return y


accuracy_cnt = 0

for i in range(len(test_images)):
	y = predict(network, test_images[i])
    p = np.argmax(y)
    
    if p == test_labels[i]:
    	accuracy_cnt += 1
        

print(f"Accuracy: ${str(float(accuracy_cnt) / len(x)}") #0.9352

 

현재 위 코드는, predict함수에 한번에 이미지 데이터 하나씩 넣고 있다.

 

과정은 이렇다 

 

test_images[i](1X784) X w1(784X50) X w2(50X100) X w3(100X10) -> Y (1X10)

 

여기서 만약 100개 이미지가 들어오면 어디가 바뀔까??

 

test_images[i](100X784) X w1(784X50) X w2(50X100) Xw3(100X10) -> Y (100X10)

 

이렇게 데이터 여러개를 하나로 묶는 것을 배치(batch)라 한다.

 

💡 배치 처리의 장점은 뭐가 있을까?

배치처리의 장점은 크게 두가지 이유가 있다.

첫번 쨰는 수치 계산 라이브러리때문이다.
이미 수치 계산 라이브러리는 계산적인 최적화가 되어 있기 떄문에, 큰 배열을 효율적으로 처리할 수 있다.

두번 째는 데이터 전송 병목을 줄일 수 있다.
단일 데이터를 여러번 보내는 것보다, 같은 양의 데이터를 한번에 보내는 것이 버스에 주는 부하를 줄여
I/O를 통해 데이트를 읽는 횟수가 줄어들어, CPU 또는 GPU의 순수 계산 수행 비율이 높아진다.

 

위의 코드에 배치처리 개념을 적용해보자.

 

test_images, test_labels = get_data()
network = init_network() # 가중치와 편향 데이터 가져오기

def predict(network, input):

    w1, w2, w3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    a1 = np.dot(input,w1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1,w1) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2,w1) + b3
    y = softmax(a3)

return y


accuracy_cnt = 0
batch_size = 100

for i in range(0, len(test_images), batch_size):
	test_images_batch = test_images[i:i+batch_size]
	y_batch = predict(network, test_images_batch)
    p = np.argmax(y_batch, axis=1)
    accuracy_cnt += np.sum(p == test_labels[i:i+batch_size])
        

print(f"Accuracy: ${str(float(accuracy_cnt) / len(x)}")

출처

https://docs.ultralytics.com/ko/datasets/classify/mnist/

 

MNIST 데이터셋

 

docs.ultralytics.com

 

 

반응형

'AI > 이론' 카테고리의 다른 글

[신경망-손실함수] 손실함수란?  (0) 2026.01.25
[신경망-학습] 학습이란?  (0) 2026.01.24
[신경망-활성화 함수] 소프트맥스 함수  (1) 2026.01.14
[신경망] 3층 신경망 구현해보기  (0) 2026.01.13
[신경망-활성화 함수] 활성화 함수  (0) 2026.01.12
'AI/이론' 카테고리의 다른 글
  • [신경망-손실함수] 손실함수란?
  • [신경망-학습] 학습이란?
  • [신경망-활성화 함수] 소프트맥스 함수
  • [신경망] 3층 신경망 구현해보기
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (325) N
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (41)
        • swift (34)
        • python (6)
        • Kotlin (1)
      • iOS (133) N
        • UIKit (37)
        • Combine (1)
        • SwiftUI (33) N
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (20)
        • 어노테이션 (6)
        • 튜토리얼 (13)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
      • AI (9)
        • 이론 (9)
        • MCP (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    UIKit
    CS
    Tuist
    SwiftUI
    protocol
    프로그래머스
    property
    dp
    AVFoundation
    concurrency
    dfs
    IOS
    dispatch
    백준
    Swift
    Spring
    GIT
    lifecycle
    투포인터
    boostcamp
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
[신경망-MNIST] MNIST 데이터셋
상단으로

티스토리툴바