(๋ณธ ํ๋ก์ ํธ ์ฝ๋๋ ํจ์บ ๋ฅ๋ฌ๋ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ ์ฝ๋์ด๋ค)
<์ด์ ํฌ์คํ
>
https://silvercoding.tistory.com/6
[celeba ํ๋ก์ ํธ] 1. celeba ๋ฐ์ดํฐ ์ดํด๋ณด๊ธฐ
(๋ณธ ํ๋ก์ ํธ ์ฝ๋๋ ํจ์บ ๋ฅ๋ฌ๋ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ ์ฝ๋์ด๋ค) https://www.tensorflow.org/datasets/catalog/celeb_a celeb_a | TensorFlow Datasets CelebFaces Attributes Dataset (CelebA)์ ๊ฐ๊ฐ 40 ๊ฐ์ ์์ฑ..
silvercoding.tistory.com
์ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด์ ๋ฐ์ดํฐ๋ฅผ ์ ํ์
ํด์ผ ํ๋ค. ๋ํ ์ค์๋ฅผ ํ์ง ์๊ธฐ ์ํด์ ๋ฐ์ดํฐ์ ๋ฒ์, ํฌ๊ธฐ, ๋ฐ์ดํฐ ํ์
์ ์์๋ก ํ์ธํด ์ฃผ๋ฉฐ ์ ์ฒ๋ฆฌ๋ฅผ ์งํํ๋๋ก ํ๋ค. (ํฌ์คํ
์์๋ ์๋ต)
์ด์ ํฌ์คํ
์ ๋ฐ๋ฅด๋ฉด, ๋ฒ์๋ 0.0-1.0, ์ด๋ฏธ์ง ํฌ๊ธฐ๋ (2000, 72, 59, 3) (200, 72. 59. 3), ๋ผ๋ฒจ ํฌ๊ธฐ๋ (2000, 2) (200, 2), ๋ฐ์ดํฐ ํ์
์ ์ด๋ฏธ์ง float64, ๋ผ๋ฒจ์ int8 ์ด์๋ค.
์ด์ ์๋ ๋งํ๋ฏ์ด ์ด๋ฒ ํ๋ก์ ํธ์์๋ normalize๋ฅผ ํ ํ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฒ์๋ ๋ผ๋ฒจ๋ง ์ ์ฒ๋ฆฌ ์์ผ์ฃผ๋ฉด ๋๋ค.
์ ์ฒ๋ฆฌ ์์
(1) ๋ผ๋ฒจ ํฌ๊ธฐ ๋ณ๊ฒฝ
(๋ฐฐ์น, 2) --> (๋ฐฐ์น, 2) (๋ฐฐ์น, 2)
(๋ฐฐ์น, (์ฑ๋ณ, ์์)) --> (๋ฐฐ์น, ๋จ์, ์ฌ์) (๋ฐฐ์น, ์์, ์์์)
# (๋ฐฐ์น, 2) ---> (๋ฐฐ์น, 1) (๋ฐฐ์น, 2)
train_male_labels, train_smile_labels = np.split(train_labels, 2, axis=1)
test_male_labels, test_smile_labels = np.split(test_labels, 2, axis=1)
# ์ ๋๋ ์ก๋์ง ํ์ธ
print(train_male_labels.shape, train_smile_labels.shape)
print(train_male_labels[777], train_smile_labels[777], train_labels[777])
shape์ ๊ฐ๊ฐ (2000, 1) ์ด ๋์ค๋ฉด ๋๋ค. test์ shape์ ์ถ๋ ฅํด๋ณด๋ฉด (200, 1) ์ด ๋์ฌ ๊ฒ์ด๋ค.
[0] [0] [0 0] ๋๋ ์ง ๋ผ๋ฒจ๋ค๊ณผ ๋๋ ์ง๊ธฐ ์ ๋ผ๋ฒจ์ ๋น๊ตํ ์ฝ๋์ด๋ค. ์ ์ 777๋ฒ์งธ ์ฌ์ง ์์๋ ์ฌ์์๊ธฐ ๋๋ฌธ์ ์ ์ถ๋ ฅ๋ ๊ฒ์ ์ ์ ์๋ค.
from tensorflow.keras.utils import to_categorical train_male_labels = to_categorical(train_male_labels) train_smile_labels = to_categorical(train_smile_labels) test_male_labels = to_categorical(test_male_labels) test_smile_labels = to_categorical(test_smile_labels)
๊ทธ๋ค์์ผ๋ก๋ ์ํซ์ธ์ฝ๋ฉ์ผ๋ก ๋๋์ด ์ค๋ค.
(2000, 2) (2000, 2)
(200, 2) (200, 2)
๋ชจ๋ธ๋ง ๋จ๊ณ ๋ ์ฑ๋ณ๊ณผ ์์ ์ฌ๋ถ๋ฅผ ๊ฐ๊ฐ ๋ชจ๋ธ๋งํ๊ธฐ๋ ํ๊ณ , ๋ฉํฐ ์์ํ ๋ชจ๋ธ๋ง๋ ํ ์์ ์ด๋ค.
๊ทธ๋์ (2000, 2) (2000, 2) ---> (2000, 4) ๋ก ํฉ์น ๋ผ๋ฒจ๋ ํ์ํ๋ค. ๋ง๋ค์ด ๋์.
train_labels2 = np.concatenate([train_male_labels, train_smile_labels], axis = 1) test_labels2 = np.concatenate([test_male_labels, test_smile_labels], axis = 1) print(train_labels2.shape, test_labels2.shape)
(2000, 4) (200, 4) ์ด๋ ๊ฒ ํฉ์น ๋ผ๋ฒจ๋ ์์ฑํ๋ค! ์๋ฅผ๋ค์ด ๋จ์๊ณ ์๊ณ ์์ง ์๋ค๋ฉด [0 1 1 0] ์ด๋ฐ์์ผ๋ก ๋์ค๊ฒ ๋ ๊ฒ์ด๋ค.
์ด๋ฒ์ ์ด๋ ๊ฒ ํด์ ์ ์ฒ๋ฆฌ๋ฅผ ๋๋ธ๋ค.
---> ๊ฒฐ๋ก ์ ์ผ๋ก ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ : (๋ฐฐ์น, 2) --> (๋ฐฐ์น, 2) (๋ฐฐ์น, 2) / (๋ฐฐ์น, 4) ์ด๋ ๊ฒ ๋ ์ข
๋ฅ์ ๋ผ๋ฒจ์ ํ๋ํ๋ค!
์ฌ๋ฌ ์ฅ ์๊ฐํ ํ๊ธฐ
(1) ์ด๋ฏธ์ง shape ๋ณ๊ฒฝ
์ด ๋ด์ฉ์ ์ ๋ฒ ํ๋ก์ ํธ์ ๋์ผํ๋ค. ๊ทธ๋์ hstack ์ ์๋ตํ๊ณ , transpose ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์ shape์ ๋ณ๊ฒฝํด ์ค ๊ฒ์ด๋ค.
train_images[:5].transpose((1, 0, 2, 3)).reshape((72, -1, 3)).shape
shape์ (5, 72, 59, 3) ---> (72, 5*59, 3) ์ผ๋ก ๋ณ๊ฒฝํด ์ฃผ์ด์ผ ํ๋ค. ๋ฐ๋ผ์ transpose๋ก ์์น๋ฅผ ๋ณ๊ฒฝํด์ฃผ๊ณ , reshape์ผ๋ก shape์ ๋ง์ถฐ์ฃผ๋ฉด ๋๋ค.
์ด๋ฅผ plt๋ก ์๊ฐํ ํด๋ณด๋ฉด
์ด๋ ๊ฒ ์ฐ์์ผ๋ก 5์ฅ์ ์๊ฐํ ํ ์ ์๋ค.
์ด๋ฒ์๋ ์ ๋ง ๊ฐ๋จํ๊ฒ ์ ์ฒ๋ฆฌ์ ์๊ฐํ๋ฅผ ๊ตฌํํด ๋ณด์๋ค. ๋ค์์ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ธ๋งํ๋ ๋ฐฉ๋ฒ์ ํฌ์คํ
ํ ์์ ์ด๋ค.