{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"tpu1vmV38","dataSources":[{"sourceId":21154,"databundleVersionId":1243559,"sourceType":"competition"}],"dockerImageVersionId":30628,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install -q efficientnet","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:46:47.521938Z","iopub.execute_input":"2023-12-28T08:46:47.522273Z","iopub.status.idle":"2023-12-28T08:46:53.934686Z","shell.execute_reply.started":"2023-12-28T08:46:47.522241Z","shell.execute_reply":"2023-12-28T08:46:53.933780Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nimport matplotlib.pyplot as plt\nimport math, random, re, os, numpy as np\n\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras import layers\nfrom tensorflow.keras.layers import Dense\nfrom tensorflow.keras.callbacks import ModelCheckpoint\nfrom efficientnet.tfkeras import EfficientNetB7\nfrom tensorflow.keras.applications.vgg16 import VGG16\nfrom tensorflow.keras.applications.xception import Xception\n\nfrom kaggle_datasets import KaggleDatasets","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:46:53.936386Z","iopub.execute_input":"2023-12-28T08:46:53.936653Z","iopub.status.idle":"2023-12-28T08:46:54.014739Z","shell.execute_reply.started":"2023-12-28T08:46:53.936627Z","shell.execute_reply":"2023-12-28T08:46:54.014082Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"AUTO = tf.data.experimental.AUTOTUNE\n# Обнаружение оборудования, возврат соответствующей стратегии распространения: TPU, GPU, CPU\ntry:\n    tpu = tf.distribute.cluster_resolver.TPUClusterResolver()  # Обнаружение TPU. Параметры среды не требуются, если задана переменная среды TPU_NAME. На Kaggle это всегда так.\n    print('Running on TPU ', tpu.master())\nexcept ValueError:\n    tpu = None\n\nif tpu:\n    tf.config.experimental_connect_to_cluster(tpu)\n    tf.tpu.experimental.initialize_tpu_system(tpu)\n    strategy = tf.distribute.experimental.TPUStrategy(tpu)\nelse:\n    strategy = tf.distribute.get_strategy() # стратегия распространения по умолчанию в Tensorflow. Работает на CPU и одном GPU.\nprint(\"REPLICAS: \", strategy.num_replicas_in_sync)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:46:54.015642Z","iopub.execute_input":"2023-12-28T08:46:54.016250Z","iopub.status.idle":"2023-12-28T08:47:02.518077Z","shell.execute_reply.started":"2023-12-28T08:46:54.016223Z","shell.execute_reply":"2023-12-28T08:47:02.517356Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"GCS_DS_PATH = KaggleDatasets().get_gcs_path('tpu-getting-started')\nprint(GCS_DS_PATH)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:02.518934Z","iopub.execute_input":"2023-12-28T08:47:02.519165Z","iopub.status.idle":"2023-12-28T08:47:02.527805Z","shell.execute_reply.started":"2023-12-28T08:47:02.519139Z","shell.execute_reply":"2023-12-28T08:47:02.527006Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"IMAGE_SIZE = [512, 512] # при таком размере графическому процессору не хватит памяти. Используйте TPU\nEPOCHS = 30\nBATCH_SIZE = 16 * strategy.num_replicas_in_sync\n\nGCS_PATH_SELECT = { # available image sizes\n    192: GCS_DS_PATH + '/tfrecords-jpeg-192x192',\n    224: GCS_DS_PATH + '/tfrecords-jpeg-224x224',\n    331: GCS_DS_PATH + '/tfrecords-jpeg-331x331',\n    512: GCS_DS_PATH + '/tfrecords-jpeg-512x512'\n}\nGCS_PATH = GCS_PATH_SELECT[IMAGE_SIZE[0]]\n\nTRAINING_FILENAMES = tf.io.gfile.glob(GCS_PATH + '/train/*.tfrec')\nVALIDATION_FILENAMES = tf.io.gfile.glob(GCS_PATH + '/val/*.tfrec')\nTEST_FILENAMES = tf.io.gfile.glob(GCS_PATH + '/test/*.tfrec')\n\nSEED = 2023","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:02.529958Z","iopub.execute_input":"2023-12-28T08:47:02.530269Z","iopub.status.idle":"2023-12-28T08:47:02.577511Z","shell.execute_reply.started":"2023-12-28T08:47:02.530238Z","shell.execute_reply":"2023-12-28T08:47:02.576741Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def decode_image(image_data):\n    \"\"\"Декодирует изображение в vyjujvthye. vfnhbwe (тензор)\n    Нормализует данные и преобразовывает изображения к указанному размеру\"\"\"\n    image = tf.image.decode_jpeg(image_data, channels=3) # Декодирование изображения в формате JPEG в тензор uint8.\n    image = tf.cast(image, tf.float32) / 255.0  # преобразовать изображение в плавающее в диапазоне [0, 1]\n    image = tf.reshape(image, [*IMAGE_SIZE, 3]) # явный размер, необходимый для TPU\n#     image = tf.keras.applications.inception_resnet_v2.preprocess_input(image)\n    return image\n\ndef read_labeled_tfrecord(example):\n    LABELED_TFREC_FORMAT = {\n        \"image\": tf.io.FixedLenFeature([], tf.string), # tf.string означает байтовую строку\n        \"class\": tf.io.FixedLenFeature([], tf.int64),  # [] означает отдельный элемент\n    }\n    example = tf.io.parse_single_example(example, LABELED_TFREC_FORMAT) # парсим отдельный пример в указанном формате\n    image = decode_image(example['image']) # преобразуем изображение к нужному нам формату\n    label = tf.cast(example['class'], tf.int32)\n    return image, label # возвращает набор данных пар (изображение, метка)\n\ndef read_unlabeled_tfrecord(example):\n    UNLABELED_TFREC_FORMAT = {\n        \"image\": tf.io.FixedLenFeature([], tf.string), # tf.string означает байтовую строку\n        \"id\": tf.io.FixedLenFeature([], tf.string),  # [] означает отдельный элемент\n        # класс отсутствует, задача этого конкурса - предсказать классы цветов для тестового набора данных\n    }\n    example = tf.io.parse_single_example(example, UNLABELED_TFREC_FORMAT)\n    image = decode_image(example['image']) # преобразуем изображение к нужному нам формату\n    idnum = example['id']\n    return image, idnum # returns a dataset of image(s)\n\ndef load_dataset(filenames, labeled=True, ordered=False):\n    \"\"\"Читает из TFRecords. Для оптимальной производительности одновременное чтение из нескольких\n    файлов без учета порядка данных. Порядок не имеет значения, поскольку мы все равно будем перетасовывать данные\"\"\"\n\n    ignore_order = tf.data.Options() # Представляет параметры для tf.data.Dataset.\n    if not ordered:\n        ignore_order.experimental_deterministic = False # отключить порядок, увеличить скорость\n\n    dataset = tf.data.TFRecordDataset(filenames, num_parallel_reads=AUTO) # автоматически чередует чтение из нескольких файлов\n    dataset = dataset.with_options(ignore_order) # использует данные сразу после их поступления, а не в исходном порядке\n    dataset = dataset.map(read_labeled_tfrecord if labeled else read_unlabeled_tfrecord, num_parallel_calls=AUTO)\n    # возвращает набор данных пар (изображение, метка), если метка = Истина, или пар (изображение, идентификатор), если метка = Ложь\n    return dataset\n\ndef data_augment(image, label):\n    # data augmentation. Thanks to the dataset.prefetch(AUTO) statement in the next function (below),\n    # this happens essentially for free on TPU. Data pipeline code is executed on the \"CPU\" part\n    # of the TPU while the TPU itself is computing gradients.\n    flag = random.randint(1,3)\n    coef_1 = random.randint(70, 90) * 0.01\n    coef_2 = random.randint(70, 90) * 0.01\n    if flag == 1:\n        image = tf.image.random_flip_left_right(image, seed=SEED)\n    elif flag == 2:\n        image = tf.image.random_flip_up_down(image, seed=SEED)\n    else:\n        image = tf.image.random_crop(image, [int(IMAGE_SIZE[0]*coef_1), int(IMAGE_SIZE[0]*coef_2), 3],seed=SEED)\n    return image, label\n\ndef get_training_dataset():\n    dataset = load_dataset(TRAINING_FILENAMES, labeled=True)\n    dataset = dataset.map(data_augment, num_parallel_calls=AUTO)\n    dataset = dataset.repeat() # набор обучающих данных должен повторяться в течение нескольких эпох\n    dataset = dataset.shuffle(2048)\n    dataset = dataset.batch(BATCH_SIZE)\n    dataset = dataset.prefetch(AUTO) #готовим следующий набор, пока предыдущий обучается\n    return dataset\n\ndef get_validation_dataset():\n    dataset = load_dataset(VALIDATION_FILENAMES, labeled=True, ordered=False)\n    dataset = dataset.batch(BATCH_SIZE)\n    dataset = dataset.cache() # кешируем набор\n    dataset = dataset.prefetch(AUTO) #готовим следующий набор, пока предыдущий обучается\n    return dataset\n\ndef get_test_dataset(ordered=False):\n    dataset = load_dataset(TEST_FILENAMES, labeled=False, ordered=ordered)\n    dataset = dataset.batch(BATCH_SIZE)\n    dataset = dataset.prefetch(AUTO) #готовим следующий набор, пока предыдущий обучается\n    return dataset\n\ndef count_data_items(filenames):\n    # the number of data items is written in the name of the .tfrec files, i.e. flowers00-230.tfrec = 230 data items\n    n = [int(re.compile(r\"-([0-9]*)\\.\").search(filename).group(1)) for filename in filenames]\n    return np.sum(n)\n\n# training_dataset = get_training_dataset()\n# validation_dataset = get_validation_dataset()\n\nNUM_TRAINING_IMAGES = count_data_items(TRAINING_FILENAMES)\nNUM_VALIDATION_IMAGES = count_data_items(VALIDATION_FILENAMES)\nNUM_TEST_IMAGES = count_data_items(TEST_FILENAMES)\nSTEPS_PER_EPOCH = NUM_TRAINING_IMAGES // BATCH_SIZE\nprint('Dataset: {} training images, {} validation images, {} unlabeled test images'.format(NUM_TRAINING_IMAGES, NUM_VALIDATION_IMAGES, NUM_TEST_IMAGES))","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:02.578764Z","iopub.execute_input":"2023-12-28T08:47:02.579060Z","iopub.status.idle":"2023-12-28T08:47:02.597532Z","shell.execute_reply.started":"2023-12-28T08:47:02.579030Z","shell.execute_reply":"2023-12-28T08:47:02.596798Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"LR_START = 0.00001\nLR_MAX = 0.00005 * strategy.num_replicas_in_sync#0.0001\nLR_MIN = 0.00001\nLR_RAMPUP_EPOCHS = 5\nLR_SUSTAIN_EPOCHS = 0\nLR_EXP_DECAY = .75\n\ndef lrfn(epoch):\n    if epoch < LR_RAMPUP_EPOCHS:\n        lr = (LR_MAX - LR_START) / LR_RAMPUP_EPOCHS * epoch + LR_START\n    elif epoch < LR_RAMPUP_EPOCHS + LR_SUSTAIN_EPOCHS:\n        lr = LR_MAX\n    else:\n        lr = (LR_MAX - LR_MIN) * LR_EXP_DECAY**(epoch - LR_RAMPUP_EPOCHS - LR_SUSTAIN_EPOCHS) + LR_MIN\n    return lr\n\nlr_callback = tf.keras.callbacks.LearningRateScheduler(lrfn, verbose=True)\n\n# построим график изменения шага обучение в зависимости от эпох\nrng = [i for i in range(EPOCHS)]\ny = [lrfn(x) for x in rng]\nplt.plot(rng, y)\nprint(\"Learning rate schedule: {:.3g} to {:.3g} to {:.3g}\".format(y[0], max(y), y[-1]))","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:02.598413Z","iopub.execute_input":"2023-12-28T08:47:02.598674Z","iopub.status.idle":"2023-12-28T08:47:03.720860Z","shell.execute_reply.started":"2023-12-28T08:47:02.598646Z","shell.execute_reply":"2023-12-28T08:47:03.720057Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_model(use_model):\n    base_model = use_model(\n        weights='imagenet',\n        include_top=False, \n        pooling='avg',\n        input_shape=(*IMAGE_SIZE, 3)\n    )\n    \n    x = base_model.output\n    predictions = Dense(104, activation='softmax')(x)\n    \n    return Model(inputs=base_model.input, outputs=predictions)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.721734Z","iopub.execute_input":"2023-12-28T08:47:03.722014Z","iopub.status.idle":"2023-12-28T08:47:03.726940Z","shell.execute_reply.started":"2023-12-28T08:47:03.721984Z","shell.execute_reply":"2023-12-28T08:47:03.726227Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"with strategy.scope():\n    model = get_model(EfficientNetB7)\n    \nmodel.compile(\n    optimizer='nadam',\n    loss = 'sparse_categorical_crossentropy',\n    metrics=['sparse_categorical_accuracy']\n)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.727745Z","iopub.execute_input":"2023-12-28T08:47:03.727960Z","iopub.status.idle":"2023-12-28T08:47:03.741009Z","shell.execute_reply.started":"2023-12-28T08:47:03.727936Z","shell.execute_reply":"2023-12-28T08:47:03.740283Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(\n    get_training_dataset(),\n    steps_per_epoch=STEPS_PER_EPOCH,\n    epochs=EPOCHS,\n    callbacks=[\n        lr_callback, \n        ModelCheckpoint(\n            filepath='EfficientNetB7.h5', \n            monitor='val_loss',\n            save_best_only=True\n        )\n    ],\n    validation_data=get_validation_dataset(),\n    workers = 3\n)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.741902Z","iopub.execute_input":"2023-12-28T08:47:03.742163Z","iopub.status.idle":"2023-12-28T08:47:03.753414Z","shell.execute_reply.started":"2023-12-28T08:47:03.742135Z","shell.execute_reply":"2023-12-28T08:47:03.752618Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(\n    history.history['sparse_categorical_accuracy'],\n    label='Оценка точности при обучении'\n)\n\nplt.plot(\n    history.history['val_sparse_categorical_accuracy'],\n    label='Оценка точности при валидации'\n)\n\nplt.xlabel('Эпоха обучения')\nplt.ylabel('Оценка точности')\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.754293Z","iopub.execute_input":"2023-12-28T08:47:03.754568Z","iopub.status.idle":"2023-12-28T08:47:03.768476Z","shell.execute_reply.started":"2023-12-28T08:47:03.754541Z","shell.execute_reply":"2023-12-28T08:47:03.767810Z"},"trusted":true},"execution_count":null,"outputs":[]},{"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()","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.769238Z","iopub.execute_input":"2023-12-28T08:47:03.769542Z","iopub.status.idle":"2023-12-28T08:47:03.779963Z","shell.execute_reply.started":"2023-12-28T08:47:03.769513Z","shell.execute_reply":"2023-12-28T08:47:03.779354Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.models.load_model('EfficientNetB7.h5')\n\ntest_ds = get_test_dataset(ordered=True)\n\nprint('Вычисляем предсказания...')\ntest_images_ds = test_ds.map(lambda image, idnum: image)\nprobabilities = model.predict(test_images_ds)\npredictions = np.argmax(probabilities, axis=-1)\nprint(predictions)\n\nprint('Создание файла submission.csv...')\ntest_ids_ds = test_ds.map(lambda image, idnum: idnum).unbatch()\ntest_ids = next(iter(test_ids_ds.batch(NUM_TEST_IMAGES))).numpy().astype('U') # все в одной партии\nnp.savetxt('submission.csv', np.rec.fromarrays([test_ids, predictions]), fmt=['%s', '%d'], delimiter=',', header='id,label', comments='')","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.780685Z","iopub.execute_input":"2023-12-28T08:47:03.780888Z","iopub.status.idle":"2023-12-28T08:47:03.792781Z","shell.execute_reply.started":"2023-12-28T08:47:03.780865Z","shell.execute_reply":"2023-12-28T08:47:03.792004Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"![image.png](attachment:f6662c34-1ad1-4896-a121-9046c544dbc1.png)","metadata":{},"attachments":{"f6662c34-1ad1-4896-a121-9046c544dbc1.png":{"image/png":"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"}}},{"cell_type":"code","source":"with strategy.scope():\n    model = get_model(VGG16)\n\nmodel.compile(\n    optimizer='nadam',\n    loss = 'sparse_categorical_crossentropy',\n    metrics=['sparse_categorical_accuracy']\n)\n\nhistory = model.fit(\n    get_training_dataset(),\n    steps_per_epoch=STEPS_PER_EPOCH,\n    epochs=EPOCHS,\n    callbacks=[\n        lr_callback, \n        ModelCheckpoint(\n            filepath='VGG16.h5', \n            monitor='val_loss',\n            save_best_only=True\n        )\n    ],\n    validation_data=get_validation_dataset(),\n    workers = 3\n)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.795149Z","iopub.execute_input":"2023-12-28T08:47:03.795431Z","iopub.status.idle":"2023-12-28T08:47:03.804718Z","shell.execute_reply.started":"2023-12-28T08:47:03.795396Z","shell.execute_reply":"2023-12-28T08:47:03.804032Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(\n    history.history['sparse_categorical_accuracy'],\n    label='Оценка точности при обучении'\n)\n\nplt.plot(\n    history.history['val_sparse_categorical_accuracy'],\n    label='Оценка точности при валидации'\n)\n\nplt.xlabel('Эпоха обучения')\nplt.ylabel('Оценка точности')\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.805516Z","iopub.execute_input":"2023-12-28T08:47:03.805744Z","iopub.status.idle":"2023-12-28T08:47:03.819373Z","shell.execute_reply.started":"2023-12-28T08:47:03.805719Z","shell.execute_reply":"2023-12-28T08:47:03.818749Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(\n    history.history['loss'],\n    label='Оценка потерь при обучении'\n)\n\nplt.plot(\n    history.history['val_loss'],\n    label='Оценка потерь при валидации'\n)\n\nplt.xlabel('Эпоха обучения')\nplt.ylabel('Оценка потерь')\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.820176Z","iopub.execute_input":"2023-12-28T08:47:03.820422Z","iopub.status.idle":"2023-12-28T08:47:03.829635Z","shell.execute_reply.started":"2023-12-28T08:47:03.820396Z","shell.execute_reply":"2023-12-28T08:47:03.828903Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.models.load_model('VGG16.h5')\n\ntest_ds = get_test_dataset(ordered=True)\n\nprint('Вычисляем предсказания...')\ntest_images_ds = test_ds.map(lambda image, idnum: image)\nprobabilities = model.predict(test_images_ds)\npredictions = np.argmax(probabilities, axis=-1)\nprint(predictions)\n\nprint('Создание файла submission.csv...')\ntest_ids_ds = test_ds.map(lambda image, idnum: idnum).unbatch()\ntest_ids = next(iter(test_ids_ds.batch(NUM_TEST_IMAGES))).numpy().astype('U')\nnp.savetxt('submission.csv', np.rec.fromarrays([test_ids, predictions]), fmt=['%s', '%d'], delimiter=',', header='id,label', comments='')","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.830546Z","iopub.execute_input":"2023-12-28T08:47:03.830780Z","iopub.status.idle":"2023-12-28T08:47:03.840006Z","shell.execute_reply.started":"2023-12-28T08:47:03.830755Z","shell.execute_reply":"2023-12-28T08:47:03.839359Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"![image.png](attachment:05d95a47-1686-486d-93e9-8b2826cf62b7.png)","metadata":{},"attachments":{"05d95a47-1686-486d-93e9-8b2826cf62b7.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABZUAAABeCAYAAABb2vp6AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAEE5SURBVHhe7d0LVFTnvTf+b//rZOhqkKwQOcEVgm+BrARsA6RHsI1IvBsFNYh5uXgioAfUV4mNghqRGMSoqAlCqmIT1By5nAokAbwhagXTCPaUMacOPUegR0KOpBjzFkhXZvr/L/77NjN7LsDmEsX2+1mZlb337Muzn+fZ4+I3z/ye7/UJQERERERERERERESkwf+j/J+IiIiIiIiIiIiIaFAMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCrT3y9jN7q7hZdRWbdhlN8TXk7fJrpfxH7LTklERERERERE99H3+gTKMtGgOmr2okgvLDwxG6vjg+Amb75/uvUoOnweHcJicFwa5njJmwdkbEVR2jJkVd+BSdrwBNKrf43VAdIKui5nIzn1OPQ98joiDuJ63uyh32vHeewpFiurP16YsyoWwfYn7m7F5aoK1NTVo6nbB1NmhyFyTgSCvVyUHUbO2KFHVU01Lp9vRCuUa0QuQbCHssMo6G6tQ1VxBaqutsEtOAzhs6MQGe7bTz0a0dFUjZrqetQI+8M3BHOmRSAyOgijWCRbQt8pE/pOq7jsvwDrIwPQXw1b+r1QmvDEBEz5zgo1MGPTXsxfcgRtQpulV5+z9Nn7retqCQrrxKewnz4t6jagquwUDHeE5aBYbNL0sBIRERERERHRWPRgBpW/7cGf1SP1XMbhke8ry+TAGhALQnz6bIwklNO04ylEHRUWpu1G47El313AT6uuciwP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k6ayDbvva9hHS18ban8cCU3XGqV7F43SvQ3ejmJ5MKp1eOPtWbgwQ/7MHR0a68yOdO/C86v13u7Xs0ZERERERERjD0cqjzEurlr+YBeDAEMLHmil7foqYoBhkICEY1BN9N3dQ3+GfG/D0W999KLp7Xgkvn1NlZu0E/WVl6B7Xp3n1uqelHdAWtrIMaAs0lR2LX1Hw3nuVz1pKpvT97XV66D7aKg/TfuMFk3XGqV7F43SvQ3ejmJ57lEdDpvGOrMj3fsQ7u1+PWtEREREREQ09jCoTHRPuCI4biUm6TMxf/qLiI9ZhJnmn9xv7ifNCBERERERERER0RjE9BdE95j8k3OBONKSo/6I/u7cvpiLFr/1CHP2EwUiIiIiIiKiBwCDykRERERERERERESkGdNfEBEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkWYMKhMRERERERERERGRZgwqExEREREREREREZFmDCoTERERERERERERkUbA/w/ZzvWtRsROgAAAAABJRU5ErkJggg=="}}},{"cell_type":"code","source":"with strategy.scope():\n    model = get_model(Xception)\n\nmodel.compile(\n    optimizer='nadam',\n    loss = 'sparse_categorical_crossentropy',\n    metrics=['sparse_categorical_accuracy']\n)\n\nhistory = model.fit(\n    get_training_dataset(),\n    steps_per_epoch=STEPS_PER_EPOCH,\n    epochs=EPOCHS,\n    callbacks=[\n        lr_callback, \n        ModelCheckpoint(\n            filepath='Xception.h5', \n            monitor='val_loss',\n            save_best_only=True\n        )\n    ],\n    validation_data=get_validation_dataset(),\n    workers = 3\n)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T08:47:03.840738Z","iopub.execute_input":"2023-12-28T08:47:03.840955Z","iopub.status.idle":"2023-12-28T09:27:27.867293Z","shell.execute_reply.started":"2023-12-28T08:47:03.840931Z","shell.execute_reply":"2023-12-28T09:27:27.866173Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(\n    history.history['sparse_categorical_accuracy'],\n    label='Оценка точности при обучении'\n)\n\nplt.plot(\n    history.history['val_sparse_categorical_accuracy'],\n    label='Оценка точности при валидации'\n)\n\nplt.xlabel('Эпоха обучения')\nplt.ylabel('Оценка точности')\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-12-28T09:27:27.869990Z","iopub.execute_input":"2023-12-28T09:27:27.870273Z","iopub.status.idle":"2023-12-28T09:27:28.022891Z","shell.execute_reply.started":"2023-12-28T09:27:27.870237Z","shell.execute_reply":"2023-12-28T09:27:28.022018Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(\n    history.history['loss'],\n    label='Оценка потерь при обучении'\n)\n\nplt.plot(\n    history.history['val_loss'],\n    label='Оценка потерь при валидации'\n)\n\nplt.xlabel('Эпоха обучения')\nplt.ylabel('Оценка потерь')\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-12-28T09:27:28.023886Z","iopub.execute_input":"2023-12-28T09:27:28.024133Z","iopub.status.idle":"2023-12-28T09:27:28.163557Z","shell.execute_reply.started":"2023-12-28T09:27:28.024106Z","shell.execute_reply":"2023-12-28T09:27:28.162793Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.models.load_model('Xception.h5')\n\ntest_ds = get_test_dataset(ordered=True)\n\nprint('Вычисляем предсказания...')\ntest_images_ds = test_ds.map(lambda image, idnum: image)\nprobabilities = model.predict(test_images_ds)\npredictions = np.argmax(probabilities, axis=-1)\nprint(predictions)\n\nprint('Создание файла submission.csv...')\ntest_ids_ds = test_ds.map(lambda image, idnum: idnum).unbatch()\ntest_ids = next(iter(test_ids_ds.batch(NUM_TEST_IMAGES))).numpy().astype('U')\nnp.savetxt('submission.csv', np.rec.fromarrays([test_ids, predictions]), fmt=['%s', '%d'], delimiter=',', header='id,label', comments='')","metadata":{"execution":{"iopub.status.busy":"2023-12-28T09:27:28.164466Z","iopub.execute_input":"2023-12-28T09:27:28.164697Z","iopub.status.idle":"2023-12-28T09:40:50.970783Z","shell.execute_reply.started":"2023-12-28T09:27:28.164671Z","shell.execute_reply":"2023-12-28T09:40:50.969770Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"![image.png](attachment:e9025e82-b9f8-42a0-979c-025980fb2c23.png)","metadata":{},"attachments":{"e9025e82-b9f8-42a0-979c-025980fb2c23.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABa8AAABvCAYAAADrLTyDAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAESkSURBVHhe7d0LVFTnvTf+b///duhqkPxD5BSXBFsgqwFPI7RHsFUgKngFNYh5ueREQA+orxIbBTUiMYgRQRMCqYo1XnLk0ggkAbwhahWTCp5TxjQOPUegR0KOpBjzFkhXZvqexX/fZmbPBRwuiZP4/axOu/eePXs/+3mevV397Yff850BAYiIiIiIiIiIiIiInMj/o/wvEREREREREREREZHTYPCaiIiIiIiIiIiIiJwOg9dERERERERERERE5HQYvCYiIiIiIiIiIiIip8PgNRERERERERERERE5HQaviYiIiIiIiIiIiMjpMHhNRERERERERERERE6HwWsiIiIiIiIiIiIicjoMXhMRERERERERERGR02HwmoiIiIiIiIiIiIicDoPXREREREREREREROR0GLwmIiIiIiIiIiIiIqfD4DUREREREREREREROR0Gr4mIiIiIiIiIiIjI6TB4TUREREREREREREROh8FrIiIiIiIiIiIiInI6DF4TERERERERERERkdNh8JqIiIiIiIiIiIiInA6D10RERERERERERETkdBi8JiIiIiIiIiIiIiKnw+A1ERERERERERERETkdBq+JiIiIiIiIiIiIyOkweE1ERERERERERERETofBayIiIiIiIiIiIiJyOgxeExEREREREREREZHTYfCaSN+L3l7ho1fWLejl74SP3a+J7hex37JTEhEREREREdG32HcGBMoykcO66gtQqhUWJkZidWIg3OTN90+vFqUHzqFLWAxKyMAcL3nzkPTtKM14Fjl1d2CQNkxEZt3vsDpAWkHPpVykph+Dtk9eR9Q+XC+KHP61dp3D7jKxsgbjhTmr4hFkfeDedlyqrUb95Ua09PpgWmQooudEIcjLRdlh9PRdWtTW1+HSuWa0QzlH9FIEeSg7jIHe9suoLatG7dUOuAWFIjwyBtHhvoPUox5dLXWor2tEvbA/fIMxJywK0bGBGMMiWRL6TqXQd9rFZf+FWB8dgMFq2NTvhdKEJydh2ldWqKHpWwqwYOlBdAhtlll31tRn77eeq+U4fFm8Cwfp0wK7fW6M+zURERERERER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bTYWzJyPxLjFmG1MVbB5kBQsREREREREREREZIFpQ4i+QvKf6gvEEYUcUEj0wLl9oRBtfusRau9PLoiIiIiIiIhoSAxeExEREREREREREZHTYdoQIiIiIiIiIiIiInI6DF4TERERERERERERkdNh8JqIiIiIiIiIiIiInA6D10RERERERERERETkdBi8JiIiIiIiIiIiIiKnw+A1ERERERERERERETkdBq+JiIiIiIiIiIiIyOkweE1ERERERERERERETofBayIiIiIiIiIiIiJyOgxeExEREREREREREZHTYfCaiIiIiIiIiIiIiJwOg9dERERERERERERE5HQYvCYiIiIiIiIiIiIip8PgNRERERERERERERE5HQaviYiIiIiIiIiIiMjpMHhNRERERERERERERE6HwWsiIiIiIiIiIiIicjoMXhMRERERERERERGR02HwmoiIiIiIiIiIiIicDoPXREREREREREREROR0GLwmIiIiIiIiIiIiIqfD4DUREREREREREREROR0Gr4mIiIiIiIiIiIjI6TB4TUREREREREREREROh8FrIiIiIiIiIiIiInI6DF4TERERERERERERkdNh8JqIiIiIiIiIiIiInA6D10RERERERERERETkdBi8JiIiIiIiIiIiIiKnw+A1ERERERERERERETkdBq+JiIiIiIiIiIiIyOkweE1ERERERERERERETofBayIiIiIiIiIiIiJyMsD/D3fsbh+YoFiyAAAAAElFTkSuQmCC"}}}]}