OneclickAI commited on
Commit
795f477
ยท
verified ยท
1 Parent(s): 0ce2adf
Files changed (1) hide show
  1. README.md +0 -226
README.md DELETED
@@ -1,226 +0,0 @@
1
- ---
2
- license: apache-2.0
3
- ---
4
-
5
- ์•ˆ๋…•ํ•˜์„ธ์š” Oneclick AI ์ž…๋‹ˆ๋‹ค!!
6
- ์˜ค๋Š˜์€, CNN ๋ชจ๋ธ์— ๋Œ€ํ•ด์„œ ๊นŠ๊ฒŒ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.
7
-
8
- ๋”ฅ๋Ÿฌ๋‹์— ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ์ด์œ ๊ฐ€ ๋ฐ”๋กœ CNN์˜ ํ•ฉ์„ฑ๊ณฑ ์‹ ๊ฒฝ๋ง (Convolutional Neural Network, CNN) ๋•๋ถ„์ธ๋ฐ์š”, ์˜ค๋Š˜์€ ์ด ์‹ ๊ฒฝ๋ง์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€, CNN์€ ์–ด๋–ป๊ฒŒ ์‚ฌ์ง„ ์†์˜ ๊ณ ์–‘์ด์™€ ๊ฐœ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.
9
-
10
- ---
11
-
12
- ## ๋ชฉ์ฐจ
13
- 1. CNN ํ•ต์‹ฌ ์›๋ฆฌ ํŒŒ์•…ํ•˜๊ธฐ
14
- - ์™œ ์ด๋ฏธ์ง€์— CNN์„ ์‚ฌ์šฉํ• ๊นŒ?
15
- - CNN์˜ ํ•ต์‹ฌ : ์ง€์—ญ ์ˆ˜์šฉ ์˜์—ญ๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ณต์œ 
16
- - CNN์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ
17
- 2. ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•œ ๋‚ด๋ถ€ ์ฝ”๋“œ ๋“ค์—ฌ๋‹ค ๋ณด๊ธฐ
18
- - keras๋กœ ๊ตฌํ˜„ํ•œ CNN ๋ชจ๋ธ ์•„ํ‚คํ…์ณ
19
- - model.summary()๋กœ ๊ตฌ์กฐ ํ™•์ธํ•˜๊ธฐ
20
- 3. ์ง์ ‘ CNN ๊ตฌํ˜„ํ•ด ๋ณด๊ธฐ
21
- - 1๋‹จ๊ณ„ : ๋ฐ์ดํ„ฐ ๋กœ๋“œ ๋ฐ ์ „์ฒ˜๋ฆฌ
22
- - 2๋‹จ๊ณ„ : ๋ชจ๋ธ ์ปดํŒŒ์ผ
23
- - 3๋‹จ๊ณ„ : ๋ชจ๋ธ ํ•™์Šต ๋ฐ ํ‰๊ฐ€
24
- - 4๋‹จ๊ณ„ : ํ•™์Šต๋œ ๋ชจ๋ธ ์ €์žฅํ•˜๊ธฐ
25
- - 5๋‹จ๊ณ„ : ๋ชจ๋ธ ์‚ฌ์šฉํ•˜๊ธฐ
26
- 4. ๋‚˜๋งŒ์˜ CNN ๋ชจ๋ธ ๋งŒ๋“ค์–ด๋ณด๊ธฐ
27
- - ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹
28
- - ๋ชจ๋ธ ๊ตฌ์กฐ ๋ณ€๊ฒฝํ•˜๊ธฐ
29
- - ์ „์ดํ•™์Šต์œผ๋กœ ์„ฑ๋Šฅ ๊ทน๋Œ€ํ™” ํ•˜๊ธฐ
30
-
31
- ---
32
-
33
- ## 1. CNN ํ•ต์‹ฌ์›๋ฆฌ ํŒŒ์•…ํ•˜๊ธฐ
34
- ๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ, CNN ์ด ์–ด๋–ค ์›๋ฆฌ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ดํ•ดํ•˜๋Š”์ง€ ๋จผ์ € ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
35
-
36
- **์™œ ์ด๋ฏธ์ง€์— CNN์„ ์‚ฌ์šฉํ• ๊นŒ??**
37
- ๋‹จ์ˆœํ•œ ์‹ ๊ฒฝ๋ง(Fully Connected Layer)์— ์ด๋ฏธ์ง€๋ฅผ ์ž…๋ ฅํ•˜๋ ค๋ฉด, 2์ฐจ์›์ธ ์ด๋ฏธ์ง€๋ฅผ 1์ฐจ์›์˜ ๊ธด ๋ฐ์ดํ„ฐ๋กœ ํŽผ์น˜๋Š” ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์ด ๊ผญ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
38
- ์ด ๊ณผ์ •์—์„œ ํ”ฝ์…€ ๊ฐ„์˜ ๊ณต๊ฐ„์ ์ธ ์ •๋ณด๊ฐ€ ์ „๋ถ€ ํŒŒ๊ดด๋ฉ๋‹ˆ๋‹ค.
39
- ์ด๋Š” ์–ด๋–ค ํ”ฝ์…€์ด ์„œ๋กœ ์ด์›ƒํ•ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์–ด์ ธ์„œ ๋ˆˆ์ด ์ฝ” ์˜†์— ์žˆ๋‹ค๋Š” ์œ„์น˜์ •๋ณด ๊ฐ™์€ ๋‚ด์šฉ์ด ๊ฐ€๋ผ์ € ๋ฒ„๋ฆฐ๋‹ค๋Š” ์˜๋ฏธ ์ž…๋‹ˆ๋‹ค.
40
- CNN์€ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ธ๊ฐ„์˜ ์‹œ์‹ ๊ฒฝ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฐฉํ•˜์—ฌ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
41
-
42
- **CNN์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด**
43
- ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ง€์—ญ์  ์ˆ˜์šฉ์˜์—ญ๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ณต์œ  ์ž…๋‹ˆ๋‹ค.
44
- - ์ง€์—ญ์  ์ˆ˜์šฉ ์˜์—ญ(Local Receptive Fields)
45
- ์‹ ๊ฒฝ๋ง์˜ ๊ฐ ๋‰ด๋Ÿฐ์ด ์ด๋ฏธ์ง€ ์ „์ฒด๊ฐ€ ์•„๋‹Œ, ์ž‘์€ ์ผ๋ถ€์—๋งŒ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
46
- ์ด๋Š” ์ „์ฒด ํ”ฝ์…€์— ๋Œ€ํ•ด์„œ๊ฐ€ ์•„๋‹Œ ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด 3 * 3 ํ”ฝ์…€์—๋งŒ ์ ์šฉ๋˜๋Š” ๋ฐฉ์‹์ธ๋ฐ์š”, ์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ์€ ์ด๋ฏธ์ง€์˜ ์ „์ฒด ๋งฅ๋ฝ๋ณด๋‹ค ์„ , ๋ชจ์„œ๋ฆฌ, ์งˆ๊ฐ๊ณผ ๊ฐ™์€ ์ง€์—ญ์ ์ธ ํŒจํ„ด์„ ๋จผ์ € ํ•™์Šตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
47
-
48
- - ํŒŒ๋ผ๋ฏธํ„ฐ ๊ณต์œ (Parameter Sharing)
49
- CNN์€ ์ด๋ฏธ์ง€ ์ „์ฒด๋ฅผ ํ•„ํ„ฐ๋ฅผ ํ†ตํ•ด์„œ ์Šค์บ”ํ•˜๋Š” ๋А๋‚Œ์œผ๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
50
- ๋”ฐ๋ผ์„œ, ํ•œ๋ฒˆ ์ด๋ฏธ์ง€์˜ ํŠน์ง•์„ ํ•™์Šตํ•˜๋ฉด, ์ด๋ฏธ์ง€์˜ ๋ชจ๋“  ์œ„์น˜์—์„œ ํ•ด๋‹น ํŠน์ง•์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
51
- ์ด๋ฅผ ํ†ตํ•ด์„œ ํ•™์Šตํ•  ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜๋ฅผ ๋งŽ์ด ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
52
-
53
- **CNN์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ**
54
- ์•ž์„  ์•„์ด๋””์–ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ, CNN์€ ๋‹ค์Œ 3๊ฐ€์ง€์˜ ๊ณ„์ธต์„ ์กฐํ•ฉํ•ด์„œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
55
- - ํ•ฉ์„ฑ๊ณฑ ๊ณ„์ธต (Convolutional Layer)
56
- ํ•™์Šต ๊ฐ€๋Šฅํ•œ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฏธ์ง€์˜ ํŠน์ง•์„ ์ถ”์ถœํ•ด ๋ƒ…๋‹ˆ๋‹ค.
57
- edge, corner ๋“ฑ์„ ์ถ”์ถœํ•˜์—ฌ ์–ป๋Š” ๊ฒฐ๊ณผ๋ฌผ์„ ํŠน์ง• ๋งต(Feature Map) ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
58
-
59
- - ํ’€๋ง ๊ณ„์ธต (Pooling Layer)
60
- ์•ž์„œ ๋งŒ๋“  ๋งต์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ์š”์•ฝ๋‹จ๊ณ„ ์ž…๋‹ˆ๋‹ค.
61
- ์ตœ๋Œ€ ํ’€๋ง(Max Pooling)์€ ํŠน์ • ์˜์—ญํ—ค์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํŠน์ง•(๊ฐ€์žฅ ํฐ ๊ฐ’)๋งŒ ๋‚จ๊ฒจ ๊ณ„์‚ฐ๋Ÿ‰์„ ์ค„์ด๊ณ , ๋ชจ๋ธ์ด ํŠน์ง•์˜ ๋ฏธ์„ธํ•œ ์œ„์น˜ ๋ณ€ํ™”์— ๋œ ๋ฏผ๊ฐํ•ด ํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.
62
-
63
- - ์™„์ „ ์—ฐ๊ฒฐ ๊ณ„์ธต (Dense Layer)
64
- ์ถ”์ถœ๋œ ํŠน์ง•๋“ค์„ ์ข…ํ•ฉํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ ์ด๋ฏธ์ง€๊ฐ€ ์–ด๋–ค ํด๋ž˜์Šค์— ์†ํ•˜๋Š”์ง€ ๋ถ„๋ฅ˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
65
-
66
- ---
67
-
68
- ## 2. ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•œ ๋‚ด๋ถ€ ์ฝ”๋“œ ๋“ค์—ฌ๋‹ค ๋ณด๊ธฐ
69
- ์ด์ œ, ์•ž์„œ ์„ค๋ช…ํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ, ์‹ค์ œ TensorFlow Keras ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์‹ค๊ฐํ•ด ๋ด…์‹œ๋‹ค.
70
- ๋‹ค์Œ์€, Keras๋กœ ๊ตฌํ˜„ํ•œ CNN ๋ชจ๋ธ ์•„ํ‚คํ…์ณ ์ž…๋‹ˆ๋‹ค.
71
- ```python
72
- import tensorflow as tf
73
- from tensorflow import keras
74
-
75
- # ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ ์ •์˜
76
- model = keras.Sequential([
77
- # Input: (28, 28, 1) ์ด๋ฏธ์ง€
78
- # ์ฒซ ๋ฒˆ์งธ Conv-Pool ๋ธ”๋ก
79
- keras.layers.Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=(28, 28, 1)),
80
- keras.layers.MaxPooling2D(pool_size=(2, 2)),
81
-
82
- # ๋‘ ๋ฒˆ์งธ Conv-Pool ๋ธ”๋ก
83
- keras.layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
84
- keras.layers.MaxPooling2D(pool_size=(2, 2)),
85
-
86
- # ๋ถ„๋ฅ˜๊ธฐ(Classifier)
87
- keras.layers.Flatten(),
88
- keras.layers.Dropout(0.5),
89
- keras.layers.Dense(10, activation="softmax"),
90
- ])
91
- ```
92
- ์ด์ œ, ์•ž์„œ ์„ค๋ช…ํ–ˆ๋˜ ์ด๋ก ์ด ์ด ์ฝ”๋“œ์— ์–ด๋–ป๊ฒŒ ๋…น์•„์žˆ๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.
93
-
94
- - **ํ•ฉ์„ฑ๊ณฑ ๊ณ„์ธต(Conv2D)**
95
- ```python
96
- keras.layers.Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=(28, 28, 1))
97
- ```
98
- ์ด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ, ํ•ฉ์„ฑ๊ณฑ ๊ณ„์ธต์„ ํ˜•์„ฑ, ๋‹ค์Œ ์•„์ด๋””์–ด๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
99
- 1. ์ง€์—ญ ์ˆ˜์šฉ์˜์—ญ
100
- ```kernel_size(3, 3)```์„ ํ†ตํ•ด์„œ ์ด๋ฏธ์ง€ ์ „์ฒด๊ฐ€ ์•„๋‹Œ 3 * 3 ํฌ๊ธฐ์˜ ์ž‘์€ ์˜์—ญ๋งŒ ๋ณด๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.
101
- ์ด๋ ‡๊ฒŒ, ์ง€์—ญ์  ์ˆ˜์šฉ์˜์—ญ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค
102
-
103
- 2. ํŒŒ๋ผ๋ฏธํ„ฐ ๊ณต์œ 
104
- ```Conv2D``` ๊ณ„์ธต์€ 32๊ฐœ์˜ ํ•„ํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
105
- 3 * 3ํ•„ํ„ฐ๋Š” ๊ณ ์œ ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ(๊ฐ€์ค‘์น˜)์„ธํŠธ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด ํ•„ํ„ฐ ํ•˜๋‚˜๊ฐ€ ์ด๋ฏธ์ง€ ์ „์ฒด๋ฅผ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค.
106
- ๋งŒ์•ฝ, ํŒŒ๋ผ๋ฏธํ„ฐ ๊ณต์œ ๊ฐ€ ์—†๋‹ค๋ฉด, ๊ฐ 3 * 3 ์œ„์น˜๋งˆ๋‹ค ๋ณ„๋„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํฌ๊ธฐ๊ฐ€ ์—„์ฒญ ์ปค์ง‘๋‹ˆ๋‹ค.
107
- ํ•˜์ง€๋งŒ, ํŒŒ๋ผ๋ฏธํ„ฐ ๊ณต์œ  ๋•๋ถ„์—, ์ด ๊ฒฝ์šฐ์—์„œ ```(3 * 3 * 1 +1) * 32 = 320``` ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋งŒ์œผ๋กœ ์ด๋ฏธ์ง€ ์ „์ฒด์˜ ํŠน์ง•์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
108
-
109
- - **ํ’€๋ง ๊ณ„์ธต(MaxPooling2D)**
110
- ```python
111
- keras.layers.MaxPooling2D(pool_size=(2, 2))
112
- ```
113
- ์•ž์„  ํ•ฉ์„ฑ๊ณฑ ๊ณ„์ธต์ด ์ƒ์„ฑํ•œ ํŠน์ง•๋งต์„ 2* 2 ํฌ๊ธฐ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ์˜์—ญ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’๋งŒ ๋‚จ๊ธฐ๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
114
- ์ด๋ฅผ ํ†ตํ•ด ๋งต ํฌ๊ธฐ๊ฐ€ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“œ๋Š” **๋‹ค์šด ์ƒ˜ํ”Œ๋ง**์ด ์ผ์–ด๋‚˜๊ณ , ๊ณ„์‚ฌ ใ„ดํšจ์œจ์„ฑ์ด ๋†’์•„์ ธ ๋ชจ๋ธ ํ•™์Šต์ด ๋” ๊ฐ€๋ฒผ์›Œ ์ง‘๋‹ˆ๋‹ค.
115
-
116
- - **์™„์ „ ์—ฐ๊ฒฐ ๊ณ„์ธต(Dense Layer)**
117
- ```python
118
- keras.layers.Flatten()
119
- keras.layers.Dense(10, activation="softmax")
120
- ```
121
- ์ตœ์ข… ๋ถ„๋ฅ˜๊ธฐ ์ด๋ฉฐ, ์™„์ „์—ฐ๊ฒฐ๊ณ„์ธต ์ž…๋‹ˆ๋‹ค.
122
- 1. ```keras.layers.Flatten()```
123
- ์™„์ „์—ฐ๊ฒฐ๊ณ„์ธต์€ 1์ฐจ์› ๋ฐฑํ„ฐ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—, Flastten ๊ณ„์ธต์ด ๋จผ์ € ๋“ค์–ด์™€ 2์ฐจ์› ํ˜•ํƒœ์˜ ํŠน์ง• ๋งต์„ ํ•œ ์ค„๋กœ ํŽผ์ณ์ค๋‹ˆ๋‹ค.
124
-
125
- 2. ```keras.layers.Dense(10, activation="softmax")```
126
- ์ด ์ฝ”๋“œ๊ฐ€ ์™„์ „์—ฐ๊ฒฐ๊ณ„์ธต์ด๋ฉฐ, ๋ณดํ†ต Dense Layer ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
127
- ํŠน์ง•๋ฐฑํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 10๊ฐœ์˜ ํด๋ž˜์Šค ์ค‘ ์–ด๋А ํด๋ž˜์Šค์— ํ• ๋‹นํ• ์ง€ ์ตœ์ข…์ ์œผ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
128
- ```activation="softmax"```๋Š” ๊ฐ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์˜ˆ์ธก๊ฐ’์„ 0 ๊ณผ 1 ์‚ฌ์ด์˜ ํ™•๋ฅ ๊ฐ’์œผ๋กœ ํ•˜๊ฒŒ ํ•˜์—ฌ ๋ชจ๋“  ํ™•๋ฅ ์˜ ํ•ฉ์ด `์ด ๋˜๋„๋ก ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.
129
-
130
- ---
131
-
132
- ## 3. ์ง์ ‘ CNN ๊ตฌํ˜„ํ•ด ๋ณด๊ธฐ
133
- ์ด์ œ, ์ง์ ‘ CNN ํ•™์Šต ์ฝ”๋“œ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ๊ตฌํ˜„ํ•ด ๋ด…์‹œ๋‹ค.
134
-
135
- **1๋‹จ๊ณ„. ๋ฐ์ดํ„ฐ ๋กœ๋“œ ๋ฐ ์ „์ฒ˜๋ฆฌ**
136
- ๋ชจ๋ธ์ด ํ•™์Šตํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์ค๋‹ˆ๋‹ค.
137
- ์ด๋ฒˆ์—”, ์‰ฝ๊ฒŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” MNIST ์†๊ธ€์”จ ์ˆซ์ž ๋ฐ์ดํ„ฐ์…‹์„ ๊ฐ€์ ธ์™€ ์ ์ ˆํ•œ ํ˜•ํƒœ๋กœ ์ „์ฒ˜๋ฆฌ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
138
-
139
- ```python
140
- import numpy as np
141
- import tensorflow as tf
142
- from tensorflow import keras
143
- from keras import layers
144
-
145
- # Keras ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด MNIST ๋ฐ์ดํ„ฐ์…‹์„ ์†์‰ฝ๊ฒŒ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
146
- (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
147
-
148
- # ์ •๊ทœํ™”: ํ”ฝ์…€ ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ 0~255์—์„œ 0~1 ์‚ฌ์ด๋กœ ์กฐ์ •ํ•˜์—ฌ ํ•™์Šต ์•ˆ์ •์„ฑ ๋ฐ ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.
149
- x_train = x_train.astype("float32") / 255.0
150
- x_test = x_test.astype("float32") / 255.0
151
-
152
- # ์ฑ„๋„ ์ฐจ์› ์ถ”๊ฐ€: ํ‘๋ฐฑ ์ด๋ฏธ์ง€(์ฑ„๋„ 1)์˜ ์ฐจ์›์„ ๋ช…์‹œ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
153
- x_train = np.expand_dims(x_train, -1)
154
- x_test = np.expand_dims(x_test, -1)
155
-
156
- # ๋ ˆ์ด๋ธ” ์›-ํ•ซ ์ธ์ฝ”๋”ฉ: ์ˆซ์ž '5'๋ฅผ [0,0,0,0,0,1,0,0,0,0] ํ˜•ํƒœ์˜ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
157
- num_classes = 10
158
- y_train = keras.utils.to_categorical(y_train, num_classes)
159
- y_test = keras.utils.to_categorical(y_test, num_classes)
160
- ```
161
-
162
- **2๋‹จ๊ณ„. ๋ชจ๋ธ ์ปดํŒŒ์ผ**
163
- ๋ชจ๋ธ ์•„ํ‚คํ…์ณ๋ฅผ ์ •์˜ํ•˜๊ณ  ๋ชจ๋ธ์„ ์–ด๋–ป๊ฒŒ ํ•™์Šต์‹œํ‚ฌ์ง€์— ๋Œ€ํ•ด ์ •ํ•ฉ๋‹ˆ๋‹ค.
164
- ```python
165
- model = keras.Sequential([
166
- keras.Input(shape=(28, 28, 1)), # ์ž…๋ ฅ ๋ ˆ์ด์–ด
167
- layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
168
- layers.MaxPooling2D(pool_size=(2, 2)),
169
- layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
170
- layers.MaxPooling2D(pool_size=(2, 2)),
171
- layers.Flatten(),
172
- layers.Dropout(0.5),
173
- layers.Dense(num_classes, activation="softmax")
174
- ])
175
-
176
- model.compile(
177
- # ์†์‹ค ํ•จ์ˆ˜(Loss Function): ๋ชจ๋ธ์˜ ์˜ˆ์ธก์ด ์ •๋‹ต๊ณผ ์–ผ๋งˆ๋‚˜ ๋‹ค๋ฅธ์ง€ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.
178
- loss="categorical_crossentropy",
179
- # ์˜ตํ‹ฐ๋งˆ์ด์ €(Optimizer): ์†์‹ค์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
180
- optimizer="adam",
181
- # ํ‰๊ฐ€์ง€ํ‘œ(Metrics): ํ›ˆ๋ จ ๊ณผ์ •์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ง€ํ‘œ๋กœ, ์ •ํ™•๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
182
- metrics=["accuracy"]
183
- )
184
- ```
185
-
186
- **3๋‹จ๊ณ„. ๋ชจ๋ธ ํ•™์Šต ๋ฐ ํ‰๊ฐ€**
187
- ```model.fit()```ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๊ณ , ํ•™์Šต์ด ๋๋‚œ ํ›„ ```model.evaluate()```๋กœ ์ตœ์ข… ์„ฑ๋Šฅ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
188
- ```python
189
- batch_size = 128
190
- epochs = 15
191
-
192
- # ๋ชจ๋ธ ํ•™์Šต ์‹คํ–‰
193
- history = model.fit(
194
- x_train, y_train,
195
- batch_size=batch_size,
196
- epochs=epochs,
197
- validation_data=(x_test, y_test)
198
- )
199
-
200
- # ํ•™์Šต ์™„๋ฃŒ ํ›„ ์ตœ์ข… ์„ฑ๋Šฅ ํ‰๊ฐ€
201
- score = model.evaluate(x_test, y_test, verbose=0)
202
- print(f"\nTest loss: {score[0]:.4f}")
203
- print(f"Test accuracy: {score[1]:.4f}")
204
- ```
205
-
206
- **4๋‹จ๊ณ„. ํ•™์Šต๋œ ๋ชจ๋ธ ์ €์žฅํ•˜๊ธฐ**
207
- ๋ชจ๋ธ์„ ์ €์žฅํ•˜๊ณ , ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
208
- ```python
209
- # ๋ชจ๋ธ์˜ ๊ตฌ์กฐ, ๏ฟฝ๏ฟฝ์ค‘์น˜, ํ•™์Šต ์„ค์ •์„ ๋ชจ๋‘ '.keras' ํŒŒ์ผ ํ•˜๋‚˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
210
- model.save("my_keras_model.keras")
211
- print("\nModel saved to my_keras_model.keras")
212
- ```
213
-
214
- ์œ„ ๋‹จ๊ณ„๋ฅผ ์ „๋ถ€ ์ˆ˜ํ–‰ํ•œ ๋ชจ๋ธ์ด ์ง€๊ธˆ ์ด ํ—ˆ๊น…ํŽ˜์ด์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋“ค์–ด์žˆ๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์ด์–ด์„œ, ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด ๋ณผ ๋–„, ์œ„ ์ฝ”๋“œ๋ฅผ์€ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ๋ง๊ณ , ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ ์ฃผ์„ธ์š”!
215
- ๋งŒ์ผ, ์œ„ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ๋”ฅ๋Ÿฌ๋‹์„ ์‹œ์ผญ๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด, Files์˜
216
- train.py๋ฅผ ์‹คํ–‰์‹œ์ผœ ์ฃผ์„ธ์š”!
217
-
218
- **5๋‹จ๊ณ„. ๋ชจ๋ธ ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ**
219
- ์•ž์„  ๋‹จ๊ณ„๋“ค์„ ๊ฑฐ์ณ ์™„์„ฑํ•œ ๋ชจ๋ธ์ด ์ด ํ—ˆ๊น…ํŽ˜์ด์Šค ํŽ˜์ด์ง€์— ์˜ฌ๋ผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
220
- ์ด์ œ, ์ด ํ—ˆ๊น…ํŽ˜์ด์Šค ํŽ˜์ด์ง€์˜ ๋ชจ๋ธ์„ ๋ถˆ๋Ÿฌ์™€์„œ, ์ง์ ‘ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
221
- Files์˜ test.py๋ฅผ ์‹คํ–‰์‹œ์ผœ ๋ณด์„ธ์š”!!
222
- ์ง์ ‘ ์ค€๋น„ํ•œ ์ˆซ์ž ์†๊ธ€์”จ๋ฅผ ๋ชจ๋ธ์— ์ž…๋ ฅ์œผ๋กœ ๋„ฃ์œผ๋ฉด, ๊ทธ ์ˆซ์ž๊ฐ€ ์–ด๋–ค ์ˆซ์ž์ธ์ง€ ๋งž์ถฐ์ค„ ๊ฒ๋‹ˆ๋‹ค!!
223
-
224
-
225
-
226
- ## 4. ๋‚˜๋งŒ์˜ CNN ๋ชจ๋ธ ๋งŒ๋“ค๊ธฐ