-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathretrain_imdb_model.py
More file actions
46 lines (36 loc) · 1.59 KB
/
retrain_imdb_model.py
File metadata and controls
46 lines (36 loc) · 1.59 KB
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
import pandas as pd
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
import pickle
# Load dataset
data = pd.read_csv('IMDB Dataset.csv')
data.replace({"sentiment": {"positive": 1, "negative": 0}}, inplace=True)
# Split data
train_data, test_data = train_test_split(data, test_size=0.2, random_state=42)
# Tokenizer
tokenizer = Tokenizer(num_words=5000)
tokenizer.fit_on_texts(train_data['review'])
# Prepare sequences
X_train = pad_sequences(tokenizer.texts_to_sequences(train_data['review']), maxlen=200)
X_test = pad_sequences(tokenizer.texts_to_sequences(test_data['review']), maxlen=200)
Y_train = train_data["sentiment"]
Y_test = test_data["sentiment"]
# Build model
model = Sequential()
model.add(Embedding(input_dim=5000, output_dim=128, input_length=200))
model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Train model
model.fit(X_train, Y_train, batch_size=64, epochs=5, validation_split=0.2)
# Evaluate model
loss, accuracy = model.evaluate(X_test, Y_test)
print(f"Test Loss: {loss}")
print(f"Test Accuracy: {accuracy}")
# Save model and tokenizer
model.save("sentiment_model.h5")
with open("tokenizer.pkl", "wb") as handle:
pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)