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。
参数
split_dataset 函数keras.utils.split_dataset(
dataset,
left_size=None,
right_size=None,
shuffle=False,
seed=None,
preferred_backend=None,
)
将数据集拆分为左半部分和右半部分(例如,训练/测试)。
参数
tf.data.Dataset、torch.utils.data.Dataset 对象或长度相同的数组列表/元组。[0, 1]),则表示左数据集中的数据比例。如果为整数,则表示左数据集中要包含的样本数。如果为 None,则默认为 right_size 的补集。默认为 None。[0, 1]),则表示右数据集中的数据比例。如果为整数,则表示右数据集中要包含的样本数。如果为 None,则默认为 left_size 的补集。默认为 None。None,则从 dataset 的类型推断后端 - 如果 dataset 是 tf.data.Dataset,则使用“tensorflow”后端;如果 dataset 是 torch.utils.data.Dataset,则使用“torch”后端;如果 dataset 是列表/元组/np.array,则使用当前的 Keras 后端。默认为 None。返回
包含两个数据集对象的元组,分别为左拆分和右拆分。返回对象的确切类型取决于 preferred_backend。例如,对于“tensorflow”后端,将返回 tf.data.Dataset 对象。对于“torch”后端,将返回 torch.utils.data.Dataset 对象。
示例
>>> data = np.random.random(size=(1000, 4))
>>> left_ds, right_ds = keras.utils.split_dataset(data, left_size=0.8)
>>> # For a tf.data.Dataset, you can use .cardinality()
>>> # >>> int(left_ds.cardinality())
>>> # 800
>>> # For a torch.utils.data.Dataset, you can use len()
>>> # >>> len(left_ds)
>>> # 800
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
参数
Model 的特征。Model 的真实目标。返回
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 格式的文件也可以解压。
提供哈希值将验证下载后的文件。可以使用命令行程序 shasum 和 sha256sum 计算哈希值。
示例
path_to_downloaded_file = get_file(
origin="https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz",
extract=True
)
参数
None,将使用 origin 处的文件名。如果下载并解压一个目录存档,提供的 fname 将用作解压目录名(仅当其没有扩展名时)。extract 参数。布尔值,表示文件是否为应解压的 tar 存档。file_hash 参数。文件的 md5 哈希值,用于文件完整性验证。"/path/to/folder",则文件将保存在该位置。"md5'、"sha256' 和 "auto'。默认的 "auto" 会检测正在使用的哈希算法。True,则解压存档。仅适用于压缩存档文件,如 tar 或 zip。"auto'、"tar'、"zip' 和 None。"tar" 包括 tar、tar.gz 和 tar.bz 文件。默认的 "auto" 对应于 ["tar", "zip"]。None 或空列表将表示未找到匹配项。$KERAS_HOME(如果设置了 KERAS_HOME 环境变量)或 ~/.keras/。True,则无论缓存状态如何,文件都将始终重新下载。返回
下载文件的路径。
⚠️ 关于恶意下载的警告 ⚠️
从互联网下载内容存在风险。切勿下载您不信任来源的文件/存档。我们建议您指定 file_hash 参数(如果源文件的哈希值已知),以确保您获得的文件是您期望的文件。
Progbar 类keras.utils.Progbar(
target, width=20, verbose=1, interval=0.05, stateful_metrics=None, unit_name="step"
)
显示进度条。
参数
PyDataset 类keras.utils.PyDataset(workers=1, use_multiprocessing=False, max_queue_size=10)
使用 Python 代码定义并行数据集的基类。
每个 PyDataset 都必须实现 __getitem__() 和 __len__() 方法。如果您想在每个 epoch 之间修改数据集,可以另外实现 on_epoch_end(),或者在每个 epoch 开始时调用 on_epoch_begin。__getitem__() 方法应返回一个完整的批次(而不是单个样本),而 __len__ 方法应返回数据集中批次的数量(而不是样本的数量)。
参数
True 意味着您的数据集将在多个派生的进程中复制。只有当您的数据集可以安全地进行 pickling 时,才能将其设置为 True。但是,它只能设置为 True,前提是您的数据集可以安全地进行 pickling。注意事项
PyDataset 是进行多进程处理的一种更安全的方式。这种结构保证了模型在每个 epoch 中只对每个样本训练一次,而 Python 生成器则不是这种情况。workers、use_multiprocessing 和 max_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。
参数
num_classes - 1)。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]).reshape(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 数组。如果它是后端张量,则返回后端张量。
参数
order=2 表示 L2 范数)。返回
归一化后的数组副本。