{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"from tensorflow.keras.datasets import cifar10\nimport matplotlib.pyplot as plt\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Flatten\nfrom tensorflow.keras.layers import Dropout, BatchNormalization, SpatialDropout2D, GaussianDropout\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, AveragePooling2D\nfrom tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau\nfrom tensorflow.keras.preprocessing import image\nimport matplotlib.pyplot as plt\nfrom tensorflow.keras import utils\n%matplotlib inline \n(X_train, y_train), (X_test, y_test) = cifar10.load_data()\nclasses=['самолет', 'автомобиль', 'птица', 'кот', 'олень', 'собака', 'лягушка', 'лошадь', 'корабль', 'грузовик']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"batch_size = 200\nnb_classes = 10\nnb_epoch = 40\nimg_rows, img_cols = 32, 32\nimg_channels = 3","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = X_train.astype('float32')\nX_test = X_test.astype('float32')\nX_train /= 255\nX_test /= 255","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = utils.to_categorical(y_train, nb_classes)\ny_test = utils.to_categorical(y_test, nb_classes)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\n#\nmodel.add(Conv2D(\n    filters = 32,\n    kernel_size = (3, 3),\n    padding = 'same',\n    input_shape = (img_rows, img_cols, img_channels),\n    activation = 'relu'\n))\n#\nmodel.add(Conv2D(\n    filters = 32,\n    kernel_size = (3, 3),\n    padding = 'same',\n    activation = 'relu'\n))\n#\nmodel.add(AveragePooling2D(pool_size = (2, 2)))\n#\nmodel.add(BatchNormalization())\n#\nmodel.add(GaussianDropout(0.25))\n#\nmodel.add(Conv2D(\n    filters = 64,\n    kernel_size = (3, 3),\n    padding = 'same',\n    activation = 'relu'\n))\n#\nmodel.add(Conv2D(\n    filters = 64,\n    kernel_size = (3, 3),\n    padding = 'same',\n    activation = 'relu'\n))\n#\nmodel.add(AveragePooling2D(pool_size = (2, 2)))\n#\nmodel.add(Conv2D(\n    filters = 64,\n    kernel_size = (4, 4),\n    padding = 'same',\n    activation = 'elu'\n))\n#\nmodel.add(Conv2D(\n    filters = 128,\n    kernel_size = (3, 4),\n    activation = 'relu'\n))\n#\nmodel.add(BatchNormalization())\n#\nmodel.add(GaussianDropout(0.4))\n#\nmodel.add(Flatten())\n#\nmodel.add(Dense(1024, activation = 'relu'))\n#\nmodel.add(Dropout(0.6))\n#\nmodel.add(Dense(nb_classes, activation = 'softmax'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"callback_list = [\n    EarlyStopping(monitor = 'val_loss', patience = 5),\n    ModelCheckpoint(\n        filepath = 'my_model.h5',\n        monitor = 'val_loss',\n        save_best_only = True\n    ),\n    ReduceLROnPlateau(\n        monitor = 'val_loss',\n        factor = 0.1,\n        patience = 3\n    )\n]\n#\nmodel.compile(\n    loss = 'categorical_crossentropy',\n    optimizer = 'adam',\n    metrics = ['accuracy']\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\nhistory = model.fit(\n    x = X_train,\n    y = y_train,\n    batch_size = batch_size,\n    epochs = nb_epoch,\n    callbacks = callback_list,\n    validation_split = 0.1,\n    verbose = 1\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"scores = model.evaluate(\n    X_test,\n    y_test,\n    verbose = 1\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(round(scores[1] * 100, 4))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(history.history['accuracy'], \n         label='Доля правильных ответов на обучающем наборе')\nplt.plot(history.history['val_accuracy'], \n         label='Доля правильных ответов на проверочном наборе')\nplt.xlabel('Эпоха обучения')\nplt.ylabel('Доля правильных ответов')\nplt.legend()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(history.history['loss'], \n         label='Оценка потерь на обучающем наборе')\nplt.plot(history.history['val_loss'], \n         label='Оценка потерь на проверочном наборе')\nplt.xlabel('Эпоха обучения')\nplt.ylabel('Оценка потерь')\nplt.legend()\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}