Fixed
Browse files
README.md
CHANGED
|
@@ -200,7 +200,7 @@ x_test = keras.preprocessing.sequence.pad_sequences(x_test, maxlen=256)
|
|
| 200 |
print(f"ํจ๋ฉ ํ ์ฒซ ๋ฒ์งธ ๋ฆฌ๋ทฐ ๊ธธ์ด: {len(x_train[0])}")
|
| 201 |
```
|
| 202 |
|
| 203 |
-
**2๋จ๊ณ : ๋ชจ๋ธ ์ปดํ์ผ**
|
| 204 |
๋ชจ๋ธ์ ์ด๋ป๊ฒ ํ์ต์ํฌ์ง ํ์ต ๋ฐฉ๋ฒ์ ์ค์ ํฉ๋๋ค.
|
| 205 |
```python
|
| 206 |
model.compile(
|
|
@@ -217,7 +217,7 @@ model.compile(
|
|
| 217 |
)
|
| 218 |
```
|
| 219 |
|
| 220 |
-
**3๋จ๊ณ : ๋ชจ๋ธ ํ์ต ๋ฐ ํ๊ฐ (๋ฐฐ์น, ์ํฌํฌ, ๊ทธ๋ฆฌ๊ณ ๊ณผ์ ํฉ)**
|
| 221 |
model.fit() ํจ์๋ก ์ค์ ํ์ต์ ์์ํฉ๋๋ค.
|
| 222 |
batch_size: ํ ๋ฒ์ ์ฒ๋ฆฌํ ๋ฐ์ดํฐ ์ํ์ ์. ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ๊ณผ ํ์ต ์๋์ ์ํฅ์ ์ค๋๋ค.
|
| 223 |
epochs: ์ ์ฒด ๋ฐ์ดํฐ์
์ ๋ช ๋ฒ ๋ฐ๋ณตํ์ฌ ํ์ตํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
|
|
@@ -241,10 +241,10 @@ print(f"\nTest loss: {score[0]:.4f}")
|
|
| 241 |
print(f"Test accuracy: {score[1]:.4f}")
|
| 242 |
```
|
| 243 |
|
| 244 |
-
ํ์ต ๊ณผ์ ์ ์ง์ผ๋ณผ ๋, ํ๋ จ ๋ฐ์ดํฐ์ ์ ํ๋(accuracy)๋ ๊ณ์ ์ค๋ฅด๋๋ฐ ๊ฒ์ฆ ๋ฐ์ดํฐ์ ์ ํ๋(val_accuracy)๊ฐ ์ด๋ ์๊ฐ๋ถํฐ ์ ์ฒด๋๊ฑฐ๋ ๋จ์ด์ง๋ค๋ฉด, ๋ชจ๋ธ์ด ํ๋ จ ๋ฐ์ดํฐ์๋ง ๊ณผํ๊ฒ ์ ์ํ๋
|
| 245 |
์ด๋ด ๋๋, ๋๋กญ์์์ ๋น์จ์ ๋์ด๊ฑฐ๋ ํ์ต์จ์ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.
|
| 246 |
|
| 247 |
-
**4๋จ๊ณ : ํ์ต๋ ๋ชจ๋ธ ์ ์ฅ ๋ฐ ์ฌ์ฌ์ฉ**
|
| 248 |
ํ์ต์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋ชจ๋ธ์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด๋๊ณ ํ์ํ ๋๋ง๋ค ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์ ์
๋๋ค.
|
| 249 |
|
| 250 |
```python
|
|
@@ -255,7 +255,7 @@ model.save("my_rnn_model_imdb.keras")
|
|
| 255 |
loaded_model = keras.models.load_model("my_rnn_model_imdb.keras")
|
| 256 |
```
|
| 257 |
|
| 258 |
-
**5๋จ๊ณ : ๋๋ง์ ๋ฌธ์ฅ์ผ๋ก ๋ชจ๋ธ ํ
์คํธํ๊ธฐ (์ค์ ์์ธก)**
|
| 259 |
์ค์ ๋ฌธ์ฅ์ ์์ธกํ๋ ค๋ฉด, ํ๋ จ ๋ฐ์ดํฐ์ ๋์ผํ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํฉ๋๋ค.
|
| 260 |
|
| 261 |
```python
|
|
@@ -277,7 +277,7 @@ print(f"๋ฆฌ๋ทฐ: '{review}'")
|
|
| 277 |
print(f"๊ธ์ ํ๋ฅ : {prediction[0][0] * 100:.2f}%")
|
| 278 |
```
|
| 279 |
|
| 280 |
-
4. ๋๋ง์ RNN ๋ชจ๋ธ ์
๊ทธ๋ ์ด๋ํ๊ธฐ
|
| 281 |
๊ธฐ๋ณธ RNN๋ ์ข์ง๋ง, ๋ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ง ํ๊ณ๋ฅผ ๊ทน๋ณตํด์ผ ํฉ๋๋ค.
|
| 282 |
|
| 283 |
**RNN์ ์น๋ช
์ ์ฝ์ : ์ฅ๊ธฐ ์์กด์ฑ ๋ฌธ์ (Vanishing Gradients)**
|
|
@@ -288,6 +288,13 @@ print(f"๊ธ์ ํ๋ฅ : {prediction[0][0] * 100:.2f}%")
|
|
| 288 |
์ด๋ก ์ธํด ๋ฌธ์ฅ ์๋ถ๋ถ์ ์ค์ํ ์ ๋ณด๋ฅผ ํ์ตํ์ง ๋ชปํ๊ฒ ๋ฉ๋๋ค.
|
| 289 |
์ด๋ฅผ ์ฅ๊ธฐ ์์กด์ฑ ๋ฌธ์ ๋ผ๊ณ ํฉ๋๋ค.
|
| 290 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 291 |
**๊ธฐ์ต๋ ฅ ๊ฐํ : LSTM๊ณผ GRU์ ๋ฑ์ฅ**
|
| 292 |
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด **LSTM(Long Short-Term Memory)**๊ณผ **GRU(Gated Recurrent Unit)**๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
|
| 293 |
์ด๋ค์ RNN ๋ด๋ถ์ **๊ฒ์ดํธ(Gate)**๋ผ๋ ์ ๊ตํ ์ฅ์น๋ฅผ ์ถ๊ฐํ์ฌ ์ ๋ณด์ ํ๋ฆ์ ์ ์ดํฉ๋๋ค.
|
|
@@ -327,6 +334,6 @@ model_bidirectional = keras.Sequential([
|
|
| 327 |
## 5. ๊ฒฐ๋ก
|
| 328 |
์ค๋์ ์์ฐจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ทผ๊ฐ์ด ๋๋ RNN์ ํต์ฌ ์๋ฆฌ๋ถํฐ ์์ํ์ฌ, ์ค์ ์ฝ๋๋ก ๋ชจ๋ธ์ ๊ตฌํํ๊ณ , LSTM, GRU, ์๋ฐฉํฅ RNN๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฒ์ ํตํด ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ๊น์ง ์์ธํ๊ฒ ์์๋ณด์์ต๋๋ค.
|
| 329 |
RNN์ ๊ทธ ์์ฒด๋ก๋ ๊ฐ๋ ฅํ์ง๋ง, ์์ฐ์ด ์ฒ๋ฆฌ ๋ถ์ผ์ ๋ฐ์ ์ ์์ฒญ๋ ๊ธฐ์ฌ๋ฅผ ํ ๊ธฐ๋
๋น์ ์ธ ๋ชจ๋ธ์
๋๋ค.
|
| 330 |
-
ํนํ RNN์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๋ ค๋ ์๋ ์์์ ํ์ํ ์ดํ
์
(Attention) ๋ฉ์ปค๋์ฆ์ ์ดํ
|
| 331 |
๋ค์์๋ ์ดํ
์
๊ธฐ๋ฒ๊ณผ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ, ์ธ์ฝ๋, ๋์ฝ๋๋ก ๋์์ค๊ฒ ์ต๋๋ค!!
|
| 332 |
์ค๋๋ ์ข์ํ๋ฃจ ๋ณด๋ด์ธ์!!
|
|
|
|
| 200 |
print(f"ํจ๋ฉ ํ ์ฒซ ๋ฒ์งธ ๋ฆฌ๋ทฐ ๊ธธ์ด: {len(x_train[0])}")
|
| 201 |
```
|
| 202 |
|
| 203 |
+
**2๋จ๊ณ : ๋ชจ๋ธ ์ปดํ์ผ**
|
| 204 |
๋ชจ๋ธ์ ์ด๋ป๊ฒ ํ์ต์ํฌ์ง ํ์ต ๋ฐฉ๋ฒ์ ์ค์ ํฉ๋๋ค.
|
| 205 |
```python
|
| 206 |
model.compile(
|
|
|
|
| 217 |
)
|
| 218 |
```
|
| 219 |
|
| 220 |
+
**3๋จ๊ณ : ๋ชจ๋ธ ํ์ต ๋ฐ ํ๊ฐ (๋ฐฐ์น, ์ํฌํฌ, ๊ทธ๋ฆฌ๊ณ ๊ณผ์ ํฉ)**
|
| 221 |
model.fit() ํจ์๋ก ์ค์ ํ์ต์ ์์ํฉ๋๋ค.
|
| 222 |
batch_size: ํ ๋ฒ์ ์ฒ๋ฆฌํ ๋ฐ์ดํฐ ์ํ์ ์. ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ๊ณผ ํ์ต ์๋์ ์ํฅ์ ์ค๋๋ค.
|
| 223 |
epochs: ์ ์ฒด ๋ฐ์ดํฐ์
์ ๋ช ๋ฒ ๋ฐ๋ณตํ์ฌ ํ์ตํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
|
|
|
|
| 241 |
print(f"Test accuracy: {score[1]:.4f}")
|
| 242 |
```
|
| 243 |
|
| 244 |
+
ํ์ต ๊ณผ์ ์ ์ง์ผ๋ณผ ๋, ํ๋ จ ๋ฐ์ดํฐ์ ์ ํ๋(accuracy)๋ ๊ณ์ ์ค๋ฅด๋๋ฐ ๊ฒ์ฆ ๋ฐ์ดํฐ์ ์ ํ๋(val_accuracy)๊ฐ ์ด๋ ์๊ฐ๋ถํฐ ์ ์ฒด๋๊ฑฐ๋ ๋จ์ด์ง๋ค๋ฉด, ๋ชจ๋ธ์ด ํ๋ จ ๋ฐ์ดํฐ์๋ง ๊ณผํ๊ฒ ์ ์ํ๋ ๊ณผ์ ํฉ(Overfitting)์ด ๋ฐ์ํ๊ณ ์๋ค๋ ์ ํธ์
๋๋ค.
|
| 245 |
์ด๋ด ๋๋, ๋๋กญ์์์ ๋น์จ์ ๋์ด๊ฑฐ๋ ํ์ต์จ์ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.
|
| 246 |
|
| 247 |
+
**4๋จ๊ณ : ํ์ต๋ ๋ชจ๋ธ ์ ์ฅ ๋ฐ ์ฌ์ฌ์ฉ**
|
| 248 |
ํ์ต์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋ชจ๋ธ์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด๋๊ณ ํ์ํ ๋๋ง๋ค ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์ ์
๋๋ค.
|
| 249 |
|
| 250 |
```python
|
|
|
|
| 255 |
loaded_model = keras.models.load_model("my_rnn_model_imdb.keras")
|
| 256 |
```
|
| 257 |
|
| 258 |
+
**5๋จ๊ณ : ๋๋ง์ ๋ฌธ์ฅ์ผ๋ก ๋ชจ๋ธ ํ
์คํธํ๊ธฐ (์ค์ ์์ธก)**
|
| 259 |
์ค์ ๋ฌธ์ฅ์ ์์ธกํ๋ ค๋ฉด, ํ๋ จ ๋ฐ์ดํฐ์ ๋์ผํ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํฉ๋๋ค.
|
| 260 |
|
| 261 |
```python
|
|
|
|
| 277 |
print(f"๊ธ์ ํ๋ฅ : {prediction[0][0] * 100:.2f}%")
|
| 278 |
```
|
| 279 |
|
| 280 |
+
4. ๋๋ง์ RNN ๋ชจ๋ธ ์
๊ทธ๋ ์ด๋ํ๊ธฐ
|
| 281 |
๊ธฐ๋ณธ RNN๋ ์ข์ง๋ง, ๋ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ง ํ๊ณ๋ฅผ ๊ทน๋ณตํด์ผ ํฉ๋๋ค.
|
| 282 |
|
| 283 |
**RNN์ ์น๋ช
์ ์ฝ์ : ์ฅ๊ธฐ ์์กด์ฑ ๋ฌธ์ (Vanishing Gradients)**
|
|
|
|
| 288 |
์ด๋ก ์ธํด ๋ฌธ์ฅ ์๋ถ๋ถ์ ์ค์ํ ์ ๋ณด๋ฅผ ํ์ตํ์ง ๋ชปํ๊ฒ ๋ฉ๋๋ค.
|
| 289 |
์ด๋ฅผ ์ฅ๊ธฐ ์์กด์ฑ ๋ฌธ์ ๋ผ๊ณ ํฉ๋๋ค.
|
| 290 |
|
| 291 |
+
์ค์ ๋ก, ์ง๊ธ ํ๊น
ํ์ด์ค์ ์ฌ๋ผ๊ฐ์ ์๋ RNN ๋ชจ๋ธ์ ์ฌ์ฉํด ๋ณด๋ฉด,
|
| 292 |
+
ํธํฅ๋์ด ํ๊ฐ์ง ๋ผ๋ฒจ๋ง ๊ณ์ ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค.
|
| 293 |
+
์ด ๋ชจ์ต์ด RNN์ ํ๊ณ๋ฅผ ๋ช
ํํ๊ฒ ๋ณด์ฌ์ฃผ๋๋ฐ์,
|
| 294 |
+
๋ฐ๋ก ์์ ์ค๋ช
ํ ์ฅ๊ธฐ์์กด์ฑ, ๊ธฐ์ธ๊ธฐ ์์ค ๋ฌธ์ ์
๋๋ค.
|
| 295 |
+
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ ๊ตฌ์กฐ๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
|
| 296 |
+
|
| 297 |
+
|
| 298 |
**๊ธฐ์ต๋ ฅ ๊ฐํ : LSTM๊ณผ GRU์ ๋ฑ์ฅ**
|
| 299 |
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด **LSTM(Long Short-Term Memory)**๊ณผ **GRU(Gated Recurrent Unit)**๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
|
| 300 |
์ด๋ค์ RNN ๋ด๋ถ์ **๊ฒ์ดํธ(Gate)**๋ผ๋ ์ ๊ตํ ์ฅ์น๋ฅผ ์ถ๊ฐํ์ฌ ์ ๋ณด์ ํ๋ฆ์ ์ ์ดํฉ๋๋ค.
|
|
|
|
| 334 |
## 5. ๊ฒฐ๋ก
|
| 335 |
์ค๋์ ์์ฐจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ทผ๊ฐ์ด ๋๋ RNN์ ํต์ฌ ์๋ฆฌ๋ถํฐ ์์ํ์ฌ, ์ค์ ์ฝ๋๋ก ๋ชจ๋ธ์ ๊ตฌํํ๊ณ , LSTM, GRU, ์๋ฐฉํฅ RNN๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฒ์ ํตํด ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ๊น์ง ์์ธํ๊ฒ ์์๋ณด์์ต๋๋ค.
|
| 336 |
RNN์ ๊ทธ ์์ฒด๋ก๋ ๊ฐ๋ ฅํ์ง๋ง, ์์ฐ์ด ์ฒ๋ฆฌ ๋ถ์ผ์ ๋ฐ์ ์ ์์ฒญ๋ ๊ธฐ์ฌ๋ฅผ ํ ๊ธฐ๋
๋น์ ์ธ ๋ชจ๋ธ์
๋๋ค.
|
| 337 |
+
ํนํ RNN์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๋ ค๋ ์๋ ์์์ ํ์ํ ์ดํ
์
(Attention) ๋ฉ์ปค๋์ฆ์ ์ดํ **ํธ๋์คํฌ๋จธ(Transformer)**๋ผ๋ ํ์ ์ ์ธ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ด ๋์์ต๋๋ค.
|
| 338 |
๋ค์์๋ ์ดํ
์
๊ธฐ๋ฒ๊ณผ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ, ์ธ์ฝ๋, ๋์ฝ๋๋ก ๋์์ค๊ฒ ์ต๋๋ค!!
|
| 339 |
์ค๋๋ ์ข์ํ๋ฃจ ๋ณด๋ด์ธ์!!
|