| 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") |