(๋ณธ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” ํŒจ์บ  ๋”ฅ๋Ÿฌ๋‹ ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•œ ์ฝ”๋“œ์ด๋‹ค)

<์ด์ „ ํฌ์ŠคํŒ…>
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์žฅ์„ ์‹œ๊ฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.




์ด๋ฒˆ์—๋Š” ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ์ „์ฒ˜๋ฆฌ์™€ ์‹œ๊ฐํ™”๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด์•˜๋‹ค. ๋‹ค์Œ์€ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋ธ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํฌ์ŠคํŒ… ํ•  ์˜ˆ์ •์ด๋‹ค.

+ Recent posts