Keras 3 API 文档 / 实用程序 / Python & NumPy 实用程序

Python & NumPy 实用程序

[来源]

set_random_seed 函数

keras.utils.set_random_seed(seed)

设置所有随机种子(Python、NumPy 和后端框架,例如 TF)。

您可以使用此实用程序使几乎所有 Keras 程序完全确定性。当涉及网络通信(例如参数服务器分布式)时,有一些限制适用,这会产生额外的随机性来源,或者当涉及某些非确定性 cuDNN 操作时。

调用此实用程序等同于以下操作

import random
random.seed(seed)

import numpy as np
np.random.seed(seed)

import tensorflow as tf  # Only if TF is installed
tf.random.set_seed(seed)

import torch  # Only if the backend is 'torch'
torch.manual_seed(seed)

请注意,即使您不使用 TensorFlow 作为后端框架,也会设置 TensorFlow 种子,因为许多工作流利用 tf.data 管道(具有随机洗牌功能)。同样,许多工作流可能会利用 NumPy API。

参数

  • seed: 整数,要使用的随机种子。

[来源]

split_dataset 函数

keras.utils.split_dataset(
    dataset, left_size=None, right_size=None, shuffle=False, seed=None
)

将数据集拆分为左半部分和右半部分(例如,训练/测试)。

参数

  • dataset: 一个 tf.data.Dataset、一个 torch.utils.data.Dataset 对象,或者一个长度相同的数组列表/元组。
  • left_size: 如果是浮点数(在 [0, 1] 范围内),则表示要打包到左侧数据集中的数据比例。如果是整数,则表示要打包到左侧数据集中的样本数量。如果为 None,则默认为 right_size 的补码。默认为 None
  • right_size: 如果是浮点数(在 [0, 1] 范围内),则表示要打包到右侧数据集中的数据比例。如果是整数,则表示要打包到右侧数据集中的样本数量。如果为 None,则默认为 left_size 的补码。默认为 None
  • shuffle: 布尔值,是否在拆分之前对数据进行洗牌。
  • seed: 洗牌的随机种子。

返回

示例

>>> data = np.random.random(size=(1000, 4))
>>> left_ds, right_ds = keras.utils.split_dataset(data, left_size=0.8)
>>> int(left_ds.cardinality())
800
>>> int(right_ds.cardinality())
200

[来源]

pack_x_y_sample_weight 函数

keras.utils.pack_x_y_sample_weight(x, y=None, sample_weight=None)

将用户提供的数据打包成一个元组。

这是一个方便的实用程序,用于将数据打包成 Model.fit() 使用的元组格式。

示例

>>> x = ops.ones((10, 1))
>>> data = pack_x_y_sample_weight(x)
>>> isinstance(data, ops.Tensor)
True
>>> y = ops.ones((10, 1))
>>> data = pack_x_y_sample_weight(x, y)
>>> isinstance(data, tuple)
True
>>> x, y = data

参数

  • x: 传递给 Model 的特征。
  • y: 传递给 Model 的真实目标。
  • sample_weight: 每个元素的样本权重。

返回

Model.fit() 中使用的格式的元组。


[来源]

get_file 函数

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

如果文件尚未在缓存中,则从 URL 下载文件。

默认情况下,url origin 上的文件将下载到缓存目录 ~/.keras 中,放置在缓存子目录 datasets 中,并使用文件名 fname。因此,文件 example.txt 的最终位置将为 ~/.keras/datasets/example.txt.tar.tar.gz.tar.bz.zip 格式的文件也可以解压缩。

传递哈希将验证下载后的文件。命令行程序 shasumsha256sum 可以计算哈希值。

示例

path_to_downloaded_file = get_file(
    origin="https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz",
    extract=True,
)

参数

  • fname: 如果目标是单个文件,则这是您希望使用的本地文件名。如果为 None,将使用 origin 上的文件名。如果下载并解压缩目录存档,则提供的 fname 将用作解压缩目录名(仅当它没有扩展名时)。
  • origin: 文件的原始 URL。
  • untar: 已弃用,支持 extract 参数。布尔值,指示文件是否为应解压缩的 tar 存档。
  • 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"]。None 或空列表将返回未找到匹配项。
  • cache_dir: 存储缓存文件的路径,如果为 None,则默认为 $KERAS_HOME(如果 KERAS_HOME 环境变量已设置)或 ~/.keras/
  • force_download: 如果为 True,则无论缓存状态如何,文件都将始终重新下载。

返回

下载文件的路径。

⚠️ 恶意下载警告 ⚠️

