Перейти к содержанию

Утилиты

CustomObjectScope

keras.utils.CustomObjectScope()

Предоставляет область видимости, которая изменяется на _GLOBAL_CUSTOM_OBJECTS не может экранироваться.

Код внутри оператора «with» будет иметь доступ к пользовательским объектам по имени. Изменения глобальных пользовательских объектов сохраняются в заключении с оператором. В конце оператора «с» глобальные пользовательские объекты возвращаются в состояние в начале оператора «with».

Пример

Рассмотрим пользовательский объект MyObject (например, класс):

with CustomObjectScope({‘MyObject’:MyObject}):

    layer = Dense(…, kernel_regularizer=’MyObject’)

    # save, load, etc. will recognize custom object by name


[source]

HDF5Matrix

keras.utils.HDF5Matrix(datapath, dataset, start=0, end=None, normalizer=None)

Представление набора данных HDF5 для использования вместо массива Numpy.

Пример

x_data = HDF5Matrix(‘input/file.hdf5’, ‘data’)

model.predict(x_data)

Предоставление начала и конца позволяет использовать фрагмент набора данных.

Опционально может быть задана функция нормализатора (или лямбда). Она будет вызываться на каждом фрагменте получаемых данных.

Аргументы

  • datapath: строка, путь к файлу HDF5
  • dataset: строка, имя набора данных HDF5 в файле, указанном в каталоге данных
  • start: int, начало желаемого среза указанного набора данных
  • end: int, конец желаемого среза указанного набора данных
  • normalizer: функция, которая должна быть вызвана на данных, когда извлечены

Возвращает

Массивный набор данных HDF5.


[source]

Sequence

keras.utils.Sequence()

Базовый объект для подгонки под последовательность данных, например, набор данных.

Каждая последовательность должна реализовывать методы __getitem__ и __len__. Если вы хотите модифицировать набор данных между эпохами, вы можете реализовать on_epoch_end. Метод __getitem__ должен возвращать полный пакет.

Примечение

Sequence — более безопасный способ выполнения многопроцессорной обработки. Такая структура гарантирует, что сеть будет тренироваться только один раз на каждой выборке в эпоху, чего не происходит с генераторами.

Примеры

from skimage.io import imreadfrom skimage.transform import resizeimport numpy as np

# Здесь `x_set` — это список путей к изображениям#, а `y_set` — это ассоциированные классы.

class CIFAR10Sequence(Sequence):

    def __init__(self, x_set, y_set, batch_size):

        self.x, self.y = x_set, y_set

        self.batch_size = batch_size

    def __len__(self):

        return int(np.ceil(len(self.x) / float(self.batch_size)))

    def __getitem__(self, idx):

        batch_x = self.x[idx * self.batch_size:(idx + 1) * self.batch_size]

        batch_y = self.y[idx * self.batch_size:(idx + 1) * self.batch_size]

        return np.array([

            resize(imread(file_name), (200, 200))

               for file_name in batch_x]), np.array(batch_y)


to_categorical

keras.utils.to_categorical(y, num_classes=None, dtype=’float32′)

Преобразует вектор класса (целые числа) в двоичную классную матрицу.

Например, для использования с categorical_crossentropy.

Аргументы

  • y: вектор класса, который будет преобразован в матрицу (целые числа от 0 до num_classes).
  • num_classes: общее количество классов.
  • dtype: Тип данных, ожидаемый на входе, как строка (float32, float64, int32…).

Возвращает

Двоичное матричное представление входа. Ось классов располагается последней.

Пример

# Рассмотрим массив из 5 меток из набора из 3-х классов {0, 1, 2}:

> labels

array([0, 2, 1, 2, 0])# `to_categorical` преобразует это в матрицу со столькими# столбцами, сколько существует классов. Количество строк# остается неизменным..

> to_categorical(labels)

array([[ 1.,  0.,  0.],

       [ 0.,  0.,  1.],

       [ 0.,  1.,  0.],

       [ 0.,  0.,  1.],

       [ 1.,  0.,  0.]], dtype=float32)


normalize

keras.utils.normalize(x, axis=-1, order=2)

