{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "kernelspec": { "display_name": "TensorFlow 2.3 on Python 3.6 (CUDA 10.1)", "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.6.9" }, "colab": { "name": "11-10.multi_convnet_sentiment_classifier.ipynb", "provenance": [] }, "accelerator": "GPU" }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "hgUcB5mLZ26f" }, "source": [ "# 다중 합성곱 감성 분류기" ] }, { "cell_type": "markdown", "metadata": { "id": "dORKDN5FZ26j" }, "source": [ "이 노트북에서 *다중 병렬 합성곱 층*의 출력을 연결하여 감성에 따라 IMDB 영화 리뷰를 분류합니다." ] }, { "cell_type": "markdown", "metadata": { "id": "yTRCaPqnZ26k" }, "source": [ "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/rickiepark/dl-illustrated/blob/master/notebooks/11-10.multi_convnet_sentiment_classifier.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "id": "iALmwm2cZ26k" }, "source": [ "#### 라이브러리 적재" ] }, { "cell_type": "code", "metadata": { "id": "f2JHAgJwZ26k" }, "source": [ "from tensorflow import keras\n", "from tensorflow.keras.datasets import imdb\n", "from tensorflow.keras.preprocessing.sequence import pad_sequences\n", "from tensorflow.keras.models import Model # new!\n", "from tensorflow.keras.layers import Input, concatenate # new! \n", "from tensorflow.keras.layers import Dense, Dropout, Embedding, SpatialDropout1D, Conv1D, GlobalMaxPooling1D\n", "from tensorflow.keras.callbacks import ModelCheckpoint\n", "import os\n", "from sklearn.metrics import roc_auc_score \n", "import matplotlib.pyplot as plt \n", "%matplotlib inline" ], "execution_count": 14, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "DnbKgILpZ26l" }, "source": [ "#### 하이퍼파라미터 설정" ] }, { "cell_type": "code", "metadata": { "id": "mOLHsKenZ26l" }, "source": [ "# 출력 디렉토리\n", "output_dir = 'model_output/multiconv'\n", "\n", "# 훈련\n", "epochs = 4\n", "batch_size = 128\n", "\n", "# 벡터 공간 임베딩\n", "n_dim = 64\n", "n_unique_words = 5000 \n", "max_review_length = 400\n", "pad_type = trunc_type = 'pre'\n", "drop_embed = 0.2 \n", "\n", "# 합성곱 층 구조\n", "n_conv_1 = n_conv_2 = n_conv_3 = 256 \n", "k_conv_1 = 3\n", "k_conv_2 = 2\n", "k_conv_3 = 4\n", "\n", "# 밀집 층 구조\n", "n_dense = 256\n", "dropout = 0.2" ], "execution_count": 15, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "xwLgb-K_Z26l" }, "source": [ "#### 데이터 적재" ] }, { "cell_type": "code", "metadata": { "id": "kSk72OKKZ26l" }, "source": [ "(x_train, y_train), (x_valid, y_valid) = imdb.load_data(num_words=n_unique_words) " ], "execution_count": 16, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "ITmaGTkiZ26m" }, "source": [ "#### 데이터 전처리" ] }, { "cell_type": "code", "metadata": { "id": "jVtWHU1WZ26n" }, "source": [ "x_train = pad_sequences(x_train, maxlen=max_review_length, padding=pad_type, truncating=trunc_type, value=0)\n", "x_valid = pad_sequences(x_valid, maxlen=max_review_length, padding=pad_type, truncating=trunc_type, value=0)" ], "execution_count": 17, "outputs": [] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "id": "Q46OGkIBZ26n" }, "source": [ "#### 신경망 만들기" ] }, { "cell_type": "code", "metadata": { "id": "Dch3SgLlZ26n" }, "source": [ "input_layer = Input(shape=(max_review_length,), \n", " dtype='int16', name='input') \n", "\n", "# 임베딩 \n", "embedding_layer = Embedding(n_unique_words, n_dim, \n", " name='embedding')(input_layer)\n", "drop_embed_layer = SpatialDropout1D(drop_embed, \n", " name='drop_embed')(embedding_layer)\n", "\n", "# 3개의 병렬 합성곱 층\n", "conv_1 = Conv1D(n_conv_1, k_conv_1, \n", " activation='relu', name='conv_1')(drop_embed_layer)\n", "maxp_1 = GlobalMaxPooling1D(name='maxp_1')(conv_1)\n", "\n", "conv_2 = Conv1D(n_conv_2, k_conv_2, \n", " activation='relu', name='conv_2')(drop_embed_layer)\n", "maxp_2 = GlobalMaxPooling1D(name='maxp_2')(conv_2)\n", "\n", "conv_3 = Conv1D(n_conv_3, k_conv_3, \n", " activation='relu', name='conv_3')(drop_embed_layer)\n", "maxp_3 = GlobalMaxPooling1D(name='maxp_3')(conv_3)\n", "\n", "# 합성곱 층의 활성화 연결\n", "concat = concatenate([maxp_1, maxp_2, maxp_3])\n", "\n", "# 밀집 은닉층\n", "dense_layer = Dense(n_dense, \n", " activation='relu', name='dense')(concat)\n", "drop_dense_layer = Dropout(dropout, name='drop_dense')(dense_layer)\n", "dense_2 = Dense(int(n_dense/4), \n", " activation='relu', name='dense_2')(drop_dense_layer)\n", "dropout_2 = Dropout(dropout, name='drop_dense_2')(dense_2)\n", "\n", "# 출력층\n", "predictions = Dense(1, activation='sigmoid', name='output')(dropout_2)\n", "\n", "# 모델 생성\n", "model = Model(input_layer, predictions)" ], "execution_count": 18, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "tI3w7on5Z26n", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "73af0990-58a0-4d85-a5f6-77538cde56df" }, "source": [ "model.summary() " ], "execution_count": 19, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Model: \"model_1\"\n", "__________________________________________________________________________________________________\n", " Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", " input (InputLayer) [(None, 400)] 0 [] \n", " \n", " embedding (Embedding) (None, 400, 64) 320000 ['input[0][0]'] \n", " \n", " drop_embed (SpatialDropout1D) (None, 400, 64) 0 ['embedding[0][0]'] \n", " \n", " conv_1 (Conv1D) (None, 398, 256) 49408 ['drop_embed[0][0]'] \n", " \n", " conv_2 (Conv1D) (None, 399, 256) 33024 ['drop_embed[0][0]'] \n", " \n", " conv_3 (Conv1D) (None, 397, 256) 65792 ['drop_embed[0][0]'] \n", " \n", " maxp_1 (GlobalMaxPooling1D) (None, 256) 0 ['conv_1[0][0]'] \n", " \n", " maxp_2 (GlobalMaxPooling1D) (None, 256) 0 ['conv_2[0][0]'] \n", " \n", " maxp_3 (GlobalMaxPooling1D) (None, 256) 0 ['conv_3[0][0]'] \n", " \n", " concatenate_1 (Concatenate) (None, 768) 0 ['maxp_1[0][0]', \n", " 'maxp_2[0][0]', \n", " 'maxp_3[0][0]'] \n", " \n", " dense (Dense) (None, 256) 196864 ['concatenate_1[0][0]'] \n", " \n", " drop_dense (Dropout) (None, 256) 0 ['dense[0][0]'] \n", " \n", " dense_2 (Dense) (None, 64) 16448 ['drop_dense[0][0]'] \n", " \n", " drop_dense_2 (Dropout) (None, 64) 0 ['dense_2[0][0]'] \n", " \n", " output (Dense) (None, 1) 65 ['drop_dense_2[0][0]'] \n", " \n", "==================================================================================================\n", "Total params: 681,601\n", "Trainable params: 681,601\n", "Non-trainable params: 0\n", "__________________________________________________________________________________________________\n" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "YGDpwG6dZ26o" }, "source": [ "#### 모델 설정" ] }, { "cell_type": "code", "metadata": { "id": "sRhMKJMuZ26o" }, "source": [ "model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])" ], "execution_count": 20, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "sUleP9BQZ26o" }, "source": [ "modelcheckpoint = ModelCheckpoint(filepath=output_dir+\"/weights.{epoch:02d}.hdf5\")\n", "if not os.path.exists(output_dir):\n", " os.makedirs(output_dir)" ], "execution_count": 21, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "AkUhP6QdZ26o" }, "source": [ "#### 훈련!" ] }, { "cell_type": "code", "metadata": { "id": "13wm-Rp1Z26o", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "04561046-e301-4390-d527-08f6f46b9286" }, "source": [ "model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_valid, y_valid), callbacks=[modelcheckpoint])" ], "execution_count": 22, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Epoch 1/4\n", "196/196 [==============================] - 11s 50ms/step - loss: 0.5000 - accuracy: 0.7244 - val_loss: 0.2862 - val_accuracy: 0.8797\n", "Epoch 2/4\n", "196/196 [==============================] - 10s 49ms/step - loss: 0.2495 - accuracy: 0.9002 - val_loss: 0.2611 - val_accuracy: 0.8910\n", "Epoch 3/4\n", "196/196 [==============================] - 9s 45ms/step - loss: 0.1728 - accuracy: 0.9358 - val_loss: 0.2727 - val_accuracy: 0.8936\n", "Epoch 4/4\n", "196/196 [==============================] - 9s 48ms/step - loss: 0.1163 - accuracy: 0.9597 - val_loss: 0.2975 - val_accuracy: 0.8940\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 22 } ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "id": "HNOc-P0rZ26p" }, "source": [ "#### 평가" ] }, { "cell_type": "code", "metadata": { "id": "i61pwDKBZ26p" }, "source": [ "model.load_weights(output_dir+\"/weights.02.hdf5\") " ], "execution_count": 23, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "Z7m7gkB-Z26p", "outputId": "6db3d46f-2dec-45f0-f969-cd722d25e285", "colab": { "base_uri": "https://localhost:8080/" } }, "source": [ "y_hat = model.predict(x_valid)" ], "execution_count": 24, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "782/782 [==============================] - 3s 4ms/step\n" ] } ] }, { "cell_type": "code", "metadata": { "id": "rznxemPUZ26p", "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, "outputId": "0dc6c3ec-fd2a-4387-c5e9-2ebc5f3288a8" }, "source": [ "plt.hist(y_hat)\n", "_ = plt.axvline(x=0.5, color='orange')" ], "execution_count": 25, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "icJwtOmaZ26p", "colab": { "base_uri": "https://localhost:8080/", "height": 36 }, "outputId": "0e7510a2-3cd5-418e-c243-2ac6c96965dd" }, "source": [ "\"{:0.2f}\".format(roc_auc_score(y_valid, y_hat)*100.0)" ], "execution_count": 26, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "'96.11'" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" } }, "metadata": {}, "execution_count": 26 } ] } ] }