[source]

CustomObjectScope

keras.utils.CustomObjectScope()

提供对_GLOBAL_CUSTOM_OBJECTS所做的更改无法转义的作用域.

with语句中的代码将能够按名称访问自定义对象. 对全局自定义对象的更改将保留在附带的with语句中. 在with语句结束时,全局自定义对象恢复为with语句开始处的状态.

Example

考虑一个自定义对象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)

代替Numpy数组使用的HDF5数据集的表示形式.

Example

x_data = HDF5Matrix('input/file.hdf5', 'data')
model.predict(x_data)

提供startend允许使用数据集的一部分.

可选地,可以给出规格化函数(或lambda). 将在检索到的每个数据切片上调用此方法.

Arguments

  • datapath :字符串,HDF5文件的路径
  • 数据集 :字符串,数据路径中指定的文件中HDF5数据集的名称
  • start :int,指定数据集的所需切片的开始
  • end :int,指定数据集的所需切片的结尾
  • normalizer :检索数据时要调用的函数

Returns

类似数组的HDF5数据集.


[source]

Sequence

keras.utils.Sequence()

适合于数据序列(例如数据集)的基础对象.

每个Sequence必须实现__getitem____len__方法. 如果要在各个时期之间修改数据集,则可以实现on_epoch_end . __getitem__方法应返回完整的批处理.

Notes

Sequence是进行多处理的一种更安全的方法. 这种结构保证了网络在每个时间段的每个样本上只会训练一次,而生成器则不会.

Examples

from skimage.io import imread
from skimage.transform import resize
import numpy as np

# Here, `x_set` is list of path to the images
# and `y_set` are the associated classes.

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.

Arguments

  • y :要转换为矩阵的类向量(从0到num_classes的整数).
  • num_classes :类的总数.
  • dtype :输入期望的数据类型,为字符串( float32float64int32 ...)

Returns

输入的二进制矩阵表示形式. 类轴位于最后.

Example

# Consider an array of 5 labels out of a set of 3 classes {0, 1, 2}:
> labels
array([0, 2, 1, 2, 0])
# `to_categorical` converts this into a matrix with as many
# columns as there are classes. The number of rows
# stays the same.
> 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数组.

Arguments

  • x :要归一化的Numpy数组.
  • axis :标准化的轴.
  • order :归一化顺序(例如L2范数为2).

Returns

数组的标准化副本.


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 origin处的文件下载到cache_dir〜 ~/.keras ,放置在cache_subdir datasets ,并赋予文件名fname . 因此,文件example.txt的最终位置是~/.keras/datasets/example.txt .

也可以提取tar,tar.gz,tar.bz和zip格式的文件. 传递哈希将在下载后验证文件. 命令行程序shasumsha256sum可以计算哈希值.

Arguments

  • fname :文件名. 如果指定了绝对路径/path/to/file.txt则文件将保存在该位置.
  • origin :文件的原始URL.
  • untar :已弃用,而赞成使用" extract". 布尔值,是否应该解压缩文件
  • md5_hash :已弃用, 改为使用" file_hash". 验证文件的md5哈希
  • file_hash :下载后文件的预期哈希字符串. 都支持sha256和md5哈希算法.
  • cache_subdir :保存文件的Keras缓存目录下的子目录. 如果指定了绝对路径/path/to/folder则文件将保存在该位置.
  • hash_algorithm :选择哈希算法以验证文件. 选项是" md5"," sha256"和"自动". 默认的"自动"检测使用中的哈希算法.
  • extract :True尝试将文件提取为存档文件,例如tar或zip.
  • archive_format :尝试提取文件的存档格式. 选项为"自动"," tar"," zip"和"无". " tar"包括tar,tar.gz和tar.bz文件. 默认的"自动"为['tar','zip']. 无或为空列表将不返回任何匹配项.
  • cache_dir :存储缓存文件的位置,如果为None,则默认为Keras目录 .

Returns

下载文件的路径


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

打印模型摘要.

Arguments

  • model :硬模型实例.
  • line_length :印刷线的总长度(例如,设置此项以使显示适应不同的终端窗口尺寸).
  • position :每行中日志元素的相对或绝对位置. 如果未提供,则默认为[.33, .55, .67, 1.] .
  • print_fn :要使用的打印功能. 摘要的每一行都会调用它. 您可以将其设置为自定义函数,以捕获字符串摘要. 它默认为print (打印到标准输出).

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模型转换为点格式并保存到文件.

Arguments

  • 模型 :Keras模型实例
  • to_file :绘图图像的文件名.
  • show_shapes :是否显示形状信息.
  • show_layer_names :是否显示图层名称.
  • rankdir :传递给PyDot的rankdir参数,它是指定绘图格式的字符串:'TB'创建垂直绘图; " LR"创建水平图.
  • expand_nested :是否将嵌套模型扩展为集群.
  • dpi :点DPI.

Returns

如果已安装Jupyter,则为Jupyter笔记本Image对象. 这样可以在笔记本中在线显示模型图.


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个样本.

This induces quasi-linear speedup on up to 8 GPUs.

此功能目前仅适用于TensorFlow后端.

Arguments

  • model :Keras模型实例. 为了避免OOM错误,可以例如在CPU上构建此模型(请参见下面的用法示例).
  • gpus :整数> = 2或整数列表,GPU数量或在其上创建模型副本的GPU ID列表.
  • cpu_merge :一个布尔值,用于标识是否在CPU范围内强制合并模型权重.
  • cpu_relocation :一个布尔值,用于标识是否在CPU范围内创建模型的权重. 如果未在任何先前的设备范围内定义模型,您仍然可以通过激活此选项来对其进行恢复.

Returns

Keras Model实例可以像初始model参数一样使用,但是可以将其工作负载分布在多个GPU上.

Examples

示例1-具有权重的训练模型在CPU上合并

import tensorflow as tf
from keras.applications import Xception
from keras.utils import multi_gpu_model
import numpy as np

num_samples = 1000
height = 224
width = 224
num_classes = 1000

# Instantiate the base model (or "template" model).
# We recommend doing this with under a CPU device scope,
# so that the model's weights are hosted on CPU memory.
# Otherwise they may end up hosted on a GPU, which would
# complicate weight sharing.
with tf.device('/cpu:0'):
    model = Xception(weights=None,
                     input_shape=(height, width, 3),
                     classes=num_classes)

# Replicates the model on 8 GPUs.
# This assumes that your machine has 8 available GPUs.
parallel_model = multi_gpu_model(model, gpus=8)
parallel_model.compile(loss='categorical_crossentropy',
                       optimizer='rmsprop')

# Generate dummy data.
x = np.random.random((num_samples, height, width, 3))
y = np.random.random((num_samples, num_classes))

# This `fit` call will be distributed on 8 GPUs.
# Since the batch size is 256, each GPU will process 32 samples.
parallel_model.fit(x, y, epochs=20, batch_size=256)

# Save model via the template model (which shares the same weights):
model.save('my_model.h5')

示例2-使用cpu_relocation在CPU上合并具有权重的训练模型

..
# Not needed to change the device scope for model definition:
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-link)

..
# Not needed to change the device scope for model definition:
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(..)
..

关于模型保存

要保存multi-gpu模型,请对模板模型(传递给multi_gpu_model的参数.save(fname)使用.save(fname).save_weights(fname) ),而不要使用multi_gpu_model返回的模型.