{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "view-in-github" }, "source": [ "\"Open\n" ] }, { "cell_type": "markdown", "metadata": { "id": "BCG-8NlVLab8" }, "source": [ "# 기본 설치\n", "\n", "아래 명령어를 통해 설치할 수 있습니다\n", "\n", "```python\n", "!pip install pso2keras\n", "```\n", "\n", "필수 패키지로 tensorflow 가 필요하며, log 분석시에는 tensorboard 가 추가로 필요합니다\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Qd4s8Pu0nYGs" }, "outputs": [], "source": [ "import sys\n", "print('python version ', sys.version)\n", "\n", "# !pip uninstall pso2keras\n", "!pip install --upgrade pip\n", "!pip install pso2keras" ] }, { "cell_type": "markdown", "metadata": { "id": "Bs6TLWxLMmEw" }, "source": [ "# 모델 생성\n", "\n", "keras 모델을 사용하여 학습하기 때문에 모델을 생성하여 입력을 해주어야 합니다.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "bVWF-rQ3j_ld" }, "outputs": [], "source": [ "import os\n", "import sys\n", "\n", "os.environ[\"TF_CPP_MIN_LOG_LEVEL\"] = \"2\"\n", "\n", "import gc\n", "\n", "import tensorflow as tf\n", "from keras.datasets import mnist\n", "from keras.layers import Conv2D, Dense, Dropout, Flatten, MaxPooling2D\n", "from keras.models import Sequential\n", "from tensorflow import keras\n", "\n", "from pso import Optimizer\n", "\n", "\n", "def get_data():\n", " (x_train, y_train), (x_test, y_test) = mnist.load_data()\n", "\n", " x_train, x_test = x_train / 255.0, x_test / 255.0\n", " x_train = x_train.reshape((60000, 28, 28, 1))\n", " x_test = x_test.reshape((10000, 28, 28, 1))\n", "\n", " y_train, y_test = tf.one_hot(y_train, 10), tf.one_hot(y_test, 10)\n", "\n", " x_train, x_test = tf.convert_to_tensor(x_train), tf.convert_to_tensor(x_test)\n", " y_train, y_test = tf.convert_to_tensor(y_train), tf.convert_to_tensor(y_test)\n", "\n", " print(f\"x_train : {x_train[0].shape} | y_train : {y_train[0].shape}\")\n", " print(f\"x_test : {x_test[0].shape} | y_test : {y_test[0].shape}\")\n", "\n", " return x_train, y_train, x_test, y_test\n", "\n", "\n", "def get_data_test():\n", " (x_train, y_train), (x_test, y_test) = mnist.load_data()\n", " x_test = x_test / 255.0\n", " x_test = x_test.reshape((10000, 28, 28, 1))\n", "\n", " y_test = tf.one_hot(y_test, 10)\n", "\n", " x_test = tf.convert_to_tensor(x_test)\n", " y_test = tf.convert_to_tensor(y_test)\n", "\n", " print(f\"x_test : {x_test[0].shape} | y_test : {y_test[0].shape}\")\n", "\n", " return x_test, y_test\n", "\n", "\n", "def make_model():\n", " model = Sequential()\n", " model.add(\n", " Conv2D(32, kernel_size=(5, 5), activation=\"relu\", input_shape=(28, 28, 1))\n", " )\n", " model.add(MaxPooling2D(pool_size=(3, 3)))\n", " model.add(Conv2D(64, kernel_size=(3, 3), activation=\"relu\"))\n", " model.add(MaxPooling2D(pool_size=(2, 2)))\n", " model.add(Dropout(0.25))\n", " model.add(Flatten())\n", " model.add(Dense(128, activation=\"relu\"))\n", " model.add(Dense(10, activation=\"softmax\"))\n", "\n", " return model" ] }, { "cell_type": "markdown", "metadata": { "id": "JKVXZC5fNjEr" }, "source": [ "# 학습\n", "\n", "학습을 위한 particle 개수와 기본 설정이 필요합니다\n", "loss 는 tensorflow 의 loss 를 활용합니다\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 267, "referenced_widgets": [ "60384954600849c984ec832f1e0ba089", "f4493e24f41f46d98a5c6307d4381858", "244e9d76fe934af2b536d4a41bd9ebc5", "64ee09f226ae41e8a8d7203db2370f64", "62129a4ae85b4aabb44cbb4c594ae7e5", "bd5692b1b8b4471f901e27df360f055e", "0cd1cd1ade0445a28f6020c1b52ed7f4", "f60caa635a1f4024b6bfd9bdc9a2d500", "f3452c1a31664a38b4ba3ad870cb9286", "262f741d45bf4069912d9e4ba4345450", "02e4861a0c934115bf494bca20a87e83", "0aa01a9086594c09b7be442781d15761", "55e5e64d8e484ae89b2bf56c0ce8a4e1", "b14bb35224404b58b2ea121b91152564", "8eacb4db3ae345bfa22f89ec79285648", "045717bfe98c420ebc4342d0061913a0", "6bd647b0e49c4d13b3a937dd325054d0", "86ccd693148940d29d5ed92a81a0d25c", "bf1ea704226b4fee9caed1a86bd6fc03", "bf625ea23d2c4aaa9cbc404fe88f0c61", "520f094d24d443e0b487d2717569f3b5", "eb816e9a17e245f5b0c41c552dd76183", "fae612998dec4856b30ebb2e5ececdfc", "fae548adc4294068a80d5b11572e411e", "415a6d555c95480da6fb9ad727ffd69a", "7e7a010af89d42bd94c558bb72d76230", "63d9eccdf7ea4a22a692cc1e0c1fbbc7", "822baf2dcccb41dcafc7139114a268a0", "f1599b1fafd6424483c5f404b3c79fd6", "6b60ab162f5a43e49904ea89ffe0f3ba", "b2a43a859d8e442d8d2dc8eb2cb489a4", "5c9870ced6f845f2909f706727ba5877", "456cfb7462d74aeab02f9a0af32f769f", "09eb0575ee1c4bd288b5f0a79c506f67", "cb35fee4c8a94812b209a61499687824", "bbca06083a094719a58367dce36c5fe0", "df7e251ff08b443f924eafcdf4627721", "c1026663b57243d5b4fd651d06b83beb", "fb4c68e932bc48ada671c11bd4b51fcb", "0efa7087787445f993e83a41ebc5136d", "95840eaab18b4dd6ba90acd7602112c1", "c1525b47e0d9487fb54849863ebaa4e0", "f20e024da5414b00becceb0541e3e45e", "1b6fed5a1fb24d7d8fcc7dfd7e56e618", "31537bf870cd4dbcbee4f55d1383a4f4", "78c7e54708884ef0bf3feadf4e86b27b", "de7b67b83e934558a122203e6314fb67", "00e855c093c947a2bf0c7ec644b6e401", "b4929212a2634d7ea12a77f79e4d61ff", "cbea21e8c9004b149bd86e1b0c1e67ce", "f1b4dc5fe13546c19c4bbfecb390e328", "0048352cbddf4e5282be22298975efc4", "52d399c1dfe4440baa77b540a2b5664c", "4ce75915aeb4484e9f1d3f6a2a262c76", "191804b6a0d64c1aafd50b1518c8e7e5", "872b2c7612c44b15bdcee774fb9e70b7", "b14aa26f85e148359bc9abff58951b51", "77a9f488c18c4487ae107bee7362b643", "b66fc8e0b5144229a69c5f2942ab796a", "bdda4512f2ec4290b29bf69d9b4808fe", "2fb4ef63d0824d36952f860f57e228ea", "a637e3a3a7144f6db19eb3bbd812722f", "8689e7f497fa4247b15f9929af81e68f", "bbf5277f6016441baa5a21a8059944d9", "814ff8b72e0e4f20877c85ba4ced21e6", "c63110ef853d411db16a41cb355324af" ] }, "id": "wXmfci5UKNm4", "outputId": "c5bc9a2f-b949-4dac-e4d1-32942282cabf" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", "11490434/11490434 [==============================] - 0s 0us/step\n", "x_test : (28, 28, 1) | y_test : (10,)\n", "start running time : 20230723-095443\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "60384954600849c984ec832f1e0ba089", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Initializing Particles: 0%| | 0/500 [00:00