Нормализует массив Numpy.

Аргументы

  • x: Массив Numpy для нормализации.
  • Ось: по которой нужно нормализовать.
  • порядок: Порядок нормализации (например, 2 для нормы L2).

Возвращает

Нормализованная копия массива.


get_file

keras.utils.get_file(fname, origin, untar=False, md5_hash=None, file_hash=None, cache_subdir=’datasets’, hash_algorithm=’auto’, extract=False, archive_format=’auto’, cache_dir=None)

Загружает файл с URL, если его еще нет в кэше.

По умолчанию файл с URL загружается в cache_dir ~/.keras, помещается в набор данных cache_subdir и получает имя файла. Таким образом, окончательное местоположение файла example.txt будет ~/.keras/datasets/example.txt.

Файлы в форматах tar, tar.gz, tar.bz и zip также могут быть извлечены. Передача хэша проверит файл после загрузки. Программы командной строки shasum и sha256sum могут вычислить хэш.

Аргументы

  • fname: Имя файла. Если указан абсолютный путь /path/to/file.txt, то файл будет сохранен в этом месте.
  • origin: Оригинальный URL файла.
  • untar: Исключено в пользу ‘extract’. boolean, должен ли файл быть распакован.
  • md5_hash: Исключено в пользу ‘file_hash’. md5 хэш файла для верификации
  • file_hash: Ожидаемая хэш-строка файла после загрузки. Поддерживаются хэш-алгоритмы sha256 и md5.
  • cache_subdir: Подкаталог под кэш-директором Keras, в котором сохраняется файл. Если указан абсолютный путь /path/to/folder, то файл будет сохранен в этом месте.
  • hash_algorithm: Выберите хэш-алгоритм проверки файла. опции ‘md5’, ‘sha256’ и ‘auto’. По умолчанию ‘auto’ определяет используемый хэш-алгоритм.
  • extract: True пытается извлечь файл в виде архива, как tar или zip.
  • archive_format: Формат архива для попытки извлечения файла. Опции: ‘auto’, ‘tar’, ‘zip’ и None. ‘tar’ включает в себя файлы tar, tar.gz и tar.bz. По умолчанию ‘auto’ — это [‘tar’, ‘zip’]. Ни одно или пустой список не вернет найденных совпадений.
  • cache_dir: Место хранения кэшированных файлов, если по умолчанию None в каталоге Keras.

Возвращает

Путь к загруженному файлу


print_summary

keras.utils.print_summary(model, line_length=None, positions=None, print_fn=None)

Печатает резюме модели.

Аргументы

  • model: пример модели Keras.
  • line_length: Общая длина распечатанных строк (например, установите этот параметр, чтобы адаптировать отображение к различным размерам окна терминала).
  • positions: Относительные или абсолютные позиции элементов журнала в каждой строке. Если не предусмотрено, по умолчанию установлено значение [.33, .55, .67, 1.].
  • print_fn: Функция печати для использования. Она будет вызвана в каждой строке сводки. Вы можете установить ее в пользовательскую функцию для захвата сводки строк. По умолчанию она выполняет print (печатает в stdout).

plot_model

keras.utils.plot_model(model, to_file=’model.png’, show_shapes=False, show_layer_names=True, rankdir=’TB’, expand_nested=False, dpi=96)

Преобразует модель Keras в точечный формат и сохраняет в файл.

Аргументы

  • model: пример модели Keras
  • to_file: Имя файла изображения сюжета.
  • show_shapes: отображать ли информацию о форме.
  • show_layer_names: отображать имена слоев.
  • rankdir: аргумент rankdir передаётся в PyDot, строка, указывающая формат графика: ‘TB’ создаёт вертикальный график; ‘LR’ создаёт горизонтальный график.
  • expand_nested: разворачивать ли вложенные модели на кластеры.
  • dpi: точка DPI.

Возвращает

Объект изображения ноутбука Jupyter, если он установлен. Это позволяет отображать графики модели в ноутбуках в режиме реального времени.


multi_gpu_model

keras.utils.multi_gpu_model(model, gpus=None, cpu_merge=True, cpu_relocation=False)

