{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "507915ea", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.9.2\n" ] } ], "source": [ "import os\n", "\n", "os.environ[\"KERAS_BACKEND\"] = \"jax\"\n", "import keras\n", "\n", "print(keras.__version__)" ] }, { "cell_type": "code", "execution_count": 2, "id": "e0043e5c", "metadata": {}, "outputs": [], "source": [ "from keras.api.datasets import imdb\n", "import os\n", "\n", "unique_words = 10000\n", "max_length = 100\n", "\n", "output_dir = \"tmp\"\n", "if not os.path.exists(output_dir):\n", " os.makedirs(output_dir)\n", "\n", "(X_train, y_train), (X_valid, y_valid) = imdb.load_data(num_words=unique_words)" ] }, { "cell_type": "code", "execution_count": 3, "id": "131e125a", "metadata": {}, "outputs": [], "source": [ "from keras.api.preprocessing.sequence import pad_sequences\n", "\n", "X_train = pad_sequences(X_train, maxlen=max_length, padding=\"pre\", truncating=\"pre\", value=0)\n", "X_valid = pad_sequences(X_valid, maxlen=max_length, padding=\"pre\", truncating=\"pre\", value=0)" ] }, { "cell_type": "code", "execution_count": 4, "id": "1e3fb0ec", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Model: \"sequential\"\n",
       "
\n" ], "text/plain": [ "\u001b[1mModel: \"sequential\"\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
       "│ embedding (Embedding)           │ (None, 100, 64)        │       640,000 │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ spatial_dropout1d               │ (None, 100, 64)        │             0 │\n",
       "│ (SpatialDropout1D)              │                        │               │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ lstm (LSTM)                     │ (None, 256)            │       328,704 │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dense (Dense)                   │ (None, 1)              │           257 │\n",
       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
       "
\n" ], "text/plain": [ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", "│ embedding (\u001b[38;5;33mEmbedding\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m640,000\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ spatial_dropout1d │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", "│ (\u001b[38;5;33mSpatialDropout1D\u001b[0m) │ │ │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ lstm (\u001b[38;5;33mLSTM\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m328,704\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m257\u001b[0m │\n", "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
 Total params: 968,961 (3.70 MB)\n",
       "
\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m968,961\u001b[0m (3.70 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
 Trainable params: 968,961 (3.70 MB)\n",
       "
\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m968,961\u001b[0m (3.70 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
 Non-trainable params: 0 (0.00 B)\n",
       "
\n" ], "text/plain": [ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from keras.api.models import Sequential\n", "from keras.api.layers import InputLayer, Embedding, SpatialDropout1D, LSTM, Dense\n", "\n", "lstm_model = Sequential()\n", "lstm_model.add(InputLayer(shape=(max_length,), dtype=\"float32\"))\n", "lstm_model.add(Embedding(unique_words, 64))\n", "lstm_model.add(SpatialDropout1D(0.2))\n", "lstm_model.add(LSTM(256, dropout=0.2))\n", "lstm_model.add(Dense(1, activation=\"sigmoid\"))\n", "\n", "lstm_model.summary()" ] }, { "cell_type": "code", "execution_count": 5, "id": "11236198", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/4\n", "\u001b[1m196/196\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 214ms/step - accuracy: 0.6435 - loss: 0.6105 - val_accuracy: 0.8497 - val_loss: 0.3466\n", "Epoch 2/4\n", "\u001b[1m196/196\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m46s\u001b[0m 231ms/step - accuracy: 0.8819 - loss: 0.2947 - val_accuracy: 0.8527 - val_loss: 0.3380\n", "Epoch 3/4\n", "\u001b[1m196/196\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m53s\u001b[0m 273ms/step - accuracy: 0.9121 - loss: 0.2282 - val_accuracy: 0.8472 - val_loss: 0.3587\n", "Epoch 4/4\n", "\u001b[1m196/196\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m64s\u001b[0m 325ms/step - accuracy: 0.9299 - loss: 0.1847 - val_accuracy: 0.8332 - val_loss: 0.3998\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from keras.api.callbacks import ModelCheckpoint\n", "\n", "lstm_model.compile(\n", " loss=\"binary_crossentropy\",\n", " optimizer=\"adam\",\n", " metrics=[\"accuracy\"],\n", ")\n", "\n", "lstm_model.fit(\n", " X_train,\n", " y_train,\n", " batch_size=128,\n", " epochs=4,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[ModelCheckpoint(filepath=output_dir + \"/lstm_weights.{epoch:02d}.keras\")],\n", ")" ] }, { "cell_type": "code", "execution_count": 6, "id": "94987771", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 50ms/step - accuracy: 0.8509 - loss: 0.3421\n" ] }, { "data": { "text/plain": [ "[0.33803924918174744, 0.8527200222015381]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lstm_model.load_weights(output_dir + \"/lstm_weights.02.keras\")\n", "lstm_model.evaluate(X_valid, y_valid)" ] }, { "cell_type": "code", "execution_count": 7, "id": "8965a612", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m36s\u001b[0m 47ms/step\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.hist(lstm_model.predict(X_valid))\n", "_ = plt.axvline(x=0.5, color=\"orange\")" ] } ], "metadata": { "kernelspec": { "display_name": ".venv (3.12.10)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.10" } }, "nbformat": 4, "nbformat_minor": 5 }