{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# TF 2.2 блокнот\n[По сути, это перевод стартового блокнота от команды TensorFlow](https://www.kaggle.com/philculliton/a-simple-petals-tf-2-2-notebook)","metadata":{}},{"cell_type":"markdown","source":"![image.png](attachment:2f7c9d2e-ec5d-4840-86f1-8638dc55fcc5.png)\nАрхитектура NASNet состоит из слоёв двух типов: нормальный слой (слева) и слой сокращения (справа). Эти два слоя спроектированы генератором AutoML\nБенчмарки показали, что автоматически сгенерированный ИИ превосходит по результатам классификации и определения объектов все остальные системы машинного зрения, созданные и обученные экспертами-людьми.\nИсследователи подчёркивают, что NASNet можно масштабировать и, следовательно, приспособить для работы на системах со слабыми вычислительными ресурсами без особой потери точности. Нейросеть способна работать даже на мобильном телефоне со слабым CPU с ограниченным ресурсом памяти. Авторы говорят, что миниатюрная версия NASNet демонстрирует точность 74%, что на 3,1 процентных пункта лучше, чем самые качественные известные нейросети для мобильных платформ.","metadata":{},"attachments":{"2f7c9d2e-ec5d-4840-86f1-8638dc55fcc5.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA50AAAIdCAYAAAC+6xkmAAAgAElEQVR4Aey9fewdR33vf/6JIqd5MJCkPlwHHJvEeXATHDsVOOrX5UfkFqU0ylUb3+LrBGjovSIlERgbUTVpU+S4fHlIIQW71A44VK1FbW65gsZpA6UQfBNs3QAWJJZaCLXSqwY7Sg1xLAj+/PTe3Tlnzp7dPTt7ZnZm9rxXOjpP+/CZ1+czD++Z2dmecCMBEiABEiABEiABEiABEiABEiABRwR6js7L05IACZAACZAACZAACZAACZAACZCAUHQyCEiABEiABEiABEiABEiABEiABJwRoOh0hpYnJgESIAESIAESIAESIAESIAESoOhkDJAACZAACZAACZAACZAACZAACTgjQNHpDC1PTAIkQAIkQAIkQAIkQAIkQAIkQNHJGCABEiABEiABEiABEiABEiABEnBGgKLTGVqemARIgARIgARIgARIgARIgARIgKKTMUACJEACJEACJEACJEACJEACJOCMAEWnM7Q8MQmQAAmQAAmQAAmQAAmQAAmQAEUnY4AESIAESIAESIAESIAESIAESMAZAYpOZ2h5YhIgARIgARIgARIgARIgARIgAYpOxgAJkAAJkAAJkAAJkAAJkAAJkIAzAhSdztDyxCRAAiRAAiRAAiRAAiRAAiRAAhSdjAESIAESIAESIAESIAESIAESIAFnBCg6naHliUmABEiABEiABEiABLpMoNfrSUyvLvuCaQubAEVn2P6hdSRAAiRAAiRAAiRAAoESgOCMZYvJ1liY0s76BOLJKfXTxD1JgARIgARIgARIgARIwDmBmIRcTLY6dxwv0DoBis7WkfOCJEACJEACJEACJEACXSAQk5CLydYuxAbTMEqAonOUB7+RAAmQAAmQAAmQAAmQQC0CMQm5mGytBZ87RUWAojMqd9FYEiABEiABEiABEiCBUAgYC7n//LJs6a+SLV/+UetJMLa1dQt5wS4ToOjssneZNhIgARIgARIgARIgAWcEjIUcRaczX/DEYROg6AzbP7SOBEiABEiABEiABEggUAIUnYE6hmYFR4CiMziX0CASIAESIAESIAESIIEYCDQVne/Z9bfy0VtWZM/4XCdb9j0pP3acYGNbHdvD088WAYrO2fI3U0sCJEACJEACJEACJGCJgLGQS6bX9qT3q++XfUf+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"}}},{"cell_type":"code","source":"!pip install -q efficientnet","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#предварительно обученные модели\nfrom tensorflow.keras.applications.vgg16 import VGG16\nfrom tensorflow.keras.applications.vgg19 import VGG19\nfrom tensorflow.keras.applications.inception_v3 import InceptionV3\nfrom tensorflow.keras.applications.inception_resnet_v2 import InceptionResNetV2\nfrom tensorflow.keras.applications.densenet import DenseNet121, DenseNet169, DenseNet201 \nfrom tensorflow.keras.applications.xception import Xception\nfrom tensorflow.keras.applications.resnet50 import ResNet50\nfrom tensorflow.keras.applications.resnet_v2 import ResNet50V2, ResNet101V2, ResNet152V2\nfrom tensorflow.keras.applications.nasnet import NASNetLarge\nfrom efficientnet.tfkeras import EfficientNetB7, EfficientNetL2, EfficientNetB0, EfficientNetB1","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras import layers\nfrom tensorflow.keras.layers import Dense, Flatten\nfrom tensorflow.keras.layers import Dropout, BatchNormalization, GaussianDropout\nfrom tensorflow.keras.layers import GlobalAveragePooling2D\nfrom tensorflow.keras.callbacks import ModelCheckpoint\n#  библиотека для работы с наборами данных на Kaggle\nfrom kaggle_datasets import KaggleDatasets\nimport re\nimport numpy as np\nimport random\nimport matplotlib.pyplot as plt\n%matplotlib inline \nprint(\"Tensorflow version \" + tf.__version__)","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Определяем, какой ускоритель можем использовать","metadata":{}},{"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":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Get my data path","metadata":{}},{"cell_type":"code","source":"GCS_DS_PATH = KaggleDatasets().get_gcs_path(\"tpu-getting-started\") #получаем путь к наборам данных\nMORE_IMAGES_GCS_DS_PATH = KaggleDatasets().get_gcs_path('tf-flower-photo-tfrec')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Set some parameters","metadata":{}},{"cell_type":"code","source":"IMAGE_SIZE = [331, 331] # при таком размере графическому процессору не хватит памяти. Используйте 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]]\nMOREIMAGES_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\nIMAGENET_FILES = tf.io.gfile.glob(MORE_IMAGES_GCS_DS_PATH + '/imagenet' + MOREIMAGES_PATH + '/*.tfrec')\nINATURELIST_FILES = tf.io.gfile.glob(MORE_IMAGES_GCS_DS_PATH + '/inaturalist' + MOREIMAGES_PATH + '/*.tfrec')\nOPENIMAGE_FILES = tf.io.gfile.glob(MORE_IMAGES_GCS_DS_PATH + '/openimage' + MOREIMAGES_PATH + '/*.tfrec')\nOXFORD_FILES = tf.io.gfile.glob(MORE_IMAGES_GCS_DS_PATH + '/oxford_102' + MOREIMAGES_PATH + '/*.tfrec')\n\nTRAINING_FILENAMES = TRAINING_FILENAMES + VALIDATION_FILENAMES + IMAGENET_FILES + INATURELIST_FILES + OPENIMAGE_FILES + OXFORD_FILES\nSEED = 2020","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Загружаем данные\n\nЭти данные загружаются из Kaggle и автоматически сегментируются для максимального распараллеливания.","metadata":{}},{"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":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Построить модель на TPU (или GPU, или CPU...) с Tensorflow 2.1!","metadata":{}},{"cell_type":"code","source":"# функция управляющая изменениями шага обучения в процессе тренировки нейронной сети\nLR_START = 0.00001\nLR_MAX = 0.00005 * strategy.num_replicas_in_sync#0.0001\nLR_MIN = 0.00001\nLR_RAMPUP_EPOCHS = 3\nLR_SUSTAIN_EPOCHS = 0\nLR_EXP_DECAY = .8\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":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_model(use_model):\n    # noisy-student\n    base_model = use_model(weights='imagenet', \n                      include_top=False, pooling='avg',\n                      input_shape=(*IMAGE_SIZE, 3))\n#     base_model.trainable = False\n    x = base_model.output\n    predictions = Dense(104, activation='softmax')(x)\n    return Model(inputs=base_model.input, outputs=predictions)\n\n\nwith strategy.scope():    \n    model = get_model(NASNetLarge) # тут подставить свою модель\n        \nmodel.compile(\n    optimizer='nadam',\n    loss = 'sparse_categorical_crossentropy',\n    metrics=['sparse_categorical_accuracy']\n)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(get_training_dataset(), \n          steps_per_epoch=STEPS_PER_EPOCH, \n          epochs=EPOCHS, \n          callbacks=[lr_callback, ModelCheckpoint(filepath='my_ef_net_b7.h5', monitor='val_loss',\n                                  save_best_only=True)],\n          validation_data=get_validation_dataset(),\n          workers = 3)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(history.history['sparse_categorical_accuracy'], \n         label='Оценка точности на обучающем наборе')\nplt.plot(history.history['val_sparse_categorical_accuracy'], \n         label='Оценка точности на проверочном наборе')\nplt.xlabel('Эпоха обучения')\nplt.ylabel('Оценка точности')\nplt.legend()\nplt.show()","metadata":{"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_count":null,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.models.load_model('my_ef_net_b7.h5')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Вычислите свои прогнозы на тестовом наборе!\n\nCоздадим файл, который можно будет отправить на конкурс.","metadata":{}},{"cell_type":"code","source":"# Поскольку мы разделяем набор данных и выполняем итерацию отдельно для изображений и идентификаторов, порядок имеет значение.\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":{"trusted":true},"execution_count":null,"outputs":[]}]}