{"metadata": {"kernelspec": {"language": "python", "display_name": "Python 3", "name": "python3"}, "language_info": {"pygments_lexer": "ipython3", "mimetype": "text/x-python", "nbconvert_exporter": "python", "codemirror_mode": {"version": 3, "name": "ipython"}, "version": "3.6.3", "file_extension": ".py", "name": "python"}}, "nbformat_minor": 1, "nbformat": 4, "cells": [{"metadata": {"_uuid": "189885df392b1c427ae1e9f8aa98065f83d25b85", "_cell_guid": "74cce86a-56b4-4a1e-9e8c-91866013fad7"}, "source": ["!ls"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"_uuid": "2c454268d9012b1f1575fe48296dc079b1be678f", "_cell_guid": "709dc909-8925-4bab-ba7d-6076d2ca44c0"}, "source": ["!ls .."], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"_uuid": "666b643316f19a8b988b422fb1484c47659fbd4a", "_cell_guid": "1b39919d-18af-417a-8418-18505736927b"}, "source": ["!ls ../.."], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"collapsed": true, "_uuid": "1895e54385e9b0433481b4c7d11d459a4d8c2fa0", "_cell_guid": "2328b523-d20e-4d1f-b69a-ca48c8c399d5"}, "source": ["def list_images(path):\n", "    #  Use sorted for more predicative behaviour\n", "    return sorted([f for f in os.listdir(path) if not f.startswith(\".\") and f.endswith(\".jpg\")])"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"collapsed": true, "_uuid": "a5acb585524f82871ace093f89657543dbd6f8ef", "_cell_guid": "9301176c-4f0d-4e7b-b958-2b6c96766404"}, "source": ["import pandas as pd\n", "def load_labels():\n", "    label_df = pd.read_csv(\"../input/labels.csv\")\n", "    dogs = list_images(TRAIN_PATH)\n", "    dogs.sort()\n", "    for dog in dogs:\n", "        try:\n", "            dog_id = dog.split(\".\")[0]\n", "            label = label_df[label_df.id == dog_id].iloc[0, 1]\n", "            labels[dog] = label\n", "        except IndexError:\n", "            print(\"%s not found\" % dog_id)\n", "            labels[dog] = None\n", "            pass\n"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"collapsed": true, "_uuid": "b4b04558b42e62794f04d5320add924be08ccfcd", "_cell_guid": "4bb559c3-bb6f-4484-8099-27e46f70b782"}, "source": ["all_labels = \"\"\"affenpinscher\n", "                afghan_hound\n", "                african_hunting_dog\n", "                airedale\n", "                american_staffordshire_terrier\n", "                appenzeller\n", "                australian_terrier\n", "                basenji\n", "                basset\n", "                beagle\n", "                bedlington_terrier\n", "                bernese_mountain_dog\n", "                black-and-tan_coonhound\n", "                blenheim_spaniel\n", "                bloodhound\n", "                bluetick\n", "                border_collie\n", "                border_terrier\n", "                borzoi\n", "                boston_bull\n", "                bouvier_des_flandres\n", "                boxer\n", "                brabancon_griffon\n", "                briard\n", "                brittany_spaniel\n", "                bull_mastiff\n", "                cairn\n", "                cardigan\n", "                chesapeake_bay_retriever\n", "                chihuahua\n", "                chow\n", "                clumber\n", "                cocker_spaniel\n", "                collie\n", "                curly-coated_retriever\n", "                dandie_dinmont\n", "                dhole\n", "                dingo\n", "                doberman\n", "                english_foxhound\n", "                english_setter\n", "                english_springer\n", "                entlebucher\n", "                eskimo_dog\n", "                flat-coated_retriever\n", "                french_bulldog\n", "                german_shepherd\n", "                german_short-haired_pointer\n", "                giant_schnauzer\n", "                golden_retriever\n", "                gordon_setter\n", "                great_dane\n", "                great_pyrenees\n", "                greater_swiss_mountain_dog\n", "                groenendael\n", "                ibizan_hound\n", "                irish_setter\n", "                irish_terrier\n", "                irish_water_spaniel\n", "                irish_wolfhound\n", "                italian_greyhound\n", "                japanese_spaniel\n", "                keeshond\n", "                kelpie\n", "                kerry_blue_terrier\n", "                komondor\n", "                kuvasz\n", "                labrador_retriever\n", "                lakeland_terrier\n", "                leonberg\n", "                lhasa\n", "                malamute\n", "                malinois\n", "                maltese_dog\n", "                mexican_hairless\n", "                miniature_pinscher\n", "                miniature_poodle\n", "                miniature_schnauzer\n", "                newfoundland\n", "                norfolk_terrier\n", "                norwegian_elkhound\n", "                norwich_terrier\n", "                old_english_sheepdog\n", "                otterhound\n", "                papillon\n", "                pekinese\n", "                pembroke\n", "                pomeranian\n", "                pug\n", "                redbone\n", "                rhodesian_ridgeback\n", "                rottweiler\n", "                saint_bernard\n", "                saluki\n", "                samoyed\n", "                schipperke\n", "                scotch_terrier\n", "                scottish_deerhound\n", "                sealyham_terrier\n", "                shetland_sheepdog\n", "                shih-tzu\n", "                siberian_husky\n", "                silky_terrier\n", "                soft-coated_wheaten_terrier\n", "                staffordshire_bullterrier\n", "                standard_poodle\n", "                standard_schnauzer\n", "                sussex_spaniel\n", "                tibetan_mastiff\n", "                tibetan_terrier\n", "                toy_poodle\n", "                toy_terrier\n", "                vizsla\n", "                walker_hound\n", "                weimaraner\n", "                welsh_springer_spaniel\n", "                west_highland_white_terrier\n", "                whippet\n", "                wire-haired_fox_terrier\n", "                yorkshire_terrier\"\"\".split(\"\\n\")\n", "all_labels = [i.strip() for i in all_labels]"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"_uuid": "3ad0acaa43ad63a5c2d4a39e4258416f0ab959f8", "_cell_guid": "b9751e13-a7c9-4d02-bc45-1a24ba12db45"}, "source": ["import os\n", "OUTPUT_PATH = os.path.join(\".\")\n", "TRAIN_PATH = os.path.join(\"..\", \"input\", \"train\")\n", "TEST_PATH = os.path.join(\"..\", \"input\", \"test\")"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"_uuid": "e9e2e97fe3afa25bf114711fa0208393f1d919a5", "_cell_guid": "bb913033-45e4-4187-a51d-d18e5682cf5a"}, "source": ["labels = dict()\n", "load_labels()"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"_uuid": "a04d14a22576aa2d178603475edcca994219ba40", "_cell_guid": "29ef1627-3655-4edb-8fc0-25f8102cea92"}, "source": ["import keras\n", "from keras.models import Sequential\n", "from keras.layers import Dense\n", "from keras.applications.vgg16 import VGG16\n", "import keras.preprocessing.image\n", "import numpy as np"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"_uuid": "3b5f3ca84b9a3837683a18115ae9b5daf63e2fd4", "_cell_guid": "967abf64-ec18-4b57-b720-39e5bdb65243"}, "source": ["width = 224\n", "height = 224\n", "def create_model(input_shape=(3, width, height)):\n", "    vgg_model = VGG16(weights='imagenet')\n", "    flatten = vgg_model.get_layer(\"flatten\")\n", "\n", "    model = Sequential()\n", "    model.add(flatten)\n", "    model.add(Dense(10000))\n", "    model.add(Dense(120, activation=\"softmax\", input_shape=input_shape))\n", "\n", "    model.compile(loss='categorical_crossentropy',\n", "                  optimizer='adam',\n", "                  metrics=['accuracy'])\n", "\n", "    return model"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"collapsed": true, "_uuid": "99d3614853efcf82aceb968a01c8d71d7a64d3b3", "_cell_guid": "dc852874-a10e-4bcf-8988-f3cbd258943e"}, "source": ["def train():\n", "    model = create_model()\n", "    dogs = list_images(TRAIN_PATH)[:10]\n", "    images = []\n", "    ys = []\n", "    for dog in dogs:\n", "        image = keras.preprocessing.image.load_img(os.path.join(TRAIN_PATH, dog), target_size=(width, height))\n", "        image = keras.preprocessing.image.img_to_array(image)\n", "        images.append(image)\n", "        label = labels[dog]\n", "\n", "        if label is None:\n", "            print(\"Label not found for train dog %s\" % dog)\n", "\n", "        y = np.zeros(120)\n", "        y[all_labels.index(label)] = 1\n", "        ys.append(y)\n", "    images = np.array(images)\n", "    ys = np.array(ys)\n", "    model.fit(images, ys, verbose=2, epochs=1)\n", "    model.save(os.path.join(OUTPUT_PATH, \"vgg.h5\"))"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"collapsed": true, "_uuid": "b75da98dde4b6e469d7395b6e4dc618d62ef73e4", "_cell_guid": "9296e65f-38dc-4c29-994e-d909f736122b"}, "source": ["def predict():\n", "    dogs = list_images(TEST_PATH)[:10]  # TODO\n", "    images = []\n", "    for dog in dogs:\n", "        image = keras.preprocessing.image.load_img(os.path.join(TEST_PATH, dog), target_size=(width, height))\n", "        image = keras.preprocessing.image.img_to_array(image)\n", "        images.append(image)\n", "    images = np.array(images)\n", "\n", "    model = keras.models.load_model(os.path.join(OUTPUT_PATH, \"vgg.h5\"))\n", "    ys = model.predict(images)\n", "\n", "    with open(os.path.join(OUTPUT_PATH, \"predict_vgg.csv\"), \"w\") as out:\n", "        out.write(\"id,\")\n", "        for label in all_labels[:-1]:\n", "            out.write(label + \",\")\n", "        out.write(all_labels[-1])\n", "        out.write(\"\\n\")\n", "\n", "        for i in range(len(ys)):\n", "            out.write(\"%s,\" % dogs[i].split(\".\")[0])\n", "            for prob in ys[i][:-1]:\n", "                out.write(\"%f,\" % prob)\n", "            out.write(\"%f\" % ys[i][-1])\n", "            out.write(\"\\n\")"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"_uuid": "0a57ad80474cc0632de07080ab87570d2af8e3e8", "_cell_guid": "4b0c59ae-55fb-4b26-818c-bed9df2a5fc7"}, "source": ["train()"], "execution_count": null, "outputs": [], "cell_type": "code"}, {"metadata": {"collapsed": true, "_uuid": "d6ad7f537cf488b2240bb8771ec5c7f3c0d1e19b", "_cell_guid": "9714313b-edfc-4e0b-b69c-e45c8cfec67b"}, "source": [], "execution_count": null, "outputs": [], "cell_type": "code"}]}