Реплицирует модель на разных GPU.

В частности, эта функция реализует одномашинный мульти-GPU параллелизм данных. Она работает следующим образом:

Разделяет вход(ы) модели на несколько субпартий.

Применить копию модели к каждому субпатчу. Каждая копия модели выполняется на выделенном GPU.

Сосредоточить результаты (на CPU) в одном большом пакете.

Например, если ваш размер batch_size 64 и вы используете gpus=2, то мы разделим входные данные на 2 суб-пакета по 32 сэмпла, обработаем каждый суб-пакет на одном GPU, а затем вернем полный пакет из 64 обработанных сэмплов.

Это приводит к квазилинейному ускорению до 8 GPU.

На данный момент эта функция доступна только с бэкэндом TensorFlow.

Аргументы

  • model: Модель Кераса. Чтобы избежать ошибок OOM, эта модель могла быть построена, например, на процессоре (см. пример использования ниже).
  • gpus: Целое >= 2 или список целых чисел, количество GPU или список идентификаторов GPU, на которых можно создавать реплики модели.
  • cpu_merge: Булевое значение, определяющее, следует ли принудительно устанавливать веса модели для слияния в рамках CPU или нет.
  • cpu_relocation: Булевое значение, определяющее, создавать ли веса модели в рамках CPU. Если модель не определена ни в одном из предыдущих диапазонов устройств, вы все равно можете спасти ее, активировав эту опцию.

Возвращает

Экземпляр модели Keras, который можно использовать так же, как и исходный аргумент модели, но который распределяет свою рабочую нагрузку на несколько GPU.

Примеры

Пример 1 — модели с весами сливаются на процессоре

import tensorflow as tffrom keras.applications import Xceptionfrom keras.utils import multi_gpu_modelimport numpy as np

num_samples = 1000

height = 224

width = 224

num_classes = 1000

# Приведите в пример базовую модель (или «шаблонную» модель).# Мы рекомендуем делать это в области устройств на CPU,# чтобы вес модели размещался в памяти CPU.# Иначе они могут оказаться размещены на GPU, что # усложнит разделение веса..

with tf.device(‘/cpu:0’):

    model = Xception(weights=None,

                     input_shape=(height, width, 3),

                     classes=num_classes)

# Реплицирует модель на 8 GPU.# Это предполагает, что на вашей машине есть 8 доступных GPU.

parallel_model = multi_gpu_model(model, gpus=8)

parallel_model.compile(loss=’categorical_crossentropy’,

                       optimizer=’rmsprop’)

# Генерируем фиктивные данные.

x = np.random.random((num_samples, height, width, 3))

y = np.random.random((num_samples, num_classes))

# Этот вызов «fit» будет распространяться на 8 GPU.# Так как размер пакета 256, каждый GPU будет обрабатывать 32 сэмпла.

parallel_model.fit(x, y, epochs=20, batch_size=256)

# Сохранить модель через шаблонную модель (которая имеет одинаковые веса):

model.save(‘my_model.h5’)

Пример 2 — Обучающие модели слияния весов на процессоре с помощью cpu_relocation

..# Нет необходимости изменять сферу применения прибора для определения модели.:

model = Xception(weights=None, ..)

try:

    parallel_model = multi_gpu_model(model, cpu_relocation=True)

    print(«Training using multiple GPUs..»)except ValueError:

    parallel_model = model

    print(«Training using single GPU or CPU..»)

parallel_model.compile(..)

..

Пример 3 — модели с объединением весов на GPU (рекомендуется для NV-связи)

..# Нет необходимости изменять сферу применения прибора для определения модели.:

model = Xception(weights=None, ..)

try:

    parallel_model = multi_gpu_model(model, cpu_merge=False)

    print(«Training using multiple GPUs..»)except:

    parallel_model = model

    print(«Training using single GPU or CPU..»)

parallel_model.compile(..)

..

По сохранению модели

Для сохранения мульти-GPU модели используйте .save(fname) или .save_weights(fname) с шаблонной моделью (аргумент, который Вы передали multi_gpu_model), а не с моделью, возвращаемой multi_gpu_model.