File size: 2,648 Bytes
9a24bb1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
import tensorflow as tf
from tensorflow import keras
import numpy as np
from keras import layers
# ๊ฐ์ฅ ๋น๋๊ฐ ๋์ 1๋ง๊ฐ ๋จ์ด๋ง ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์
๋ก๋
(x_train, y_train), (x_test, y_test) = keras.datasets.imdb.load_data(num_words=10000)
print(f"ํจ๋ฉ ์ ์ฒซ ๋ฒ์งธ ๋ฆฌ๋ทฐ ๊ธธ์ด: {len(x_train[0])}")
# ๋ชจ๋ ์ํ์ค์ ๊ธธ์ด๋ฅผ 256์ผ๋ก ํต์ผ
# maxlen๋ณด๋ค ๊ธธ๋ฉด ์๋ผ๋ด๊ณ , ์งง์ผ๋ฉด ์๋ถ๋ถ์ 0์ผ๋ก ์ฑ์ (pre-padding)
x_train = keras.preprocessing.sequence.pad_sequences(x_train, maxlen=256)
x_test = keras.preprocessing.sequence.pad_sequences(x_test, maxlen=256)
print(f"ํจ๋ฉ ํ ์ฒซ ๋ฒ์งธ ๋ฆฌ๋ทฐ ๊ธธ์ด: {len(x_train[0])}")
# ๋ชจ๋ธ ์ํคํ
์ฒ ์ ์
model = keras.Sequential([
# 1. ๋จ์ด ์๋ฒ ๋ฉ ์ธต
# input_dim: ์ ์ฒด ๋จ์ด ์งํฉ์ ํฌ๊ธฐ (๊ฐ์ฅ ๋น๋ฒํ 1๋ง๊ฐ ๋จ์ด)
# output_dim: ๊ฐ ๋จ์ด๋ฅผ ํํํ ๋ฒกํฐ์ ์ฐจ์ (32์ฐจ์)
keras.layers.Embedding(input_dim=10000, output_dim=32),
# 2. RNN ์ธต
# units: ์๋ ์ํ ๋ฒกํฐ์ ์ฐจ์ (32์ฐจ์)
keras.layers.SimpleRNN(32),
# 3. ์ต์ข
๋ถ๋ฅ๊ธฐ(Classifier)
# units: ์ถ๋ ฅ ๋ด๋ฐ์ ์ (๊ธ์ /๋ถ์ 1๊ฐ)
# activation: ์ถ๋ ฅ ๊ฐ์ 0~1 ์ฌ์ด ํ๋ฅ ๋ก ๋ณํ (์ด์ง ๋ถ๋ฅ)
keras.layers.Dense(1, activation="sigmoid"),
])
model.compile(
# ์์ค ํจ์: ์์ธก์ด ์ ๋ต๊ณผ ์ผ๋ง๋ ๋ค๋ฅธ์ง ์ธก์ .
# ์ด์ง ๋ถ๋ฅ(0 ๋๋ 1) ๋ฌธ์ ์ด๋ฏ๋ก binary_crossentropy๊ฐ ๊ฐ์ฅ ์ ํฉ.
loss="binary_crossentropy",
# ์ตํฐ๋ง์ด์ : ์์ค์ ์ต์ํํ๊ธฐ ์ํด ๋ชจ๋ธ์ ๊ฐ์ค์น๋ฅผ ์
๋ฐ์ดํธํ๋ ์๊ณ ๋ฆฌ์ฆ.
# Adam์ ํ์ฌ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๊ณ ์ฑ๋ฅ์ด ์ข์ ์ตํฐ๋ง์ด์ ์ค ํ๋.
optimizer="adam",
# ํ๊ฐ์งํ: ํ๋ จ ๊ณผ์ ์ ๋ชจ๋ํฐ๋งํ ์งํ. ์ ํ๋๋ฅผ ์ฌ์ฉ.
metrics=["accuracy"]
)
batch_size = 128
epochs = 10
# ๋ชจ๋ธ ํ์ต ์คํ
# validation_data๋ฅผ ์ง์ ํ์ฌ ๋งค ์ํฌํฌ๋ง๋ค ํ
์คํธ ๋ฐ์ดํฐ๋ก ์ฑ๋ฅ์ ๊ฒ์ฆ
history = model.fit(
x_train, y_train,
batch_size=batch_size,
epochs=epochs,
validation_data=(x_test, y_test)
)
# ํ์ต ์๋ฃ ํ ์ต์ข
์ฑ๋ฅ ํ๊ฐ
score = model.evaluate(x_test, y_test, verbose=0)
print(f"\nTest loss: {score[0]:.4f}")
print(f"Test accuracy: {score[1]:.4f}")
# ๋ชจ๋ธ์ ๊ตฌ์กฐ, ๊ฐ์ค์น, ํ์ต ์ค์ ์ ๋ชจ๋ '.keras' ํ์ผ ํ๋์ ์ ์ฅ
model.save("my_rnn_model_imdb.keras")
# ๋ชจ๋ธ ๊ตฌ์กฐ ์์ฝ ์ถ๋ ฅ
model.summary()
# ์ ์ฅ๋ ๋ชจ๋ธ ๋ถ๋ฌ์ค๊ธฐ
loaded_model = keras.models.load_model("my_rnn_model_imdb.keras") |