tensorflow 图像分类 之四

tensorflow 图像分类 之四

图像分类代码

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 实例列表。预测期间要应用的回调函数列表。
相关推荐
卡奥斯开源社区官方2 小时前
NVIDIA Blackwell架构深度解析:2080亿晶体管如何重构AI算力规则?
人工智能·重构·架构
百锦再3 小时前
第11章 泛型、trait与生命周期
android·网络·人工智能·python·golang·rust·go
数新网络6 小时前
The Life of a Read/Write Query for Apache Iceberg Tables
人工智能·apache·知识图谱
Yangy_Jiaojiao6 小时前
开源视觉-语言-动作(VLA)机器人项目全景图(截至 2025 年)
人工智能·机器人
gorgeous(๑>؂<๑)6 小时前
【ICLR26匿名投稿】OneTrackerV2:统一多模态目标跟踪的“通才”模型
人工智能·机器学习·计算机视觉·目标跟踪
坠星不坠7 小时前
pycharm如何导入ai大语言模型的api-key
人工智能·语言模型·自然语言处理
周杰伦_Jay7 小时前
【智能体(Agent)技术深度解析】从架构到实现细节,核心是实现“感知环境→处理信息→决策行动→影响环境”的闭环
人工智能·机器学习·微服务·架构·golang·数据挖掘
王哈哈^_^7 小时前
【完整源码+数据集】课堂行为数据集,yolo课堂行为检测数据集 2090 张,学生课堂行为识别数据集,目标检测课堂行为识别系统实战教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
Elastic 中国社区官方博客7 小时前
Observability:适用于 PHP 的 OpenTelemetry:EDOT PHP 加入 OpenTelemetry 项目
大数据·开发语言·人工智能·elasticsearch·搜索引擎·全文检索·php