(๋ณธ ํ๋ก์ ํธ ์ฝ๋๋ ํจ์บ ๋ฅ๋ฌ๋ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ ์ฝ๋์ด๋ค)
<์ด์ ๊ธ>
https://silvercoding.tistory.com/9
[fashion MNIST ํ๋ก์ ํธ] 1. multi-label ๋ถ๋ฅ, fashion MNIST ๋ฐ์ดํฐ ์์๋ณด๊ธฐ
(๋ณธ ํ๋ก์ ํธ ์ฝ๋๋ ํจ์บ ๋ฅ๋ฌ๋ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ ์ฝ๋์ด๋ค) ์ด๋ฒ์๋ ๋ ์ ๋ช ํ ๋ฐ์ดํฐ์ธ fashion MNIST๋ฅผ ์ด์ฉํ์ฌ ๋ฉํฐ๋ ์ด๋ธ ๋ถ๋ฅ๋ฅผ ํด๋ณผ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ๋ฉํฐ๋ ์ด๋ธ์ด ๋ฌด์์ธ์ง ์์๋ณด๊ณ ๋
silvercoding.tistory.com
์ด์ ๊ธ์์ fashion MNIST์ ๋ํ์ฌ ์์๋ณด์๋ค. MNIST์ ๋์ผํ ํํ๋ฅผ ๊ฐ์ง๊ณ ์์๋ค. ์ด๋ฒ ๊ธ์์๋ ์ด๋ฌํ fashion MNIST ๋ฐ์ดํฐ์ ์ ์ ์ฒ๋ฆฌํ๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๋๋ก ํ๋ค.
์ ์ฒ๋ฆฌ ์์
(1) data type ๋ณ๊ฒฝ (์ ์ -> ์ค์)
๋ฐ์ดํฐ์ ์ด๋ฏธ์ง์ ๊ฐ์ 0-255 ์ธ uint8 ํ์ ์ด์๋ค. ๊ทธ๋์ ๋ฐ์ดํฐ ํ์ ์ ์ค์ํ์ผ๋ก ๋ฐ๊พธ์ด ์ฃผ๊ณ , ๋ฒ์๋ฅผ 0-1 ๋ก ๋ฐ๊พธ์ด ์ค๋ค.
ํน์ uint8 ํ์ ์ด ๊ถ๊ธํ๋ค๋ฉด ์ด๊ณณ์์ ์ค๋ช ์ ํด๋ ๋ถ๋ถ์ ์ฝ์ด๋ณด์.
https://silvercoding.tistory.com/3
[MNIST ํ๋ก์ ํธ] 1. MNIST ๋ฐ์ดํฐ ์์๋ณด๊ธฐ
(์ด๋ฒ ํ๋ก์ ํธ ์ฝ๋๋ ํจ์บ ๋ฅ๋ฌ๋ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ ์ฝ๋์ด๋ค) ์ค๋ ์์๋ณผ ๋ฐ์ดํฐ๋ ๋ฅ๋ฌ๋ ์ ๋ฌธ ๋ ๋ฌด์กฐ๊ฑด ๋ฐฐ์ฐ๋ ์ ๋ช ํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ธ MNIST ๋ฐ์ดํฐ์ ์ด๋ค. ์ฌ์ง๊ณผ ๊ฐ์ด ์์ผ๋ก ์ง์ ์ด ์ซ์
silvercoding.tistory.com
train_images = train_images.astype(np.float64)
test_images = test_images.astype(np.float64)
์ด๋ ๊ฒ astype ์ ์ด์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํด ์ฃผ๋ฉด ๋ฐ์ดํฐ ํ์ ์ ๋ฐ๊ฟ์ค ์ ์๋ค. ์ด์ dtype์ ์ฐ์ด๋ณด๋ฉด uin8์ด ์๋ float64๋ก ๋ฐ๋์ด ์์ ๊ฒ์ด๋ค.
(2) normalize
normalize์์
์ ํ์ฌ 0~1 ์ ๊ฐ์ ๊ฐ์ง๋๋ก ๋ณํํด์ฃผ๋๋ก ํ์.
์์ ๋ค์๊ณผ ๊ฐ๋ค.
normalize(x) = x - ์ต์๊ฐ / ์ต๋๊ฐ - ์ต์๊ฐ
normalize(x) = x / ์ต๋๊ฐ (์ต์๊ฐ์ด 0์ผ ๋ : ์ง๊ธ ๋ฐ์ดํฐ์
์ ๊ฒฝ์ฐ)
ํ์ฌ MNIST ๋ 0-255 ์ ์ซ์์ด๋ฏ๋ก ๋ฐ์ ์์ ๋ฐ๋ฅด๋ฉด ๋๋ค.
(train_images / 255.0).min(), (train_images / 255.0).max()
์ด๋ ๊ฒ ํ๋ฉด ๋ฐ๋ก ์ต์๊ฐ์ด 0.0, ์ต๋๊ฐ์ด 1.0 ์ผ๋ก ๋ณํํ๊ฒ ๋๋ค.
*** normalize๋ฅผ ํจ์๋ก ๊ตฌํํ์ฌ ์ผ๋ฐํ ์ํค๊ธฐ
def norm(data):
min_v = data.min()
max_v = data.max()
return (data - min_v) / (max_v - min_v)
์ด๋ฌํ normalize ํจ์๋ฅผ ์์ฑํด ๋์ผ๋ฉด ์ต์๊ฐ์ด 0์ด ์๋ ๋ฐ์ดํฐ๋ ์์ฝ๊ฒ ์ ๊ทํ ํด์ค ์ ์๋ค.
์ฌ๊ธฐ์ ๋ฐ์ดํฐ์ shape, dtype, ๋ฒ์(์ต๋๊ฐ, ์ต์๊ฐ)์ ๋ค์ ํ์ธํด ๋ณธ๋ค์ ์๊ฐํ๋ก ๋์ด๊ฐ์! (ํฌ์คํ ์ ์๋ต)
์ฌ๋ฌ์ฅ ์๊ฐํ ํด๋ณด๊ธฐ (ex, 5์ฅ)
์ด ์์ ๋ ๊ณ์ ๋ฐ๋ณต๋๋ฏ๋ก ๊ฐ๋จํ๊ฒ ์์ฑํด ๋๊ฐ๋ฉฐ ๋ง์น๋๋ก ํ๋ค.
- (5, 28, 28) ---> (28, 28 * 5) shape ๋ณ๊ฒฝ (hstack, transpose๋ก ๊ฐ๋ฅ)
์ด๋ฒ์๋ hstack์ ์๋ตํ๊ณ , transpose ๋ฐฉ๋ฒ์ผ๋ก๋ง ์งํํ๋ค.
์ด๊ณณ์์ hstack์ ์ฌ์ฉํ ์ ์ด ์๋ค.
https://silvercoding.tistory.com/4
[MNIST ํ๋ก์ ํธ] 2. MNIST ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌ, ์๊ฐํ
(์ด๋ฒ ํ๋ก์ ํธ ์ฝ๋๋ ํจ์บ ๋ฅ๋ฌ๋ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ ์ฝ๋์ด๋ค) <์ด์ ํฌ์คํ > https://silvercoding.tistory.com/3 [MNIST ํ๋ก์ ํธ] 1. MNIST ๋ฐ์ดํฐ ์์๋ณด๊ธฐ (์ด๋ฒ ํ๋ก์ ํธ ์ฝ๋๋ ํจ์บ ๋ฅ๋ฌ๋ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ
silvercoding.tistory.com
train_images[:5].transpose((1, 0, 2)).reshape(28, -1).shape
(28, 140) ์ด ๋์ค๋ฉด ์ ์!
์ด์ ์ด๊ฑธ plt๋ก ๊ทธ๋ ค๋ณด๋ฉด (์ฝ๋ ์๋ต)
์ด๋ ๊ฒ ์ค๋ฅ ์์ด 5์ฅ์ ํ๋ฒ์ ์ถ๋ ฅํ ์ ์๊ฒ ๋์๋ค.
- ์ข ๋ฅ๋ผ๋ฆฌ ์๊ฐํ ํ๊ธฐ
def filter(label, count=5) :
imgs = train_images[np.argwhere(train_labels == label)[:count, ..., 0]].transpose((1, 0, 2)).reshape(28, -1)
plt.imshow(imgs, cmap='gray')
plt.title(idx2label(label))
plt.show()
filter ํจ์๋ฅผ ๋ง๋ค์ด์ ๋ณด๊ณ ์ถ์ ์๋ฅ ์ข ๋ฅ ๋ผ๋ฒจ์ ์ง์ด ๋ฃ์ผ๋ฉด, ๊ทธ ์ข ๋ฅ๋ผ๋ฆฌ ์๊ฐํ๋ฅผ ํด๋ณผ ์ ์๋ค. ์ ๋ฒ์ ๋ง๋ค์ด ๋์๋ idx2label ์ ์ด์ฉํ์ฌ title๋ ์ง์ ํด์ฃผ์๋ค.
filter(๋ ์ด๋ธ, ์๊ฐํ ๊ฐฏ์) ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ๋๋ค.
filter(9, 6)
9๋ฒ์งธ ๋ผ๋ฒจ์ธ ์ตํด๋ถ์ธ 6๊ฐ์ง๋ฅผ ๊ทธ๋ ค ๋ณด์๋ค.
๋ค์์๊ฐ์๋ Data augmentation๊ณผ ๋ชจ๋ธ๋ง์ ํ๋ ํฌ์คํ ์ ํ ์์ ์ด๋ค.