{"cells":[{"metadata":{"_uuid":"8e132120-da93-42ba-8292-4217c531bd25","_cell_guid":"b20697e4-871e-41b0-85c6-88f88147033e","trusted":true},"cell_type":"code","source":"#------------------------------------------------------------------------------\n# VGG16 ON CIFAR_10\n#------------------------------------------------------------------------------\nimport numpy as np\nfrom tensorflow.keras.applications.vgg16 import VGG16\nimport tensorflow.keras as k\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Flatten, Dropout\nfrom keras.utils.np_utils import to_categorical\nfrom tensorflow.keras import optimizers\nfrom tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom sklearn.metrics import accuracy_score\n\n\n#------------------------------------------------------------------------------\n# Using VGG16 model, with weights pre-trained on ImageNet.\n#------------------------------------------------------------------------------\n\nvgg16_model = VGG16(weights='imagenet',\n                    include_top=False, \n                    classes=10,\n                    input_shape=(32,32,3)# input: 32x32 images with 3 channels -> (32, 32, 3) tensors.\n                   )\n\n#Define the sequential model and add th VGG's layers to it\nmodel = Sequential()\nfor layer in vgg16_model.layers:\n    model.add(layer)\n\n\n#------------------------------------------------------------------------------\n# Adding hiddens  and output layer to our model\n#------------------------------------------------------------------------------\n\nfrom tensorflow.keras.layers import Dense, Flatten, Dropout\nmodel.add(Flatten())\nmodel.add(Dense(512, activation='relu', name='hidden1'))\nmodel.add(Dropout(0.4))\nmodel.add(Dense(256, activation='relu', name='hidden2'))\nmodel.add(Dropout(0.4))\nmodel.add(Dense(10, activation='softmax', name='predictions'))\n\nmodel.summary()\n\n\n#------------------------------------------------------------------------------\n#  Loading CIFAR10 data\n#------------------------------------------------------------------------------\n\n(X_train, y_train), (X_test, y_test) = k.datasets.cifar10.load_data()\n\nprint(\"******************\")\nprint(X_train.shape)\nprint(y_train.shape)\nprint(X_test.shape)\nprint(y_test.shape)\n \n# Convert class vectors to binary class matrices using one hot encoding\ny_train_ohe = to_categorical(y_train, num_classes = 10)\ny_test_ohe = to_categorical(y_test, num_classes = 10)\n\n# Data normalization\nX_train = X_train.astype('float32')\nX_test = X_test.astype('float32')\nX_train  /= 255\nX_test /= 255\n\nprint(\"******************\")\nprint(X_train.shape)\nprint(y_train_ohe.shape)\nprint(X_test.shape)\nprint(y_test_ohe.shape)\n\n\n#------------------------------------------------------------------------------\n# TRAINING THE CNN ON THE TRAIN/VALIDATION DATA\n#------------------------------------------------------------------------------\n\n# initiate SGD optimizer\nsgd = optimizers.SGD(lr=0.001, momentum=0.9)\n\n# For a multi-class classification problem\nmodel.compile(loss='categorical_crossentropy',optimizer= sgd,metrics=['accuracy'])\n\n\nes = EarlyStopping(patience=5, monitor='val_accuracy', mode='max')\nmc = ModelCheckpoint('./weights.h5', monitor='val_accuracy', save_best_only=True, mode='max')\n\n\n# initialize the number of epochs and batch size\nEPOCHS = 100\nBS = 32\n\n# construct the training image generator for data augmentation\naug = ImageDataGenerator(rotation_range=20, zoom_range=0.15, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.15,\n                        horizontal_flip=True, fill_mode=\"nearest\")\n \n# train the model\nhistory = model.fit_generator(aug.flow(X_train,y_train_ohe, batch_size=BS),validation_data=(X_test,y_test_ohe), \n                              steps_per_epoch=len(X_train) // BS,epochs=EPOCHS,callbacks=[es,mc])\n\n#We load the best weights saved by the ModelCheckpoint\nmodel.load_weights('./weights.h5')\n\n\n#------------------------------------------------------------------------------\n# PREDICT AND EVALUATE THE CNN ON THE TEST DATA\n#------------------------------------------------------------------------------\npreds = model.predict(X_test)#on prédit le Test\nscore_test = accuracy_score( y_test, np.argmax(preds, axis=1) )\nprint (' LE SCORE DE TEST : ', score_test)\n\n\ntrain_loss, train_score = model.evaluate(X_train, y_train_ohe)\ntest_loss, test_score = model.evaluate(X_test, y_test_ohe)\nprint(\"Train Loss:\", train_loss)\nprint(\"Test Loss:\", test_loss)\nprint(\"Train Score:\", train_score)\nprint(\"Test Score:\", test_score)","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":1}