Conversation with Merlin [email protected] · Tue Nov 07 2023

Допиши код в тех местах, где написано: # YOUR CODE HERE. В комментариях есть подсказки. КОд: try: %tensorflow_version 2.x except: pass import pathlib import numpy as np import matplotlib.pyplot as plt

import tensorflow as tf import tensorflow_datasets as tfds tfds.disable_progress_bar()

print('\u2022 Используется TensorFlow версии ', tf.version) print('\u2022 Обнаружен GPU.' if tf.test.is_gpu_available() else '\u2022 GPU не обнаружен. Запущено на CPU') splits, info = tfds.load('fashion_mnist', with_info=True, as_supervised=True, split=['train[0%:90%]','train[90%:100%]','test'])

(train_examples, validation_examples, test_examples) = splits

num_examples = info.splits['train'].num_examples num_classes = info.features['label'].num_classes class_names = ['Футболка/топ', 'Брюки', 'Пуловер', 'Платье', 'Пальто', 'Сандалия', 'Рубашка', 'Кроссовка', 'Сумка', 'Ботинок']

Создаем файл labels.txt с названиями классов

with open('labels.txt', 'w') as f: f.write('\n'.join(class_names))

Изображения в наборе данных - 28 х 28 пикселей.

IMG_SIZE = 28

УПРАЖНЕНИЕ: напишите функцию для нормализации изображений.

def format_example(image, label): # Преобразуйте изображение к float32 image = # YOUR CODE HERE

# Нормализуйте изображение к интервалу [0, 1] image = # YOUR CODE HERE return image, label

Определим размер пакета

BATCH_SIZE = 256

Создание наборов данных тренировки, валидации и тестирования

train_batches = train_examples.cache().shuffle(num_examples//4).batch(BATCH_SIZE).map(format_example).prefetch(1) validation_batches = validation_examples.cache().batch(BATCH_SIZE).map(format_example) test_batches = test_examples.batch(1).map(format_example)

Дополним код в местах, где написано "# YOUR CODE HERE":

# УПРАЖНЕНИЕ: напишите функцию для нормализации изображений. def format_example(image, label): # Преуйте изображение к float32 image = tf.cast(image, tf.float32) # Нормализуйте изображение к интервалу [0, 1] image = / 255.0 return image, label

Этот код добавляет функцию format_example, которая преобразует изображения к типу float и нормализует их значения в интервал от 0 до 1.

УПРАЖНЕНИЕ: постройте и скомпилируйте модель, как показано в предыдущей ячейке.

model = tf.keras.Sequential([ # укажите форму ввода (28, 28, 1), размер ядра = 3, фильтры = 16 и используйте активацию ReLU, tf.keras.layers.Conv2D(# YOUR CODE HERE),

tf.keras.layers.MaxPooling2D(), # Укажите количество фильтров 32, размер ядра 3 и функцию активации ReLU tf.keras.layers.Conv2D(# YOUR CODE HERE), # Расплющивание выходного слоя в одномерный массив tf.keras.layers.Flatten(), # Добавьте полносвязанный слой с 64 скрытыми нейронами и активацией ReLU tf.keras.layers.Dense(# YOUR CODE HERE), # Добавьте финальную классификацию softmax tf.keras.layers.Dense(# YOUR CODE HERE)])

Установите подходящую функцию потерь и используйте точность в качестве метрики

model.compile(optimizer='adam', loss=# YOUR CODE HERE, metrics=# YOUR CODE HERE) model.fit(train_batches, epochs=10, validation_data=validation_batches)

Дополним код в местах, где написано "# YOUR CODE HERE":

model = tf.keras.Sequential([ # укажите форму ввода (28, 28, 1), размер ядра = 3, фильтры = 16 и используйте активацию ReLU, tf.keras.layers.Conv2D(16, (3, 3), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D(), # Укажите количество фильтров 32, размер ядра 3 и функцию активации ReLU tf.keras.layers.Conv2D(32 (3, 3), activation='relu'), # Расплющивание выходного слоя в одномерный массив tf.keras.layers.Flatten(), # Добавьте полносвязанный слой с 64 скрытыми нейронами и активацией ReLU tf.keras.layers.Dense(64, activation='relu'), # Добавьте финальную классификацию softmax tf.keras.layers.Dense(num_classes, activation='softmax')]) # Установите подходящую функцию потерь и используйте точность в качестве метрики model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=['accuracy']) model.fit(train_batches, epochs=10, validation_data=validation_batches)

Этот код определяет модель с использованием сверточных и полносвязанных слоев для классификации изображений. Также задаются функция потерь и метрика для обучения модели. Обучение провод на тренировочных данных train_batches в течение 10 эпох, с проверкой на валидационных данных validation_batches.

УПРАЖНЕНИЕ: используйте API tf.saved_model, чтобы сохранить модель в формате SavedModel.

export_dir = 'saved_model/1'

YOUR CODE HERE

УПРАЖНЕНИЕ: используйте TFLiteConverter SavedModel API для инициализации конвертера

converter = # YOUR CODE HERE

Установите оптимизацию

converter.optimizations = # YOUR CODE HERE

Вызовите конвертер, чтобы окончательно сгенерировать модель TFLite

tflite_model = # YOUR CODE HERE tflite_model_file = pathlib.Path('./model.tflite') tflite_model_file.write_bytes(tflite_model)

Дополним код в местах, где написано "# YOUR CODE HERE":

export_dir = 'saved_model/1' #охраняем модель в формате SavedModel tf.saved_model.save(model, export_dir) # Используем TFLiteConverter SavedModel API для инициализации конвертера converter = tf.lite.TFLiteConverter.from_saved_model(export_dir) # Установим оптимизации converter.optimizations = [tf.lite.Optimize.DEFAULT] # Вызываем конвертер, чтобы окончательно сгенерировать модель TFLite tflite_model = converter.convert() tflite_model_file = pathlib.Path('./model.tflite') tflite_model_file.write_bytes(tflite_model)

Этот код использует API tf.saved_model для сохранения модели в формате SavedModel. Затем используется TFLiteConverter SavedModel API для инициализации конвертера. Оптимизации устанавливаются для улучшения производности модели. Затем конвертер вызывается для генерации окончательной модели TFLite, которая сохраняется в файл с именем model.tflite.