{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# extracting files\nimport os, shutil, zipfile\n\nfolders = ['train', 'test1']\n\nfor fn in folders:\n    with zipfile.ZipFile('../input/dogs-vs-cats/' + fn + \".zip\", \"r\") as z:\n        z.extractall(\".\")","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"#move cat images to /train/cat/ and dog images to /train/dog/\ntrain_folder = \"train/\"\ntest_folder = \"test1/\"\n\n!mkdir './train/cat'\n!mkdir './train/dog'\n!bash -c 'mv ./train/cat*.jpg ./train/cat/'\n!bash -c 'mv ./train/dog*.jpg ./train/dog/'\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#create data genetator\nfrom keras.preprocessing.image import ImageDataGenerator\ntrain_dog_dir = train_folder + \"dog/\"\ntrain_cat_dir = train_folder + \"cat/\"\n\ntrainGen = ImageDataGenerator(\n    rescale=1./255,\n    validation_split=0.2)\n\ntestGen = ImageDataGenerator(rescale=1./255)\n\n#create iterators\ntrain_it = trainGen.flow_from_directory(train_folder,\n     batch_size=32, target_size=(100, 100),subset='training')\n\nval_it = trainGen.flow_from_directory(train_folder, batch_size=32, \n    target_size=(100, 100),subset='validation')\n\ntest_it = testGen.flow_from_directory('test1/', batch_size=32, target_size=(100, 100))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#build model\n\nfrom keras.models import Sequential\nfrom keras.layers.normalization import BatchNormalization\nfrom keras.layers.convolutional import Conv2D\nfrom keras.layers.convolutional import MaxPooling2D\nfrom keras.layers.core import Activation\nfrom keras.layers.core import Flatten\nfrom keras.layers.core import Dropout\nfrom keras.layers.core import Dense\nfrom keras.regularizers import l2\nfrom keras.optimizers import Adam\n\ndef build_model(width, height, depth, classes, reg=0.0002):\n\n        model = Sequential()\n        inputShape = (height, width, depth)\n        chanDim = -1\n       \n        # Block #1: first CONV => RELU => POOL layer set\n        model.add(Conv2D(96, (11, 11), strides=(4, 4),\n            input_shape=inputShape, padding=\"same\",\n            kernel_regularizer=l2(reg)))\n        model.add(Activation(\"relu\"))\n        model.add(BatchNormalization(axis=chanDim))\n        model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))\n        model.add(Dropout(0.25))\n\n        # Block #2: second CONV => RELU => POOL layer set\n        model.add(Conv2D(256, (5, 5), padding=\"same\",\n            kernel_regularizer=l2(reg)))\n        model.add(Activation(\"relu\"))\n        model.add(BatchNormalization(axis=chanDim))\n        model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))\n        model.add(Dropout(0.25))\n    \n\n        # Block #3: CONV => RELU => CONV => RELU => CONV => RELU\n        model.add(Conv2D(384, (3, 3), padding=\"same\",\n            kernel_regularizer=l2(reg)))\n        model.add(Activation(\"relu\"))\n        model.add(BatchNormalization(axis=chanDim))\n        model.add(Conv2D(384, (3, 3), padding=\"same\",\n            kernel_regularizer=l2(reg)))\n        model.add(Activation(\"relu\"))\n        model.add(BatchNormalization(axis=chanDim))\n        model.add(Conv2D(256, (3, 3), padding=\"same\",\n            kernel_regularizer=l2(reg)))\n        model.add(Activation(\"relu\"))\n        model.add(BatchNormalization(axis=chanDim))\n        model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))\n        model.add(Dropout(0.25))\n    \n        # Block #4: first set of FC => RELU layers\n        model.add(Flatten())\n        model.add(Dense(4096, kernel_regularizer=l2(reg)))\n        model.add(Activation(\"relu\"))\n        model.add(BatchNormalization())\n        model.add(Dropout(0.5))\n        # Block #5: second set of FC => RELU layers\n        model.add(Dense(4096, kernel_regularizer=l2(reg)))\n        model.add(Activation(\"relu\"))\n        model.add(BatchNormalization())\n        model.add(Dropout(0.5))\n\n        # softmax classifier\n        model.add(Dense(classes, kernel_regularizer=l2(reg)))\n        model.add(Activation(\"softmax\"))\n        \n        opt = Adam(lr=1e-3)\n        model.compile(loss=\"binary_crossentropy\", optimizer=opt,\n            metrics=[\"accuracy\"])\n\n\n        # return network architecture\n        return model\n    \n    \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = build_model(width=100, height=100, depth=3,\n    classes=2, reg=0.0002)\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"H = model.fit_generator(train_it,\n                         steps_per_epoch=train_it.samples // 32, \n                         epochs=100,\n                         validation_data=val_it,\n                         validation_steps=val_it.samples // 32)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# save the network to disk\nprint(\"serializing network...\")\nmodel.save(\"cat_dog_alexnet.hdf5\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport numpy as np\n\n# plot the training loss and accuracy\nplt.style.use(\"ggplot\")\nplt.figure()\nplt.plot(np.arange(0, 100), H.history[\"loss\"], label=\"train_loss\")\nplt.plot(np.arange(0, 100), H.history[\"val_loss\"], label=\"val_loss\")\nplt.plot(np.arange(0, 100), H.history[\"accuracy\"], label=\"train_acc\")\nplt.plot(np.arange(0, 100), H.history[\"val_accuracy\"], label=\"val_acc\")\nplt.title(\"Training Loss and Accuracy\")\nplt.xlabel(\"Epoch #\")\nplt.ylabel(\"Loss/Accuracy\")\nplt.legend()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.preprocessing import image\nimg = image.load_img(\"../input/dogimage/dog.jpg\",target_size=(100,100))\nimg = np.asarray(img)\nplt.imshow(img)\nimg = np.expand_dims(img, axis=0)\nfrom keras.models import load_model\nsaved_model = load_model(\"cat_dog_alexnet.hdf5\")\noutput = saved_model.predict(img)\nprint(output)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}