Skip to content

Instantly share code, notes, and snippets.

@nttuan8
Last active May 25, 2020 10:36
Show Gist options
  • Save nttuan8/17ce0092b7c4b1d8092ef9127652a7fb to your computer and use it in GitHub Desktop.
Save nttuan8/17ce0092b7c4b1d8092ef9127652a7fb to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "mnist.ipynb",
"version": "0.3.2",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"metadata": {
"id": "hIArylcR3KOZ",
"colab_type": "code",
"outputId": "ee3b6b52-83f5-4273-a586-c95d5981a10b",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"cell_type": "code",
"source": [
"# 1. Thêm các thư viện cần thiết\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense, Dropout, Activation, Flatten\n",
"from keras.layers import Conv2D, MaxPooling2D\n",
"from keras.utils import np_utils\n",
"from keras.datasets import mnist"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
],
"name": "stderr"
}
]
},
{
"metadata": {
"id": "MZMLgpcY3b7G",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Load dữ liệu từ MNIST dataset, bao gồm 60.000 training set và 10.000 test set. Sau đó chia bộ traning set thành 2: 50.000 cho training set và 10.000 dữ liệu cho validation set."
]
},
{
"metadata": {
"id": "IYP0FcDeRnJO",
"colab_type": "code",
"outputId": "c907c963-c9ae-4215-87c5-4cf1b114f645",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"cell_type": "code",
"source": [
"# 2. Load dữ liệu MNIST\n",
"(X_train, y_train), (X_test, y_test) = mnist.load_data()\n",
"X_val, y_val = X_train[50000:60000,:], y_train[50000:60000]\n",
"X_train, y_train = X_train[:50000,:], y_train[:50000]\n",
"print(X_train.shape)"
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"text": [
"(50000, 28, 28)\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "jIEIibrB4LDb",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Dữ liệu input cho mô hình convolutional neural network là 1 tensor 4 chiều (N, W, H, D), trong bài này là ảnh xám nên W = H = 28, D = 1, N là số lượng ảnh cho mỗi lần training. Do dữ liệu ảnh ở trên có kích thước là (N, 28, 28) tức là (N, W, H) nên rần reshape lại thành kích thước N * 28 * 28 * 1 để giống kích thước mà keras yêu cầu."
]
},
{
"metadata": {
"id": "cfFUzBFcRot6",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"# 3. Reshape lại dữ liệu cho đúng kích thước mà keras yêu cầu\n",
"X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)\n",
"X_val = X_val.reshape(X_val.shape[0], 28, 28, 1)\n",
"X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)"
],
"execution_count": 3,
"outputs": []
},
{
"metadata": {
"id": "FifpZK_b7KvJ",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Bước này chuyển đổi one-hot encoding label Y của ảnh ví dụ số 5 thành vector [0, 0, 0, 0, 0, 1, 0, 0, 0, 0]"
]
},
{
"metadata": {
"id": "OHwO1pw6RsA9",
"colab_type": "code",
"outputId": "5f9165db-c4ba-4778-aca2-ac43a1e75794",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 50
}
},
"cell_type": "code",
"source": [
"# 4. One hot encoding label (Y)\n",
"Y_train = np_utils.to_categorical(y_train, 10)\n",
"Y_val = np_utils.to_categorical(y_val, 10)\n",
"Y_test = np_utils.to_categorical(y_test, 10)\n",
"print('Dữ liệu y ban đầu ', y_train[0])\n",
"print('Dữ liệu y sau one-hot encoding ',Y_train[0])"
],
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"text": [
"Dữ liệu y ban đầu 5\n",
"Dữ liệu y sau one-hot encoding [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "LuoSHJ1m7uUQ",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Bước này định nghĩa model:\n",
"1. Model = Sequential() để nói cho keras là ta sẽ xếp các layer lên nhau để tạo model. Ví dụ input -> CONV -> POOL -> CONV -> POOL -> FLATTEN -> FC -> OUTPUT\n",
"2. Ở layer đầu tiên cần chỉ rõ input_shape của ảnh, input_shape = (W, H, D), ta dùng ảnh xám kích thước (28,28) nên input_shape = (28, 28, 1)\n",
"3. Khi thêm Convolutional Layer ta cần chỉ rõ các tham số: K (số lượng layer), kernel size (W, H), hàm activation sử dụng. cấu trúc: model.add(Conv2D(K, (W, H), activation='tên_hàm_activation'))\n",
"4. Khi thêm Maxpooling Layer cần chỉ rõ size của kernel, model.add(MaxPooling2D(pool_size=(W, H)))\n",
"5. Bước Flatten chuyển từ tensor sang vector chỉ cần thêm flatten layer.\n",
"6. Để thêm Fully Connected Layer (FC) cần chỉ rõ số lượng node trong layer và hàm activation sử dụng trong layer, cấu trúc: model.add(Dense(số_lượng_node activation='tên_hàm activation'))\n"
]
},
{
"metadata": {
"id": "YhER3pYeRtjC",
"colab_type": "code",
"outputId": "bf4676d3-d716-4300-e789-aa66b6270574",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 87
}
},
"cell_type": "code",
"source": [
"# 5. Định nghĩa model\n",
"model = Sequential()\n",
" \n",
"# Thêm Convolutional layer với 32 kernel, kích thước kernel 3*3\n",
"# dùng hàm sigmoid làm activation và chỉ rõ input_shape cho layer đầu tiên\n",
"model.add(Conv2D(32, (3, 3), activation='sigmoid', input_shape=(28,28,1)))\n",
"\n",
"# Thêm Convolutional layer\n",
"model.add(Conv2D(32, (3, 3), activation='sigmoid'))\n",
"\n",
"# Thêm Max pooling layer\n",
"model.add(MaxPooling2D(pool_size=(2,2)))\n",
"\n",
"# Flatten layer chuyển từ tensor sang vector\n",
"model.add(Flatten())\n",
"\n",
"# Thêm Fully Connected layer với 128 nodes và dùng hàm sigmoid\n",
"model.add(Dense(128, activation='sigmoid'))\n",
"\n",
"# Output layer với 10 node và dùng softmax function để chuyển sang xác xuất.\n",
"model.add(Dense(10, activation='softmax'))"
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Colocations handled automatically by placer.\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "T37UmXrzRvfT",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"# 6. Compile model, chỉ rõ hàm loss_function nào được sử dụng, phương thức \n",
"# đùng để tối ưu hàm loss function.\n",
"model.compile(loss='categorical_crossentropy',\n",
" optimizer='adam',\n",
" metrics=['accuracy'])"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "u8oF7cHeRwoM",
"colab_type": "code",
"outputId": "7db6801e-cd87-4330-9b93-3513b87b55e3",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 440
}
},
"cell_type": "code",
"source": [
"# 7. Thực hiện train model với data\n",
"H = model.fit(X_train, Y_train, validation_data=(X_val, Y_val),\n",
" batch_size=32, epochs=10, verbose=1)"
],
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use tf.cast instead.\n",
"Train on 50000 samples, validate on 10000 samples\n",
"Epoch 1/10\n",
"50000/50000 [==============================] - 18s 351us/step - loss: 0.3167 - acc: 0.9132 - val_loss: 0.0724 - val_acc: 0.9822\n",
"Epoch 2/10\n",
"50000/50000 [==============================] - 16s 317us/step - loss: 0.0637 - acc: 0.9818 - val_loss: 0.0555 - val_acc: 0.9836\n",
"Epoch 3/10\n",
"50000/50000 [==============================] - 16s 315us/step - loss: 0.0403 - acc: 0.9882 - val_loss: 0.0458 - val_acc: 0.9872\n",
"Epoch 4/10\n",
"50000/50000 [==============================] - 16s 314us/step - loss: 0.0278 - acc: 0.9919 - val_loss: 0.0455 - val_acc: 0.9871\n",
"Epoch 5/10\n",
"50000/50000 [==============================] - 16s 313us/step - loss: 0.0183 - acc: 0.9949 - val_loss: 0.0409 - val_acc: 0.9870\n",
"Epoch 6/10\n",
"50000/50000 [==============================] - 16s 312us/step - loss: 0.0132 - acc: 0.9962 - val_loss: 0.0450 - val_acc: 0.9868\n",
"Epoch 7/10\n",
"50000/50000 [==============================] - 16s 313us/step - loss: 0.0097 - acc: 0.9974 - val_loss: 0.0415 - val_acc: 0.9891\n",
"Epoch 8/10\n",
"50000/50000 [==============================] - 15s 309us/step - loss: 0.0060 - acc: 0.9988 - val_loss: 0.0414 - val_acc: 0.9897\n",
"Epoch 9/10\n",
"50000/50000 [==============================] - 15s 308us/step - loss: 0.0052 - acc: 0.9987 - val_loss: 0.0442 - val_acc: 0.9889\n",
"Epoch 10/10\n",
"50000/50000 [==============================] - 15s 307us/step - loss: 0.0030 - acc: 0.9995 - val_loss: 0.0456 - val_acc: 0.9899\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "NkITk_WEYc2R",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 393
},
"outputId": "efa7428c-1001-4904-af44-35a26a9f047d"
},
"cell_type": "code",
"source": [
"# 8. Vẽ đồ thị loss, accuracy của traning set và validation set\n",
"fig = plt.figure()\n",
"numOfEpoch = 10\n",
"plt.plot(np.arange(0, numOfEpoch), H.history['loss'], label='training loss')\n",
"plt.plot(np.arange(0, numOfEpoch), H.history['val_loss'], label='validation loss')\n",
"plt.plot(np.arange(0, numOfEpoch), H.history['acc'], label='accuracy')\n",
"plt.plot(np.arange(0, numOfEpoch), H.history['val_acc'], label='validation accuracy')\n",
"plt.title('Accuracy and Loss')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Loss|Accuracy')\n",
"plt.legend()"
],
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f8d433e4630>"
]
},
"metadata": {
"tags": []
},
"execution_count": 8
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAe8AAAFnCAYAAACPasF4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd8U+X+B/DPGU060gktU0CKUAQR\nEBEsUlYpFLwOEHpdKCoOVLyogFUvDsBxHQiIE8Et92LlpyIiW0CmoEABERSkrLbQnTTrnN8fGU3a\npARskqb9vF/mlXOeM/LNQ83nnCfjCKqqqiAiIqKQIQa7ACIiIjo/DG8iIqIQw/AmIiIKMQxvIiKi\nEMPwJiIiCjEMbyIiohDD8CYKgKysLPzjH/8Idhn1Rnp6OrZu3Vqjfdq0aZg/f34QKiIKLQxvIj87\nePAgoqOj0bJlS+zatSvY5RBRA8DwJvKzr776CsOGDcPIkSOxdOlSt2VLly5FRkYGMjIy8Pjjj8Nk\nMnlt37p1K9LT053bus7PnTsXTz31FEaPHo1FixZBURQ8++yzyMjIwKBBg/D444/DbDYDAM6ePYv7\n7rsPgwcPxrXXXouNGzdi3bp1GDlypFttN954I1atWlXj+bz55pvIyMjAkCFDcO+996K0tNRZw3PP\nPYeJEydi8ODBGD16NPLz8wEAe/fuxYgRI5CRkYFZs2ZdUD8uX74cI0eOxLBhw3D77bfjr7/+AmA7\nOBo7dixGjBiBoUOH4pNPPqm1nahBUInIbywWizp48GC1rKxM1ev16oABA1Sj0aiqqqoeO3ZM7dOn\nj3rq1ClVURR14sSJ6nvvvee1fcuWLeqQIUOc+3adnzNnjtqvXz/1zJkzqqqq6vfff6+OHDlSNZlM\namVlpTp8+HB16dKlqqqqanZ2tvryyy+rqqqqubm5au/evVWj0aj27t1b3b9/v6qqqnr8+HH1iiuu\ncNbqsGfPHrVv375qWVmZarVa1TvuuEN98803nTX07dtXzcvLUxVFUSdMmKDOnz9fVVVVHTVqlPrF\nF1+oqqqq3333nZqSkqJu2bKlRn9NnTrVuT9XjnqOHDmiqqqqLliwQB03bpyqqqr60EMPqTk5Oaqq\nquqZM2fU+++/XzUajV7biRoCnnkT+dHGjRtx2WWXQafTISIiAr1798batWsBAJs2bUKPHj3QrFkz\n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\ncIb7hcvXAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 576x396 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "mvRM2M6NRy9Q",
"colab_type": "code",
"outputId": "a01fbf3b-976f-476b-feae-f7e67bdfd634",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"cell_type": "code",
"source": [
"# 9. Đánh giá model với dữ liệu test set\n",
"score = model.evaluate(X_test, Y_test, verbose=0)\n",
"print(score)"
],
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"text": [
"[0.03442202161136956, 0.9892]\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "lgAVysTefR5Q",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Ta sẽ dùng kết quả đánh giá của mode với test set để làm kết quả cuối cùng của model. Tức model của chúng ta dữ đoán chữ số có độ chính xác 98.92% với MNIST dataset. Nghĩa là dự đoán khoảng 100 ảnh thì sai 1 ảnh."
]
},
{
"metadata": {
"id": "y25mu5OTYG4d",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 364
},
"outputId": "8214104c-a382-47a2-c911-5c496f7bc1b9"
},
"cell_type": "code",
"source": [
"# 10. Dự đoán ảnh\n",
"plt.imshow(X_test[0].reshape(28,28), cmap='gray')\n",
"\n",
"y_predict = model.predict(X_test[0].reshape(1,28,28,1))\n",
"print('Giá trị dự đoán: ', np.argmax(y_predict))"
],
"execution_count": 10,
"outputs": [
{
"output_type": "stream",
"text": [
"Giá trị dự đoán: 7\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nXmdnZ1L2D/TFFJbl5eWqr69XT0+PFi5cqMOHD6upqUlZWVmSpJdfflmTJ09OZp0A4KiYYXns2DGd\nOnVKwWBQHR0dmjVrlh577DEtX75cxcXFqagRABwXMyzHjh2rwsJCSdLQoUPV1dWlq1evJr0wAEgn\nMW/wZGRkKBAISJJCoZAmTpyojIwMVVZWasGCBXrjjTd0/vz5pBcKAE7yhcPhsGViTU2Ndu/erf37\n96uxsVFZWVnKy8vTnj179Mcff2j9+vV9rtvY2Kj8/PyEFQ0AqWYKyyNHjmjHjh3at29f5KbOf7W0\ntOjNN99UZWVl3zvx+aKOh8PhPpe5ldt7WrNmTdTxTZs2qaysLPLzW2+9lZT9W++GT58+3bzNn376\nKeq4249VNF7sSUpdXzeLw5iX4RcvXlR5ebl2794dCcolS5aotbVVklRXV6fRo0cnqFQASE8xb/Ac\nOnRIHR0dWrZsWWTsueee07JlyzR48GAFAgFt3rw5qUUCgNNihuWcOXM0Z86cXuOzZs1KSkEAkI54\n3BEADHjcEUl38uRJ89wpU6aY5vHnakg1ziwBwICwBAADwhIADAhLADAgLAHAgLAEAAPCEgAMCEsA\nMCAsAcDA/H2WA9oJX9Hmel7si57cwxVf0QYAICwBwISwBAADwhIADAhLADAgLAHAgLAEAAPCEgAM\nCEsAMCAsAcAgJY87AoDbcWYJAAaEJQAYEJYAYEBYAoABYQkABoQlABj4ndjppk2bdPLkSfl8PpWV\nlamwsNCJMhKqrq5OS5cu1ejRoyVJY8aM0bp16xyuKn7Nzc16/fXX9dJLL2nevHn6/ffftWrVKl29\nelU5OTl6++23lZmZ6XSZ/XJjT6tXr1ZTU5OysrIkSS+//LImT57sbJH9VF5ervr6evX09GjhwoUq\nKChw/XGSevd1+PBhx49VysPy+PHjOnPmjILBoE6fPq2ysjIFg8FUl5EUjz76qCoqKpwuY8AuXbqk\njRs3qqioKDJWUVGh0tJSTZs2Tdu3b1coFFJpaamDVfZPtJ4kafny5SouLnaoqoE5duyYTp06pWAw\nqI6ODs2aNUtFRUWuPk5S9L4ee+wxx49Vyi/Da2trVVJSIkkaNWqU/v77b3V2dqa6DNxEZmam9u7d\nq9zc3MhYXV2dpkyZIkkqLi5WbW2tU+XFJVpPbjd27Fjt2LFDkjR06FB1dXW5/jhJ0fu6evWqw1U5\nEJbnzp3TsGHDIj8PHz5c7e3tqS4jKVpaWvTaa69p7ty5Onr0qNPlxM3v92vQoEHXjXV1dUUu57Kz\ns113zKL1JEmVlZVasGCB3njjDZ0/f96ByuKXkZGhQCAgSQqFQpo4caLrj5MUva+MjAzHj5Ujn1le\nyytPW95zzz1avHixpk2bptbWVi1YsEDV1dWu/LwoFq8csxkzZigrK0t5eXnas2ePdu7cqfXr1ztd\nVr/V1NQoFApp//79mjp1amTc7cfp2r4aGxsdP1YpP7PMzc3VuXPnIj//+eefysnJSXUZCTdixAg9\n/fTT8vl8uuuuu3Tbbbepra3N6bISJhAIqLu7W5LU1tbmicvZoqIi5eXlSZKeeOIJNTc3O1xR/x05\nckS7du3S3r17deutt3rmON3YVzocq5SH5fjx41VVVSVJampqUm5uroYMGZLqMhLu4MGD+uCDDyRJ\n7e3t+uuvvzRixAiHq0qccePGRY5bdXW1JkyY4HBFA7dkyRK1trZK+v/PZP/7lwxucfHiRZWXl2v3\n7t2Ru8ReOE7R+kqHY+XItw5t27ZNJ06ckM/n04YNG3T//fenuoSE6+zs1IoVK3ThwgVduXJFixcv\n1qRJk5wuKy6NjY3aunWrzp49K7/frxEjRmjbtm1avXq1/v33X40cOVKbN2/WLbfc4nSpZtF6mjdv\nnvbs2aPBgwcrEAho8+bNys7OdrpUs2AwqHfffVf33ntvZGzLli1au3ata4+TFL2v5557TpWVlY4e\nK76iDQAMeIIHAAwISwAwICwBwICwBAADwhIADAhLADAgLAHAgLAEAIP/APzEXxVDzLNBAAAAAElF\nTkSuQmCC\n",
"text/plain": [
"<Figure size 576x396 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment