{"cells":[{"metadata":{"trusted":true,"_uuid":"5e4cbdca1a7b87b7a83e450f462fdd08b736404f"},"cell_type":"code","source":"# CHRIFI ALAOUI Samy & CALOI Laura\n# CIFAR 10\n# The dataset we have chosen consists of 60,000 32x32 color images in 10 different classes: airplanes, cars, birds, cats, deer, dogs, frogs, horses, ships, and trucks. Each class contains 6,000 images.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5a895c289ed6e6456b2331da65e205ee9310a900","_kg_hide-input":true},"cell_type":"code","source":"#imports\nimport keras\nfrom keras.models import Sequential\nfrom keras.utils import np_utils\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.layers import Dense, Activation, Flatten, Dropout, BatchNormalization\nfrom keras.layers import Conv2D, MaxPooling2D\nfrom keras.datasets import cifar10\nfrom keras import regularizers, optimizers\nimport numpy as np\nimport timeit\nfrom six.moves import cPickle as pickle\nimport os\nimport platform\nfrom subprocess import check_output\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e196ddd1a011ae1bb3b8f6d2831c3abd029bb0c5"},"cell_type":"code","source":"classes = ('plane', 'car', 'bird', 'cat',\n           'deer', 'dog', 'frog', 'horse', 'ship', 'truck')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8fe954ca39a59a9c6e7e0bd437e6006289ecc8f1"},"cell_type":"code","source":"#Load the dataset\ndef load_pickle(f):\n    version = platform.python_version_tuple()\n    if version[0] == '2':\n        return  pickle.load(f)\n    elif version[0] == '3':\n        return  pickle.load(f, encoding='latin1')\n    raise ValueError(\"invalid python version: {}\".format(version))\n\ndef load_CIFAR_batch(filename):\n    \"\"\" load single batch of cifar \"\"\"\n    with open(filename, 'rb') as f:\n        datadict = load_pickle(f)\n        X = datadict['data']\n        Y = datadict['labels']\n        X = X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype(\"float\")\n        Y = np.array(Y)\n        return X, Y\n\ndef load_CIFAR10(ROOT):\n    \"\"\" load all of cifar \"\"\"\n    xs = []\n    ys = []\n    for b in range(1,6):\n        f = os.path.join(ROOT, 'data_batch_%d' % (b, ))\n        X, Y = load_CIFAR_batch(f)\n        xs.append(X)\n        ys.append(Y)\n    Xtr = np.concatenate(xs)\n    Ytr = np.concatenate(ys)\n    del X, Y\n    Xte, Yte = load_CIFAR_batch(os.path.join(ROOT, 'test_batch'))\n    return Xtr, Ytr, Xte, Yte","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b390625ab5bc5ea26299dc3d73003cc127fc9e51","scrolled":true},"cell_type":"code","source":"#Get the dataset\n\n#Chose the number of file for training, test and validation\ndef get_CIFAR10_data(num_training=50000, num_validation=0, num_test=10000):\n    # Load the raw CIFAR-10 data\n    cifar10_dir = '../input'\n    X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)\n    \n    # Subsample the data\n    mask = range(num_training, num_training + num_validation)\n    X_val = X_train[mask]\n    y_val = y_train[mask]\n    mask = range(num_training)\n    X_train = X_train[mask]\n    y_train = y_train[mask]\n    mask = range(num_test)\n    X_test = X_test[mask]\n    y_test = y_test[mask]\n\n    # Normalize the data: subtract the mean image\n    mean_image = np.mean(X_train, axis=0)\n    X_train -= mean_image\n    X_val -= mean_image\n    X_test -= mean_image\n\n    return X_train, y_train, X_val, y_val, X_test, y_test\n\n# Invoke the above function to get our data.\nx_train, y_train, x_val, y_val, x_test, y_test = get_CIFAR10_data()\nprint('Train data shape: ', x_train.shape)\nprint('Train labels shape: ', y_train.shape)\nprint('Validation data shape: ', x_val.shape)\nprint('Validation labels shape: ', y_val.shape)\nprint('Test data shape: ', x_test.shape)\nprint('Test labels shape: ', y_test.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4a45edb894d521f5b4fb4b974c17974e64f6602f"},"cell_type":"code","source":"num_classes = 10\ny_train = np_utils.to_categorical(y_train,num_classes)\ny_test = np_utils.to_categorical(y_test,num_classes)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"007c81e46ad717036408b0c0f1fe1f751e201d5d"},"cell_type":"code","source":"#Model\n#diviser le dataset (trop important)\n#baisser les filtres de bases et le dense : 96 , 192, 256 ...\nmodel = Sequential()\nmodel.add(Conv2D(input_shape=x_train[0,:,:,:].shape, filters=48, kernel_size=(3,3)))\nmodel.add(Activation('relu'))\n#Ajoutet le maxpooling !\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(filters=48, kernel_size=(3,3), strides=2))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Conv2D(filters=96, kernel_size=(3,3)))\nmodel.add(Activation('relu'))\nmodel.add(Conv2D(filters=96, kernel_size=(3,3), strides=2))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Flatten())\nmodel.add(BatchNormalization())\nmodel.add(Dense(128))\nmodel.add(Activation('relu'))\nmodel.add(Dense(num_classes, activation=\"softmax\"))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n\n\nn_epochs = 25\nbatch_size = 256\ncallbacks_list = None\nH = model.fit(x_train, y_train, validation_data=(x_test, y_test), \n              epochs=n_epochs, batch_size=batch_size, callbacks=callbacks_list)\nprint('Done !')\n\n\"\"\"\n\nmodel = Sequential()\nmodel.add(Conv2D(input_shape=x_train[0,:,:,:].shape, filters=32, \n                 use_bias=True, kernel_size=(3,3)))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.1))\nmodel.add(Conv2D(filters=64, use_bias=False, kernel_size=(5,5), strides=2))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Flatten())\nmodel.add(Dense(128))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.3))\nmodel.add(Dense(n_classes, activation=\"softmax\"))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=    ['accuracy'])\n\n\n################################################################################\n\n# create model\nmodel = Sequential()\nmodel.add(Conv2D(32, (5, 5), input_shape=(32, 32, 3), activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(16, (3, 3), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.2))\nmodel.add(Flatten())\nmodel.add(Dense(128, activation='relu'))\nmodel.add(Dense(50, activation='relu'))\nmodel.add(Dense(num_classes, activation='softmax'))\n# Compile model\nmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n\n\"\"\"\n#testing - no kaggle eval\nscores = model.evaluate(x_test, y_test, batch_size=128, verbose=1)\nprint('\\nTest result: %.3f loss: %.3f' % (scores[1]*100,scores[0]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0fb27e1b8ab71a9564cf0472fdd105540f6e2079"},"cell_type":"code","source":"# Final evaluation of the model\nscores = model.evaluate(x_test, y_test, verbose=2)\nprint(\"CNN Error: %.2f%%\" % (100-scores[1]*100))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"827f81cd03b67682e1f7a4e5f4b9dae80767d232"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}