{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Digit Recognizer avec LeNet-5"},{"metadata":{},"cell_type":"markdown","source":"Import des librairies pour ce notebook"},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n%matplotlib inline\nimport tensorflow as tf\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras import utils\nfrom tensorflow.keras import layers\nfrom tensorflow.keras.models import Sequential","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Import du dataset"},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.read_csv('../input/digit-recognizer/train.csv')\ndf.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = (df.iloc[:,1:].values).astype('float32')\ny_train = df.iloc[:,0].values.astype('int32') ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = X_train.reshape(X_train.shape[0], 28, 28)\nX_train.shape","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Visualisation d'un exemple du dataset"},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.imshow(X_train[10],  cmap=plt.get_cmap('gray'))\nplt.title(y_train[10]);","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = X_train.reshape(X_train.shape[0], 28, 28,1)\ny_train= utils.to_categorical(y_train)\nnum_classes = y_train.shape[1]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Data augmentation grâce à ImageDataGenerator de Keras"},{"metadata":{"trusted":true},"cell_type":"code","source":"datagen = ImageDataGenerator(\n        rotation_range=10,\n        zoom_range = 0.1,\n        width_shift_range=0.1,\n        height_shift_range=0.1)\n\ndatagen.fit(X_train)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"Séparation du dataset en un jeu de train et de test"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_valid, X_train = X_train[:2000] / 255.0, X_train[2000:] / 255.0\ny_valid, y_train = y_train[:2000], y_train[2000:]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"Création de l'architecture LeNet-5 avec TensoFlow"},{"metadata":{"trusted":true},"cell_type":"code","source":"model =  Sequential([\n    layers.Conv2D(6, kernel_size=(5, 5), strides=(1, 1), activation='tanh', input_shape=(28,28,1), padding=\"same\"),\n    layers.AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'),\n    layers.Conv2D(16, kernel_size=(5, 5), strides=(1, 1), activation='tanh', padding='valid'),\n    layers.AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'),\n    layers.Flatten(),\n    layers.Dense(256, activation=\"tanh\"),\n    layers.Dense(84, activation=\"tanh\"),\n    layers.Dense(10, activation=\"softmax\")\n])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Compilation du modèle avec l'optimizer adam et accuracy comme metrics"},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Entrainement du modèle sur 30 epochs"},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit(X_train, y_train, epochs=30, validation_data=(X_valid,y_valid))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Courbes d'apprentissage mesurées sur chaque epoch"},{"metadata":{"trusted":true},"cell_type":"code","source":"pd.DataFrame(history.history).plot(figsize=(8,5))\nplt.grid(True)\nplt.gca().set_ylim(0,1)\nplt.show()","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}