tensorflow 图像分类 之四
tensorflow 图像分类 之四
- 图像分类代码
- API 说明
- tf.keras.utils.get_file
- tf.keras.utils.image_dataset_from_directory
- tf.data.Dataset
- 模型
- 产生模型
- 函数式API
- 使用Sequential类
- 产生Model的子类
- 编译模型
- 训练模型
- 评估和预测
图像分类代码
API 说明
tf.keras.utils.get_file
tf.keras.utils.image_dataset_from_directory
tf.data.Dataset
模型
产生模型
函数式API
使用Sequential类
产生Model的子类
编译模型
训练模型
训练模型达到固定的迭代次数(数据集迭代次数)。
fit(x=None,y=None,batch_size=None,epochs=1,verbose='auto',callbacks=None,validation_split=0.0,validation_data=None,shuffle=True,class_weight=None,sample_weight=None,initial_epoch=0,steps_per_epoch=None,validation_steps=None,validation_batch_size=None,validation_freq=1
)
对于类似迭代器的输入,Keras 会进行解包处理:一种常见的模式是将类似迭代器的对象(例如 tf.data.Dataset 或 keras.utils.PyDataset)传递给 fit()函数,该函数实际上不仅会返回特征 (x),还会选择性地返回目标值 (y) 和样本权重 (sample_weight)。Keras 要求此类类似迭代器的输出必须明确无误。迭代器应返回长度为 1、2 或 3 的元组,其中可选的第二个和第三个元素分别用作 y 和 sample_weight。任何其他类型的输入都将被包装在一个长度为 1 的元组中,实际上将所有内容都视为 x。当返回字典时,它们仍然应该遵循顶层元组结构,例如 ({“x0”: x0, “x1”: x1}, y)。Keras 不会尝试从单个字典的键中分离特征、目标值和权重。值得注意的是,命名元组 (namedtuple) 是 Keras 不支持的数据类型。原因在于它同时表现得像有序数据类型(元组)和映射数据类型(字典)。因此,对于形如 namedtuple(“example_tuple”, [“y”, “x”])的命名元组,在解释其值时是否需要反转元素顺序是不确定的。更糟糕的是形如namedtuple(“other_tuple”, [“x”, “y”, “z”])的元组,我们无法确定该元组是应该被解包为x、y和sample_weight,还是应该作为一个单独的元素传递给x。
| 参数 | 意义 |
|---|---|
| x | 输入数据。它可以是:NumPy 数组(或类数组对象),或数组列表(如果模型有多个输入)。张量,或张量列表(如果模型有多个输入)。一个字典,将输入名称映射到相应的数组/张量(如果模型有命名输入)。一个 tf.data.Dataset 对象。应返回一个元组,包含 (inputs, targets) 或 (inputs, targets, sample_weights)。一个 keras.utils.PyDataset 对象,返回 (inputs, targets) 或 (inputs, targets, sample_weights)。 |
| y | 目标数据。与输入数据 x 一样,它可以是 NumPy 数组或后端原生张量。如果 x 是数据集、生成器或 keras.utils.PyDataset 实例,则不应指定 y(因为目标将从 x 中获取)。 |
| batch_size | 整数或 None。每次梯度更新的样本数。如果未指定,batch_size 将默认为 32。如果您的数据是数据集、生成器或 keras.utils.PyDataset 实例的形式,则不要指定 batch_size(因为它们会生成批次)。 |
| epochs | 整数。模型训练的轮数。一个轮次是指对所提供的所有 x 和 y 数据进行一次迭代(除非 steps_per_epoch 标志设置为除 None 以外的值)。请注意,结合 initial_epoch 参数,epochs 应理解为“最终轮次”。模型的训练轮数并非 epochs 指定的轮次,而只是训练到索引为 epochs 的轮次为止。 |
| verbose | “auto”、0、1 或 2。详细程度模式。0 = 静默模式,1 = 显示进度条,2 = 每个周期输出一行。“auto”在大多数情况下默认为 1。请注意,当日志记录到文件时,进度条的实用性不高,因此在非交互式运行(例如,在生产环境中)时,建议使用 verbose=2。默认值为“auto”。 |
| callbacks | keras.callbacks.Callback 实例列表。训练期间要应用的回调列表。参见 keras.callbacks。注意 keras.callbacks.ProgbarLogger 和 keras.callbacks.History 回调会自动创建,无需传递给 model.fit()。keras.callbacks.ProgbarLogger 是否创建取决于 model.fit() 中的 verbose 参数。 |
| validation_split | 介于 0 和 1 之间的浮点数。用于验证的训练数据比例。模型会将这部分训练数据单独提取出来,不进行训练,并在每个 epoch 结束时,使用这部分数据评估损失和所有模型指标。验证数据选自提供的 x 和 y 数据集中的最后几个样本(打乱顺序之前)。当 x 是数据集、生成器或 keras.utils.PyDataset 实例时,不支持此参数。如果同时提供了 validation_data 和 validation_split,则 validation_data 将覆盖 validation_split。 |
| validation_data | 用于在每个 epoch 结束时评估损失和任何模型指标的数据。模型不会使用此数据进行训练。因此,请注意,使用 validation_split 或 validation_data 提供的验证损失不受噪声和 dropout 等正则化层的影响。validation_data 将覆盖 validation_split。它可以是:NumPy 数组或张量的元组 (x_val, y_val)。NumPy 数组的元组 (x_val, y_val, val_sample_weights)。tf.data.Dataset。返回 (inputs, targets)或 (inputs, targets, sample_weights)的 Python 生成器或 keras.utils.PyDataset。 |
| shuffle | 布尔值,指示是否在每个 epoch 之前打乱训练数据。当 x 为生成器或 tf.data.Dataset 时,此参数将被忽略。 |
| class_weight | 可选的字典,用于将类别索引(整数)映射到权重(浮点数)值,以对损失函数进行加权(仅在训练期间)。这可用于指示模型“更加关注”来自代表性不足类别的样本。当指定 class_weight且目标排名为 2 或更大时,y 必须进行独热编码,或者对于稀疏类别标签,必须显式地包含一个最终维度为 1 的值。 |
| sample_weight | 用于训练样本权重的可选 NumPy 数组,用于对损失函数进行加权(仅在训练期间)。您可以传递一个与输入样本长度相同的扁平(一维)NumPy 数组(权重与样本一一对应),或者,对于时间序列数据,您可以传递一个形状为 (samples, sequence_length) 的二维数组,以便为每个样本的每个时间步应用不同的权重。当 x 是数据集、生成器或 keras.utils.PyDataset 实例时,不支持此参数,请将 sample_weights 作为 x 的第三个元素提供。请注意,样本加权不适用于通过 compile() 中的 metrics 参数指定的指标。要将样本加权应用于您的指标,您可以改为通过 compile() 中的 weighted_metrics 参数指定它们。 |
| initial_epoch | 整数。开始训练的 Epoch(用于恢复之前的训练运行)。 |
| steps_per_epoch | 整数或 None。在声明一个 epoch 结束并开始下一个 epoch 之前,需要执行的总步数(样本批次数)。当使用后端原生张量等输入张量进行训练时,默认值 None 等于数据集中的样本数除以批次大小,如果无法确定批次大小,则为 1。如果 x 是 tf.data.Dataset 类型,且 steps_per_epoch 为 None,则 epoch 将运行直到输入数据集被处理完毕。传递无限重复的数据集时,必须指定 steps_per_epoch 参数。如果 steps_per_epoch=-1,则使用无限重复的数据集将无限期地进行训练。 |
| validation_steps | 仅当提供了validation_data时才相关。此参数指定在每个 epoch 结束时进行验证之前要抽取的总步数(样本批次)。如果validation_steps为None,则验证将一直运行,直到validation_data数据集被用尽。如果数据集无限重复,则会陷入无限循环。如果指定了validation_steps并且只使用部分数据集,则每次 epoch 都会从数据集的开头重新开始评估。这确保每次都使用相同的验证样本。 |
| validation_batch_size | 整数或 None。每个验证批次的样本数。如果未指定,则默认为 batch_size。如果您的数据是数据集或 keras.utils.PyDataset 实例的形式(因为它们会生成批次),则不要指定 validation_batch_size。 |
| validation_freq | 仅当提供验证数据时才相关。指定在执行新的验证运行之前要运行多少个训练轮次,例如,validation_freq=2 每 2 个轮次运行一次验证。 |
评估和预测
predict(x, batch_size=None, verbose='auto', steps=None, callbacks=None
)
为输入样本生成输出预测。
计算以批次形式进行。此方法专为批量处理大量输入而设计。它不适用于循环遍历数据并一次处理少量输入的情况。
对于适合一个批次的少量输入,可直接使用__call__()以加快执行速度,例如model(x),或者如果您有像 BatchNormalization 这样在推理过程中行为不同的层,则可以使用model(x, training=False)。
| 参数 | 意义 |
|---|---|
| x | 输入样本。它可以是:NumPy 数组(或类数组),或数组列表(如果模型有多个输入)。张量,或张量列表(如果模型有多个输入)。tf.data.Dataset。keras.utils.PyDataset 实例。 |
| batch_size | 整数或 None。每批次的样本数。如果未指定,batch_size 将默认为 32。如果您的数据是数据集、生成器或 keras.utils.PyDataset 实例的形式,则不要指定 batch_size(因为它们会生成批次)。 |
| verbose | “auto”、0、1 或 2。详细程度模式。0 = 静默模式,1 = 进度条模式,2 = 单行模式。“auto”在大多数情况下默认为 1。请注意,当日志记录到文件时,进度条模式的实用性不高,因此在非交互式运行(例如在生产环境中)时,建议使用 verbose=2。默认值为“auto”。 |
| steps | 预测轮次结束前的总步数(样本批次数)。默认值为 None,此参数将被忽略。如果 x 是 tf.data.Dataset 类型且 steps 为 None,则 predict() 函数将一直运行,直到输入数据集被处理完毕。 |
| callbacks | keras.callbacks.Callback 实例列表。预测期间要应用的回调函数列表。 |
