- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- tapply
- 티스토리챌린지
- SQL
- Request
- Observable
- cocoapods
- scheduledTimer
- substr
- Linux
- swiftUI
- 딥러닝
- Python
- 시각화
- struct
- 연산자
- rest api
- HTTP
- ios
- MVC
- sigmoid
- r
- deeplearning
- decode
- ReLU
- 명령어
- barplot
- rxswift
- SWIFT
- Optional
- 오블완
iOS 개발 기록 블로그
딥러닝 MNIST 손글씨 필기체 데이터 다루기 1부 본문
MNIST (손글씨 필기체) 데이터
우선 MNIST 데이터를 불러와봅시다.
여기서부터는 파이참 에디터를 사용하겠습니다.
1. 책 소스코드와 데이터를 다운로드 받는다.
https://github.com/WegraLee/deep-learning-from-scratch
GitHub - WegraLee/deep-learning-from-scratch: 『밑바닥부터 시작하는 딥러닝』(한빛미디어, 2017)
『밑바닥부터 시작하는 딥러닝』(한빛미디어, 2017). Contribute to WegraLee/deep-learning-from-scratch development by creating an account on GitHub.
github.com
2. dataset 이라는 폴더를 워킹 디렉토리에 가져다둔다.
(실행하는 스크립트가 있는 디렉토리)
3. 아래의 파이썬 코드를 실행해서 필기체 데이터 하나를 시각화한다.
위와 같이 데이터셋 폴더를 정확한 위치에 두고 코드를 실행하면 (Alt + Shift + F10)
이렇게 5 데이터 중에 하나가 나옵니다.
이제 train 데이터가 몇 개인지 확인하여 봅시다.
아래 콘솔창에 60000이라고 나오는걸 확인하시면 잘 나온 겁니다.
load_mnist 함수에서 flatten 파라미터를 False로 하고 데이터의 차원 수와 shape를 한번 출력해봅시다.
결과
28x28x1 이미지가 60000장 있다고 생각하시면 편합니다.
1은 채널인데 1일 경우 흑백이라고 보시면 되고 3이면 RGB 값으로 컬러값이 나옵니다.
이번에는 flatten 값을 True로 하고 똑같이 출력할 경우 아래와 같이 결과가 나옵니다.
28x28x1 형태의 이미지를 1차원 array로 만든 데이터가 60000개 있는거라고 보시면 됩니다.
이해가 잘 안가신다면 저 중에 한장을 출력해서 예시를 보겠습니다.
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 3 18 18 18 126 136 175 26 166 255
247 127 0 0 0 0 0 0 0 0 0 0 0 0 30 36 94 154
170 253 253 253 253 253 225 172 253 242 195 64 0 0 0 0 0 0
0 0 0 0 0 49 238 253 253 253 253 253 253 253 253 251 93 82
82 56 39 0 0 0 0 0 0 0 0 0 0 0 0 18 219 253
253 253 253 253 198 182 247 241 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 80 156 107 253 253 205 11 0 43 154
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 14 1 154 253 90 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 139 253 190 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 11 190 253 70 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 241
225 160 108 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 81 240 253 253 119 25 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 45 186 253 253 150 27 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 16 93 252 253 187
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 249 253 249 64 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 130 183 253
253 207 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 39 148 229 253 253 253 250 182 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 24 114 221 253 253 253
253 201 78 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 23 66 213 253 253 253 253 198 81 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 18 171 219 253 253 253 253 195
80 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
55 172 226 253 253 253 253 244 133 11 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 136 253 253 253 212 135 132 16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
위의 결과가 flatten을 True로 한 경우이고
[[[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 3 18 18 18 126
136 175 26 166 255 247 127 0 0 0 0]
[ 0 0 0 0 0 0 0 0 30 36 94 154 170 253 253 253 253
253 225 172 253 242 195 64 0 0 0 0]
[ 0 0 0 0 0 0 0 49 238 253 253 253 253 253 253 253 253
251 93 82 82 56 39 0 0 0 0 0]
[ 0 0 0 0 0 0 0 18 219 253 253 253 253 253 198 182 247
241 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 80 156 107 253 253 205 11 0 43
154 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 14 1 154 253 90 0 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 139 253 190 2 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 11 190 253 70 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 35 241 225 160 108
1 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 81 240 253 253
119 25 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 186 253
253 150 27 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 93
252 253 187 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
249 253 249 64 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 130 183
253 253 207 2 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 39 148 229 253 253
253 250 182 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 24 114 221 253 253 253 253
201 78 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 23 66 213 253 253 253 253 198 81
2 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 18 171 219 253 253 253 253 195 80 9 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 55 172 226 253 253 253 253 244 133 11 0 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 136 253 253 253 212 135 132 16 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0]]]
이 결과가 False로 한 경우입니다.
대괄호로 감싸진걸 보시면 3개가 감싸져 있는걸 보실 수 있으실 겁니다.
28x28x1 인 데이터 array이고
전자의 경우 1개의 대괄호로 감싸져 있기 때문에 784로 일렬로 flatten, 말 그대로 평탄하게 일자로 만들었다고 생각하시면 됩니다.
one hot encoding
위 이미지 같이 원핫인코딩을 False로 주고 출력해보면
5라고 나옵니다.
그러나 True로 주면
위와 같이 나옵니다.
0부터 9까지 라벨 중 5인 여섯번째만 1의 값으로 나온 array 데이터가 나옵니다.
테스트 데이터
flatten한 테스트 데이터를 담는 get_data라는 함수를 만들었습니다.
전체 테스트 데이터의 shape와 label과 그 라벨의 총 개수를 출력해봤습니다.
테스트 데이터는 총 10000장이 있었고 라벨을 보시면 그 이미지가 어떤 숫자인지를 나타냅니다.
3층 신경망에 테스트 데이터 10000장 넣기
이글은 여기서 마치고 다음에 위에 정리한 필기를 코드로 옮겨보려고 합니다.
'Deep Learning' 카테고리의 다른 글
딥러닝 소프트맥스(softmax) 함수 공식 구현 과정 (0) | 2022.01.05 |
---|---|
딥러닝 신경망의 내적, 3층 신경망 전체 코드 (0) | 2021.12.23 |
딥러닝의 시그모이드(sigmoid), 렐루(Relu), 행렬의 내적 (0) | 2021.12.05 |
신경망 함수 종류와 시각화 (step func, sigmoid func) (0) | 2021.12.04 |
딥러닝 파이썬으로 퍼셉트론 AND, OR, NAND, XOR 게이트 구현하기 (0) | 2021.12.03 |