RNN_test_Model / train.py
OneclickAI's picture
Upload 4 files
9a24bb1 verified
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")