Keras
OneclickAI commited on
Commit
39c2220
ยท
verified ยท
1 Parent(s): 3bfc846

Upload 3 files

Browse files
Files changed (3) hide show
  1. config.json +6 -0
  2. test.py +94 -0
  3. train.py +96 -0
config.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+
3
+ model : {},
4
+ layers : {},
5
+
6
+ }
test.py ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # test.py (์˜ค๋ฅ˜ ์ˆ˜์ • ์ตœ์ข… ์ฝ”๋“œ)
2
+
3
+ import numpy as np
4
+ import tensorflow as tf
5
+ from tensorflow import keras
6
+ # from_pretrained_keras ๋Œ€์‹  hf_hub_download๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
7
+ from huggingface_hub import hf_hub_download
8
+
9
+ print("TensorFlow ๋ฒ„์ „:", tf.__version__)
10
+
11
+ # 1. Hugging Face Hub์—์„œ ๋ชจ๋ธ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ํ›„ ๋กœ๋“œ
12
+ REPO_ID = "OneclickAI/LSTM_GUE_test_Model"
13
+ print(f"\n'{REPO_ID}' ์ €์žฅ์†Œ์—์„œ ๋ชจ๋ธ ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค...")
14
+
15
+ try:
16
+ # 1๋‹จ๊ณ„: hf_hub_download๋กœ ํŒŒ์ผ์˜ ๋กœ์ปฌ ์บ์‹œ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
17
+ # ํŒŒ์ผ์ด ์ด๋ฏธ ๋‹ค์šด๋กœ๋“œ ๋˜์—ˆ๋‹ค๋ฉด, ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ƒ๋žตํ•˜๊ณ  ๊ฒฝ๋กœ๋งŒ ์ฆ‰์‹œ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
18
+ print("LSTM ๋ชจ๋ธ ๊ฒฝ๋กœ ํ™•์ธ ์ค‘...")
19
+ lstm_model_path = hf_hub_download(repo_id=REPO_ID, filename="lstm_model.keras")
20
+ print(f"LSTM ๋ชจ๋ธ ํŒŒ์ผ ์œ„์น˜: {lstm_model_path}")
21
+
22
+ print("GRU ๋ชจ๋ธ ๊ฒฝ๋กœ ํ™•์ธ ์ค‘...")
23
+ gru_model_path = hf_hub_download(repo_id=REPO_ID, filename="gru_model.keras")
24
+ print(f"GRU ๋ชจ๋ธ ํŒŒ์ผ ์œ„์น˜: {gru_model_path}")
25
+
26
+ # 2๋‹จ๊ณ„: ๋‹ค์šด๋กœ๋“œ๋œ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ Keras์˜ ํ‘œ์ค€ load_model ํ•จ์ˆ˜๋กœ ์ง์ ‘ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
27
+ print("\nKeras๋กœ ๋ชจ๋ธ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค...")
28
+ lstm_model = keras.models.load_model(lstm_model_path)
29
+ gru_model = keras.models.load_model(gru_model_path)
30
+
31
+ print("๋ชจ๋ธ์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.")
32
+
33
+ except Exception as e:
34
+ print(f"๋ชจ๋ธ ๋กœ๋”ฉ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {e}")
35
+ print("์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ๋ฐ ์ €์žฅ์†Œ ID, ํŒŒ์ผ๋ช…์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”.")
36
+ exit()
37
+
38
+ # IMDB ๋ฐ์ดํ„ฐ์…‹์˜ ๋‹จ์–ด ์ธ๋ฑ์Šค ๋กœ๋“œ ('๋‹จ์–ด': ์ •์ˆ˜)
39
+ word_index = keras.datasets.imdb.get_word_index()
40
+
41
+ # 2. ์˜ˆ์ธกํ•  ๋ฆฌ๋ทฐ ๋ฌธ์žฅ ์ •์˜
42
+ review1 = "This movie was fantastic and wonderful. I really enjoyed it."
43
+ review2 = "It was a complete waste of time. The plot was terrible and the acting was bad."
44
+
45
+ # 3. ๋ฌธ์žฅ ์ „์ฒ˜๋ฆฌ ํ•จ์ˆ˜
46
+ def preprocess_text(text, word_index, maxlen=256):
47
+ """
48
+ ํ…์ŠคํŠธ๋ฅผ ๋ชจ๋ธ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜ ์‹œํ€€์Šค๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ํŒจ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
49
+ """
50
+ # ๋ฌธ์žฅ์„ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋‹จ์–ด ๋‹จ์œ„๋กœ ๋ถ„ํ• 
51
+ tokens = text.lower().split()
52
+
53
+ # ๊ฐ ๋‹จ์–ด๋ฅผ ์ •์ˆ˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ (word_index์— ์—†์œผ๋ฉด 2๋ฒˆ ์ธ๋ฑ์Šค'<unk>' ์‚ฌ์šฉ)
54
+ token_indices = [word_index.get(word, 2) for word in tokens]
55
+
56
+ # ์‹œํ€€์Šค ํŒจ๋”ฉ
57
+ padded_sequence = keras.preprocessing.sequence.pad_sequences([token_indices], maxlen=maxlen)
58
+
59
+ return padded_sequence
60
+
61
+ # 4. ๋ชจ๋ธ ์˜ˆ์ธก ๋ฐ ๊ฒฐ๊ณผ ์ถœ๋ ฅ ํ•จ์ˆ˜
62
+ def predict_review(review_text, model, model_name):
63
+ """
64
+ ์ „์ฒ˜๋ฆฌ๋œ ํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์„ฑ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
65
+ """
66
+ # ๋ฌธ์žฅ ์ „์ฒ˜๋ฆฌ
67
+ processed_review = preprocess_text(review_text, word_index)
68
+
69
+ # ์˜ˆ์ธก ์ˆ˜ํ–‰
70
+ prediction = model.predict(processed_review, verbose=0) # ์˜ˆ์ธก ์‹œ ๋กœ๊ทธ ์ถœ๋ ฅ์„ ๋”
71
+ positive_probability = prediction[0][0] * 100
72
+
73
+ print(f"--- {model_name} ๋ชจ๋ธ ์˜ˆ์ธก ๊ฒฐ๊ณผ ---")
74
+ print(f"๋ฆฌ๋ทฐ: '{review_text}'")
75
+ print(f"๊ธ์ • ํ™•๋ฅ : {positive_probability:.2f}%")
76
+ if positive_probability > 50:
77
+ print("๊ฒฐ๊ณผ: ๊ธ์ •์ ์ธ ๋ฆฌ๋ทฐ์ž…๋‹ˆ๋‹ค.")
78
+ else:
79
+ print("๊ฒฐ๊ณผ: ๋ถ€์ •์ ์ธ ๋ฆฌ๋ทฐ์ž…๋‹ˆ๋‹ค.")
80
+ print("-" * 30)
81
+
82
+ # 5. ๊ฐ ๋ฆฌ๋ทฐ์— ๋Œ€ํ•ด ๋‘ ๋ชจ๋ธ๋กœ ์˜ˆ์ธก ์ˆ˜ํ–‰
83
+ print("\n" + "="*40)
84
+ print("์ฒซ ๋ฒˆ์งธ ๋ฆฌ๋ทฐ ์˜ˆ์ธก ์‹œ์ž‘")
85
+ print("="*40)
86
+ predict_review(review1, lstm_model, "LSTM")
87
+ predict_review(review1, gru_model, "GRU")
88
+
89
+
90
+ print("\n" + "="*40)
91
+ print("๋‘ ๋ฒˆ์งธ ๋ฆฌ๋ทฐ ์˜ˆ์ธก ์‹œ์ž‘")
92
+ print("="*40)
93
+ predict_review(review2, lstm_model, "LSTM")
94
+ predict_review(review2, gru_model, "GRU")
train.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import tensorflow as tf
3
+ from tensorflow import keras
4
+ from keras import layers
5
+
6
+ print("TensorFlow ๋ฒ„์ „:", tf.__version__)
7
+
8
+ # 1. ๋ฐ์ดํ„ฐ ๋กœ๋“œ ๋ฐ ์ „์ฒ˜๋ฆฌ
9
+ print("\n1. ๋ฐ์ดํ„ฐ ๋กœ๋“œ ๋ฐ ์ „์ฒ˜๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค...")
10
+ # num_words=10000: ๊ฐ€์žฅ ๋นˆ๋„๊ฐ€ ๋†’์€ 1๋งŒ ๊ฐœ์˜ ๋‹จ์–ด๋งŒ ์‚ฌ์šฉ
11
+ (x_train, y_train), (x_test, y_test) = keras.datasets.imdb.load_data(num_words=10000)
12
+
13
+ print(f"ํ•™์Šต ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜: {len(x_train)}")
14
+ print(f"ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜: {len(x_test)}")
15
+
16
+ # ๋ฌธ์žฅ์˜ ๊ธธ์ด๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ํŒจ๋”ฉ(padding) ์ฒ˜๋ฆฌ (maxlen=256)
17
+ x_train = keras.preprocessing.sequence.pad_sequences(x_train, maxlen=256)
18
+ x_test = keras.preprocessing.sequence.pad_sequences(x_test, maxlen=256)
19
+ print("๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
20
+
21
+ # 2. LSTM ๋ชจ๋ธ ์ƒ์„ฑ, ํ•™์Šต ๋ฐ ์ €์žฅ
22
+ print("\n2. LSTM ๋ชจ๋ธ ํ•™์Šต์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค...")
23
+
24
+ # LSTM ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ ์ •์˜
25
+ lstm_model = keras.Sequential([
26
+ layers.Embedding(input_dim=10000, output_dim=128),
27
+ layers.LSTM(64),
28
+ layers.Dense(1, activation="sigmoid")
29
+ ])
30
+
31
+ # ๋ชจ๋ธ ์ปดํŒŒ์ผ
32
+ lstm_model.compile(
33
+ loss="binary_crossentropy",
34
+ optimizer="adam",
35
+ metrics=["accuracy"]
36
+ )
37
+
38
+ print("\n--- LSTM ๋ชจ๋ธ ๊ตฌ์กฐ ---")
39
+ lstm_model.summary()
40
+
41
+ # ๋ชจ๋ธ ํ•™์Šต
42
+ batch_size = 128
43
+ epochs = 1 # ์˜ˆ์ œ์ด๋ฏ€๋กœ epoch๋ฅผ ์ค„์—ฌ์„œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
44
+ history_lstm = lstm_model.fit(
45
+ x_train, y_train,
46
+ batch_size=batch_size,
47
+ epochs=epochs,
48
+ validation_data=(x_test, y_test)
49
+ )
50
+
51
+ # ๋ชจ๋ธ ํ‰๊ฐ€
52
+ score_lstm = lstm_model.evaluate(x_test, y_test, verbose=0)
53
+ print(f"\nLSTM ๋ชจ๋ธ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ -> Loss: {score_lstm[0]:.4f}, Accuracy: {score_lstm[1]:.4f}\n")
54
+
55
+ # ํ•™์Šต๋œ LSTM ๋ชจ๋ธ ์ €์žฅ
56
+ lstm_model.save("lstm_model.keras")
57
+ print("LSTM ๋ชจ๋ธ์ด 'lstm_model.keras' ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
58
+
59
+
60
+ # 3. GRU ๋ชจ๋ธ ์ƒ์„ฑ, ํ•™์Šต ๋ฐ ์ €์žฅ
61
+ print("\n3. GRU ๋ชจ๋ธ ํ•™์Šต์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค...")
62
+
63
+ # GRU ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ ์ •์˜
64
+ gru_model = keras.Sequential([
65
+ layers.Embedding(input_dim=10000, output_dim=128),
66
+ layers.GRU(64),
67
+ layers.Dense(1, activation="sigmoid")
68
+ ])
69
+
70
+ # ๋ชจ๋ธ ์ปดํŒŒ์ผ
71
+ gru_model.compile(
72
+ loss="binary_crossentropy",
73
+ optimizer="adam",
74
+ metrics=["accuracy"]
75
+ )
76
+
77
+ print("\n--- GRU ๋ชจ๋ธ ๊ตฌ์กฐ ---")
78
+ gru_model.summary()
79
+
80
+
81
+ # ๋ชจ๋ธ ํ•™์Šต
82
+ history_gru = gru_model.fit(
83
+ x_train, y_train,
84
+ batch_size=batch_size,
85
+ epochs=epochs,
86
+ validation_data=(x_test, y_test)
87
+ )
88
+
89
+ # ๋ชจ๋ธ ํ‰๊ฐ€
90
+ score_gru = gru_model.evaluate(x_test, y_test, verbose=0)
91
+ print(f"\nGRU ๋ชจ๋ธ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ -> Loss: {score_gru[0]:.4f}, Accuracy: {score_gru[1]:.4f}")
92
+
93
+
94
+ # ํ•™์Šต๋œ GRU ๋ชจ๋ธ ์ €์žฅ
95
+ gru_model.save("gru_model.keras")
96
+ print("GRU ๋ชจ๋ธ์ด 'gru_model.keras' ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")