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
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.
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.