{ "cells": [ { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import tensorflow as tf\n", "import os\n", "\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "path = '../datasets/food-101/train/'" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "fried_rice = os.listdir(path + 'fried_rice/')\n", "ramen = os.listdir(path + 'ramen/')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "resnet = tf.keras.applications.resnet50.ResNet50(include_top=False)\n", "preprocess_input = tf.keras.applications.resnet50.preprocess_input\n", "image = tf.keras.preprocessing.image" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def extract_features(img_paths, batch_size=64):\n", " \"\"\" This function extracts image features for each image in img_paths using ResNet50 bottleneck layer.\n", " Returned features is a numpy array with shape (len(img_paths), 2048).\n", " \"\"\"\n", " global resnet\n", " n = len(img_paths)\n", " img_array = np.zeros((n, 224, 224, 3))\n", " \n", " for i, path in enumerate(img_paths):\n", " img = image.load_img(path, target_size=(224, 224))\n", " img = image.img_to_array(img)\n", " img = np.expand_dims(img, axis=0)\n", " x = preprocess_input(img)\n", " img_array[i] = x\n", " \n", " X = resnet.predict(img_array, batch_size=batch_size, verbose=1)\n", " X = X.reshape((n, 2048))\n", " return X" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1600/1600 [==============================] - 320s 200ms/step\n" ] } ], "source": [ "X = extract_features(\n", " list(map(lambda x: path + 'fried_rice/' + x, fried_rice)) + list(map(lambda x: path + 'ramen/' + x, ramen))\n", ")\n", "y = np.array([1] * len(fried_rice) + [0] * len(ramen))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.3, random_state=42)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "def net():\n", " model = tf.keras.models.Sequential([\n", " tf.keras.layers.Flatten(),\n", " tf.keras.layers.Dense(256, activation=tf.nn.relu),\n", " tf.keras.layers.Dropout(0.2),\n", " tf.keras.layers.Dense(1, activation=tf.nn.sigmoid)\n", " ])\n", " return model" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 1120 samples, validate on 480 samples\n", "Epoch 1/5\n", "1120/1120 [==============================] - 1s 825us/step - loss: 0.3837 - acc: 0.8366 - val_loss: 0.1460 - val_acc: 0.9458\n", "Epoch 2/5\n", "1120/1120 [==============================] - 0s 138us/step - loss: 0.0960 - acc: 0.9688 - val_loss: 0.1089 - val_acc: 0.9563\n", "Epoch 3/5\n", "1120/1120 [==============================] - 0s 131us/step - loss: 0.0635 - acc: 0.9795 - val_loss: 0.1074 - val_acc: 0.9604\n", "Epoch 4/5\n", "1120/1120 [==============================] - 0s 131us/step - loss: 0.0558 - acc: 0.9839 - val_loss: 0.0988 - val_acc: 0.9604\n", "Epoch 5/5\n", "1120/1120 [==============================] - 0s 135us/step - loss: 0.0309 - acc: 0.9946 - val_loss: 0.0921 - val_acc: 0.9625\n" ] } ], "source": [ "np.random.seed(42)\n", "\n", "batch_size = 64\n", "epochs = 5\n", "\n", "model = net()\n", "model.compile(optimizer='adam',\n", " loss='binary_crossentropy',\n", " metrics=['accuracy'])\n", "\n", "history = model.fit(X_train, y_train,\n", " validation_data=(X_val, y_val),\n", " batch_size=batch_size,\n", " epochs=epochs)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(range(1,epochs+1), history.history['acc'], label='train')\n", "plt.plot(range(1,epochs+1), history.history['val_acc'], label='validation')\n", "plt.legend();" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "test_path = '../datasets/food-101/test/'\n", "test = os.listdir(test_path)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "400/400 [==============================] - 73s 183ms/step\n" ] } ], "source": [ "X_test = extract_features(\n", " list(map(lambda x: test_path + x, test))\n", ")" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "y_pred = model.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "pred = pd.DataFrame({\n", " 'id': test,\n", " 'kelas': (y_pred > .5).reshape(-1)\n", "})\n", "pred['kelas'] = pred['kelas'].map({True: 1, False: 0})" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [], "source": [ "pred.to_csv('pred.csv', index=False)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.2" } }, "nbformat": 4, "nbformat_minor": 2 }