Views
No views yet
1시간 흐름 ───▶
2입력 시퀀스: x₁ x₂ x₃ ... xₜ
3 ↓ ↓ ↓ ↓
4 ┌────┐ ┌────┐ ┌────┐ ... ┌────┐
5h₀, C₀ ──▶│LSTM│▶│LSTM│▶│LSTM│ ▶ ... ▶│LSTM│ (또는 GRU)
6 └────┘ └────┘ └────┘ └────┘
7 │ │ │ │
8 ▼ ▼ ▼ ▼
9 h₁ h₂ h₃ hₜ1import tensorflow as tf
2from tensorflow import keras
3
4# 모델 아키텍처 정의
5model = keras.Sequential([
6 # 1. 단어 임베딩 층
7 keras.layers.Embedding(input_dim=10000, output_dim=32),
8
9 # 2. LSTM 층 (GRU로 바꾸려면 SimpleRNN 대신 LSTM 또는 GRU 사용)
10 keras.layers.LSTM(32),
11
12 # 3. 최종 분류기
13 keras.layers.Dense(1, activation="sigmoid"),
14])
15
16# 모델 구조 요약 출력
17model.summary()keras.layers.Embedding(input_dim=10000, output_dim=32)keras.layers.LSTM(32),keras.layers.GRU(32),keras.layers.Dense(1, activation="sigmoid")1Model: "sequential"
2_________________________________________________________________
3 Layer (type) Output Shape Param #
4=================================================================
5 embedding (Embedding) (None, None, 32) 320000
6
7 lstm (LSTM) (None, 32) 8320
8
9 dense (Dense) (None, 1) 33
10
11=================================================================
12Total params: 328,353
13Trainable params: 328,353
14Non-trainable params: 0
15_________________________________________________________________1import numpy as np
2import tensorflow as tf
3from tensorflow import keras
4from keras import layers
5
6(x_train, y_train), (x_test, y_test) = keras.datasets.imdb.load_data(num_words=10000)
7
8x_train = keras.preprocessing.sequence.pad_sequences(x_train, maxlen=256)
9x_test = keras.preprocessing.sequence.pad_sequences(x_test, maxlen=256)1model = keras.Sequential([
2 layers.Embedding(input_dim=10000, output_dim=32),
3 layers.LSTM(32), # 또는 layers.GRU(32)
4 layers.Dense(1, activation="sigmoid")
5])
6
7model.compile(
8 loss="binary_crossentropy",
9 optimizer="adam",
10 metrics=["accuracy"]
11)1batch_size = 128
2epochs = 10
3
4history = model.fit(
5 x_train, y_train,
6 batch_size=batch_size,
7 epochs=epochs,
8 validation_data=(x_test, y_test)
9)
10
11score = model.evaluate(x_test, y_test, verbose=0)
12print(f"\nTest loss: {score[0]:.4f}")
13print(f"Test accuracy: {score[1]:.4f}")1model.save("my_lstm_model_imdb.keras")
2loaded_model = keras.models.load_model("my_lstm_model_imdb.keras")1word_index = keras.datasets.imdb.get_word_index()
2
3review = "This movie was fantastic and wonderful"
4tokens = [word_index.get(word, 2) for word in review.lower().split()]
5padded_tokens = keras.preprocessing.sequence.pad_sequences([tokens], maxlen=256)
6
7prediction = loaded_model.predict(padded_tokens)
8print(f"리뷰: '{review}'")
9print(f"긍정 확률: {prediction[0][0] * 100:.2f}%")1optimizer = keras.optimizers.Adam(learning_rate=0.001)
2model.compile(loss="binary_crossentropy", optimizer=optimizer, metrics=["accuracy"])1model = keras.Sequential([
2 layers.Embedding(input_dim=10000, output_dim=64),
3 layers.LSTM(64, return_sequences=True),
4 layers.LSTM(32),
5 layers.Dense(1, activation='sigmoid')
6])1model = keras.Sequential([
2 layers.Embedding(input_dim=10000, output_dim=64),
3 layers.Bidirectional(layers.LSTM(64)),
4 layers.Dropout(0.5),
5 layers.Dense(1, activation='sigmoid')
6])1# 예: 사전 학습된 임베딩 로드 (별도 파일 필요)
2embedding_layer = layers.Embedding(input_dim=10000, output_dim=100, trainable=False)
3# GloVe 등으로 초기화