从互联网下载内容存在风险。如果您不信任来源,切勿下载文件/存档。建议您指定 file_hash 参数(如果知道源文件的哈希值),以确保您获得的文件是您期望的文件。


[来源]

Progbar

keras.utils.Progbar(
    target, width=20, verbose=1, interval=0.05, stateful_metrics=None, unit_name="step"
)

显示进度条。

参数

  • target: 预计的总步数,如果未知,则为 None。
  • width: 屏幕上进度条的宽度。
  • verbose: 详细程度模式,0(静默),1(详细),2(半详细)
  • stateful_metrics: 可迭代的字符串名称列表,表示不应随时间平均的指标。此列表中的指标将按原样显示。所有其他指标将在显示之前由进度条进行平均。
  • interval: 最小的视觉进度更新间隔(以秒为单位)。
  • unit_name: 步数计数的显示名称(通常为“step”或“sample”)。

[来源]

PyDataset

keras.utils.PyDataset(workers=1, use_multiprocessing=False, max_queue_size=10)

使用 Python 代码定义并行数据集的基类。

每个 PyDataset 都必须实现 __getitem__()__len__() 方法。如果您想在 epoch 之间修改数据集,还可以实现 on_epoch_end()on_epoch_begin,以便在每个 epoch 开始时调用。__getitem__() 方法应返回一个完整的批次(而不是单个样本),而 __len__ 方法应返回数据集中的批次数量(而不是样本数量)。

参数

  • workers: 在多线程或多进程中使用的 worker 数量。
  • use_multiprocessing: 是否使用 Python 多进程进行并行化。将此设置为 True 意味着您的数据集将在多个派生进程中复制。这对于从并行化中获得计算级别(而不是 I/O 级别)的好处是必要的。但是,只有在您的数据集可以安全地腌制时,才能将其设置为 True
  • max_queue_size: 在多线程或多进程设置中迭代数据集时,在队列中保留的最大批次数量。减少此值以减少数据集的 CPU 内存消耗。默认为 10。

备注

  • PyDataset 是执行多进程的更安全方法。这种结构保证模型在每个 epoch 中仅对每个样本训练一次,而使用 Python 生成器则并非如此。
  • 参数 workersuse_multiprocessingmax_queue_size 用于配置 fit() 如何使用并行化来迭代数据集。它们不是由 PyDataset 类直接使用。当您手动迭代 PyDataset 时,不会应用并行化。

示例

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

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

class CIFAR10PyDataset(keras.utils.PyDataset):

    def __init__(self, x_set, y_set, batch_size, **kwargs):
        super().__init__(**kwargs)
        self.x, self.y = x_set, y_set
        self.batch_size = batch_size

    def __len__(self):
        # Return number of batches.
        return math.ceil(len(self.x) / self.batch_size)

    def __getitem__(self, idx):
        # Return x, y for batch idx.
        low = idx * self.batch_size
        # Cap upper bound at array length; the last batch may be smaller
        # if the total number of items is not a multiple of batch size.
        high = min(low + self.batch_size, len(self.x))
        batch_x = self.x[low:high]
        batch_y = self.y[low:high]

        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(x, num_classes=None)

将类向量(整数)转换为二进制类矩阵。

例如,用于 categorical_crossentropy

参数

  • x: 类值为要转换为矩阵的数组(从 0 到 num_classes - 1 的整数)。
  • num_classes: 类的总数。如果为 None,则将推断为 max(x) + 1。默认为 None

返回

输入的二进制矩阵表示形式,作为 NumPy 数组。类轴放在最后。

示例

>>> a = keras.utils.to_categorical([0, 1, 2, 3], num_classes=4)
>>> print(a)
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
>>> b = np.array([.9, .04, .03, .03,
...               .3, .45, .15, .13,
...               .04, .01, .94, .05,
...               .12, .21, .5, .17],
...               shape=[4, 4])
>>> loss = keras.ops.categorical_crossentropy(a, b)
>>> print(np.around(loss, 5))
[0.10536 0.82807 0.1011  1.77196]
>>> loss = keras.ops.categorical_crossentropy(a, a)
>>> print(np.around(loss, 5))
[0. 0. 0. 0.]

[来源]

normalize 函数

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

规范化数组。

如果输入是 NumPy 数组,则将返回 NumPy 数组。如果是后端张量,则将返回后端张量。

参数

  • x: 要规范化的数组。
  • axis: 沿其规范化的轴。
  • order: 规范化顺序(例如,order=2 表示 L2 范数)。

返回

数组的规范化副本。