Keras 2 API 文档 / 工具函数 / Python 和 NumPy 工具函数

Python 和 NumPy 工具函数

[源]

set_random_seed 函数

tf_keras.utils.set_random_seed(seed)

设置程序的所有随机种子(Python、NumPy 和 TensorFlow)。

您可以使用此工具函数使几乎所有 TF-Keras 程序完全确定性。当涉及网络通信(例如参数服务器分发)时,可能会产生额外的随机性源,或者当涉及某些非确定性 cuDNN 操作时,会存在一些限制。

调用此工具函数等效于以下操作

import random
import numpy as np
import tensorflow as tf
random.seed(seed)
np.random.seed(seed)
tf.random.set_seed(seed)

参数

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

[源]

split_dataset 函数

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

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

参数

  • dataset: 一个 tf.data.Dataset 对象,或一个长度相同的数组列表/元组。
  • left_size: 如果是浮点数(范围在 [0, 1]),则表示要放入左半部分数据集的数据比例。如果是整数,则表示要放入左半部分数据集的样本数量。如果为 None,则使用 right_size 的补集。默认为 None
  • right_size: 如果是浮点数(范围在 [0, 1]),则表示要放入右半部分数据集的数据比例。如果是整数,则表示要放入右半部分数据集的样本数量。如果为 None,则使用 left_size 的补集。默认为 None
  • shuffle: 布尔值,是否在分割数据前对其进行混洗。
  • seed: 用于混洗的随机种子。

返回值

  • 一个包含两个 tf.data.Dataset 对象的元组:左半部分和右半部分。

示例

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

[源]

get_file 函数

tf_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,
)

从 URL 下载文件,如果文件不在缓存中。

默认情况下,URL origin 指定的文件会下载到缓存目录 ~/.keras,放在子目录 datasets 中,并命名为 fname。因此,文件 example.txt 的最终位置将是 ~/.keras/datasets/example.txt

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

示例

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

参数

  • fname: 文件名。如果指定了绝对路径 /path/to/file.txt,文件将保存在该位置。如果为 None,将使用 origin 中的文件名。
  • origin: 文件的原始 URL。
  • untar: 已废弃,请改用 extract 参数。布尔值,文件是否应该解压
  • md5_hash: 已废弃,请改用 file_hash 参数。文件的 md5 哈希值,用于验证
  • file_hash: 下载后文件的预期哈希字符串。支持 sha256 和 md5 哈希算法。
  • cache_subdir: 文件保存在 TF-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/

返回值

下载文件的路径。

⚠️ 关于恶意下载的警告 ⚠️

从互联网下载任何东西都带有风险。如果您不信任来源,请永远不要下载文件/归档文件。我们建议您指定 file_hash 参数(如果已知源文件的哈希值),以确保您获得的文件是您所期望的。


[源]

Progbar

tf_keras.utils.Progbar(
    target, width=30, 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")。

[源]

Sequence

tf_keras.utils.Sequence()

用于拟合数据序列(如数据集)的基类对象。

每个 Sequence 都必须实现 __getitem____len__ 方法。如果您想在 epoch 之间修改数据集,可以实现 on_epoch_end 方法。__getitem__ 方法应该返回一个完整的批次。

注意

Sequence 是一种更安全的多进程处理方式。这种结构保证了网络在每个 epoch 中只对每个样本训练一次,这与生成器不同。

示例

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 CIFAR10Sequence(tf.keras.utils.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 math.ceil(len(self.x) / self.batch_size)

    def __getitem__(self, 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 函数

tf_keras.utils.to_categorical(y, num_classes=None, dtype="float32")

将类别向量(整数)转换为二元类别矩阵。

例如,用于 categorical_crossentropy

参数

  • y: 类似数组的对象,包含要转换为矩阵的类别值(从 0 到 num_classes - 1 的整数)。
  • num_classes: 类别总数。如果为 None,则推断为 max(y) + 1
  • dtype: 输入期望的数据类型。默认值: 'float32'

返回值

输入的二元矩阵表示,作为 NumPy 数组。类别轴放在最后。

示例

>>> a = tf.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 = tf.constant([.9, .04, .03, .03,
...                  .3, .45, .15, .13,
...                  .04, .01, .94, .05,
...                  .12, .21, .5, .17],
...                 shape=[4, 4])
>>> loss = tf.keras.backend.categorical_crossentropy(a, b)
>>> print(np.around(loss, 5))
[0.10536 0.82807 0.1011  1.77196]
>>> loss = tf.keras.backend.categorical_crossentropy(a, a)
>>> print(np.around(loss, 5))
[0. 0. 0. 0.]

[源]

to_ordinal 函数

tf_keras.utils.to_ordinal(y, num_classes=None, dtype="float32")

将类别向量(整数)转换为序数回归矩阵。

此工具函数将类别向量编码为序数回归/分类矩阵,其中每行表示一个样本,该样本的排名由该行中 1 的数量表示。

参数

  • y: 类似数组的对象,包含要转换为矩阵的类别值(从 0 到 num_classes - 1 的整数)。
  • num_classes: 类别总数。如果为 None,则推断为 max(y) + 1
  • dtype: 输入期望的数据类型。默认值: 'float32'

返回值

输入的序数回归矩阵表示,作为 NumPy 数组。类别轴放在最后。

示例

>>> a = tf.keras.utils.to_ordinal([0, 1, 2, 3], num_classes=4)
>>> print(a)
[[0. 0. 0.]
 [1. 0. 0.]
 [1. 1. 0.]
 [1. 1. 1.]]

[源]

normalize 函数

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

归一化 NumPy 数组。

参数

  • x: 要归一化的 NumPy 数组。
  • axis: 沿其进行归一化的轴。
  • order: 归一化阶数(例如,L2 范数的 order=2)。

返回值

数组的归一化副本。