29 KiB
29 KiB
In [1]:
import os
os.environ["KERAS_BACKEND"] = "torch"
import keras
print(keras.__version__)
In [2]:
from keras.api.datasets import imdb
import os
unique_words = 5000
max_length = 400
output_dir = "tmp"
if not os.path.exists(output_dir):
os.makedirs(output_dir)
(X_train, y_train), (X_valid, y_valid) = imdb.load_data(num_words=unique_words)
In [3]:
from keras.api.preprocessing.sequence import pad_sequences
X_train = pad_sequences(X_train, maxlen=max_length, padding="pre", truncating="pre", value=0)
X_valid = pad_sequences(X_valid, maxlen=max_length, padding="pre", truncating="pre", value=0)
In [4]:
from keras.api.models import Sequential
from keras.api.layers import InputLayer, Embedding, SpatialDropout1D, Conv1D, GlobalMaxPooling1D, Dense, Dropout
conv_model = Sequential()
conv_model.add(InputLayer(shape=(max_length,), dtype="float32"))
conv_model.add(Embedding(unique_words, 64))
conv_model.add(SpatialDropout1D(0.2))
# сверточный слой
conv_model.add(Conv1D(256, 3, activation="relu"))
conv_model.add(GlobalMaxPooling1D())
# полносвязанный слой
conv_model.add(Dense(256, activation="relu"))
conv_model.add(Dropout(0.2))
# выходной слой
conv_model.add(Dense(1, activation="sigmoid"))
conv_model.summary()
In [5]:
from keras.api.callbacks import ModelCheckpoint
conv_model.compile(
loss="binary_crossentropy",
optimizer="adam",
metrics=["accuracy"],
)
conv_model.fit(
X_train,
y_train,
batch_size=128,
epochs=4,
validation_data=(X_valid, y_valid),
callbacks=[ModelCheckpoint(filepath=output_dir + "/conv_weights.{epoch:02d}.keras")],
)
Out[5]:
In [6]:
conv_model.load_weights(output_dir + "/conv_weights.02.keras")
conv_model.evaluate(X_valid, y_valid)
Out[6]:
In [7]:
import matplotlib.pyplot as plt
plt.hist(conv_model.predict(X_valid))
_ = plt.axvline(x=0.5, color="orange")