Keras 3 API 文档 / 模型 API / 模型训练API

模型训练API

[source]

compile method

Model.compile(
    optimizer="rmsprop",
    loss=None,
    loss_weights=None,
    metrics=None,
    weighted_metrics=None,
    run_eagerly=False,
    steps_per_execution=1,
    jit_compile="auto",
    auto_scale_loss=True,
)

配置模型以进行训练.

示例:

model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=1e-3),
    loss=keras.losses.BinaryCrossentropy(),
    metrics=[
        keras.metrics.BinaryAccuracy(),
        keras.metrics.FalseNegatives(),
    ],
)

参数: optimizer:字符串(优化器名称)或优化器实例.参见 keras.optimizers. loss:损失函数.可以是字符串(损失函数名称),或 keras.losses.Loss 实例.参见 keras.losses.损失函数是任何具有签名 loss = fn(y_true, y_pred) 的可调用对象,其中 y_true 是真实值,y_pred 是模型的预测值. y_true 应具有形状 (batch_size, d0, .. dN)(除非在稀疏损失函数如稀疏分类交叉熵的情况下,期望整数数组的形状为 (batch_size, d0, .. dN-1)). y_pred 应具有形状 (batch_size, d0, .. dN). 损失函数应返回一个浮点张量. loss_weights:可选的标量系数(Python 浮点数)列表或字典,用于加权不同模型输出的损失贡献.模型将最小化的损失值将是所有单个损失的加权和,由 loss_weights 系数加权.如果是一个列表,预期与模型的输出有一对一的映射.如果是一个字典,预期映射输出名称(字符串)到标量系数. metrics:模型在训练和测试期间要评估的指标列表.每个指标可以是字符串(内置函数名称)、函数或 keras.metrics.Metric 实例.参见 keras.metrics.通常你会使用 metrics=['accuracy'].函数是任何具有签名 result = fn(y_true, _pred) 的可调用对象.要为多输出模型的不同输出指定不同的指标,你也可以传递一个字典,例如 metrics={'a':'accuracy', 'b':['accuracy', 'mse']}.你也可以传递一个列表来为每个输出指定一个指标或一组指标,例如 metrics=[['accuracy'], ['accuracy', 'mse']]metrics=['accuracy', ['accuracy', 'mse']].当你传递字符串 'accuracy' 或 'acc' 时,我们会根据目标和模型输出的形状将其转换为 keras.metrics.BinaryAccuracykeras.metrics.CategoricalAccuracykeras.metrics.SparseCategoricalAccuracy 之一.类似的转换也适用于字符串 "crossentropy""ce". 这里传递的指标在不应用样本权重的情况下进行评估;如果你希望应用样本权重,可以通过 weighted_metrics 参数指定你的指标. weighted_metrics:在训练和测试期间要评估并由 sample_weightclass_weight 加权的指标列表. run_eagerly:布尔值.如果为 True,此模型的前向传播将永远不会被编译.建议在训练时将其保留为 False(以获得最佳性能),并在调试时设置为 True. steps_per_execution:整数.每次编译函数调用期间运行的批次数量.在一个编译函数调用中运行多个批次可以大大提高在 TPU 或具有较大 Python 开销的小模型上的性能.最多,每次执行将运行一个完整周期.如果传递的数字大于周期的尺寸,执行将被截断为周期的尺寸.请注意,如果 steps_per_execution 设置为 N,Callback.on_batch_beginCallback.on_batch_end 方法将仅每 N 批次调用一次(即在每次编译函数执行之前/之后). 不支持 PyTorch 后端. jit_compile:布尔值或 "auto".编译模型时是否使用 XLA 编译.对于 jaxtensorflow 后端,jit_compile="auto" 在模型支持时启用 XLA 编译,否则禁用.对于 torch 后端,"auto" 将默认为急切执行,jit_compile=True 将使用 torch.compile"inductor" 后端运行. auto_scale_loss:布尔值.如果为 True 且模型数据类型策略为 "mixed_float16",传递的优化器将自动包装在 LossScaleOptimizer 中,该优化器将动态缩放损失以防止下溢.


[source]

fit method

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

训练模型固定的迭代次数(数据集迭代).

参数: x: 输入数据.可以是以下类型: - 一个NumPy数组(或类数组),或数组的列表 (如果模型有多个输入). - 一个张量,或张量的列表 (如果模型有多个输入). - 一个映射输入名称到相应数组/张量的字典, 如果模型有命名输入. - 一个tf.data.Dataset.应返回一个元组 要么是(输入, 目标),要么是 (输入, 目标, 样本权重). - 一个返回(输入, 目标)(输入, 目标, 样本权重)keras.utils.PyDataset. y: 目标数据.像输入数据x一样, 它可以是NumPy数组或后端原生张量. 如果x是数据集、生成器, 或keras.utils.PyDataset实例,y不应 指定(因为目标将从x获得). batch_size: 整数或None. 每次梯度更新使用的样本数. 如果未指定,batch_size将默认为32. 如果你的数据是数据集、生成器或keras.utils.PyDataset 实例的形式,不要指定batch_size. epochs: 整数.训练模型的迭代次数. 一个迭代是整个xy 数据提供的迭代 (除非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.ProgbarLoggerkeras.callbacks.History回调是自动创建的, 不需要传递给model.fit(). keras.callbacks.ProgbarLogger是根据model.fit()中的verbose参数创建的. validation_split: 0到1之间的浮点数. 用作验证数据部分的训练数据. 模型将分离这部分训练数据, 不会在其上训练,并且将在每个迭代结束时评估 损失和任何模型指标 在这部分数据上. 验证数据是从提供的xy数据中最后选择的样本,在打乱之前.这个 参数在x是数据集、生成器或 keras.utils.PyDataset实例时不支持. 如果同时提供validation_datavalidation_split, validation_data将覆盖validation_split. validation_data: 在每个迭代结束时评估 损失和任何模型指标的数据. 模型不会在此数据上训练.因此,注意 使用validation_splitvalidation_data提供的数据的验证损失不受 噪声和dropout等正则化层的影响. validation_data将覆盖validation_split. 它可以是: - 一个元组(x_val, y_val)的NumPy数组或张量. - 一个元组(x_val, y_val, val_sample_weights)的NumPy 数组. - 一个tf.data.Dataset. - 一个Python生成器或keras.utils.PyDataset返回 (输入, 目标)(输入, 目标, 样本权重). shuffle: 布尔值,是否在每个迭代之前打乱训练数据.这个参数在x是生成器或tf.data.Dataset时被忽略. class_weight: 可选的类索引(整数)到权重(浮点数)值的字典,用于在训练期间加权损失函数. 这可以用来告诉模型 "更多关注”来自 代表性不足的类的样本.当class_weight指定 并且目标的秩为2或更大时,y必须 是one-hot编码的,或者稀疏类标签必须 包含明确的最终维度1. sample_weight: 用于训练样本的权重可选NumPy数组,用于在训练期间加权损失函数.你可以传递一个扁平的(1D) NumPy数组,长度与输入样本相同 (1:1映射权重和样本之间), 或者在时间数据的情况下, 你可以传递一个形状为 (样本, 序列长度)的2D数组, 为每个样本的每个时间步应用不同的权重. 这个参数在x是数据集、生成器或 keras.utils.PyDataset实例时不支持,而是提供 sample_weights作为x的第三个元素. 注意,样本加权不适用于通过compile()中的metrics参数指定的指标.要应用样本 加权到你的指标,你可以通过 compile()中的weighted_metrics指定它们. initial_epoch: 整数. 开始训练的迭代 (用于恢复之前的训练运行). steps_per_epoch: 整数或None. 在声明一个迭代完成并开始下一个迭代之前 的总步数(样本批次).当使用输入张量如 后端原生张量时,默认的None等于 数据集中的样本数除以 批次大小,或者如果无法确定则为1.如果xtf.data.Dataset,并且steps_per_epochNone,迭代将运行直到输入数据集耗尽.当传递一个无限重复的数据集时,你必须 指定steps_per_epoch参数.如果 steps_per_epoch=-1,训练将无限期地运行,使用一个无限重复的数据集. validation_steps: 仅在提供validation_data时相关. 在每次迭代结束时执行验证之前停止的总步数(样本批次).如果validation_stepsNone, 验证将运行直到validation_data数据集耗尽.在无限重复数据集的情况下, 它将进入无限循环.如果validation_steps是 指定并且只消耗部分数据集,评估将在每个迭代开始时从数据集的开始重新开始.这确保了每次使用的验证样本是相同的. validation_batch_size: 整数或None. 每个验证批次的样本数. 如果未指定,将默认为batch_size. 如果你的数据是数据集或keras.utils.PyDataset 实例的形式,不要指定validation_batch_size. validation_freq: 仅在提供验证数据时相关. 指定在执行新的验证运行之前运行的训练迭代次数, 例如validation_freq=2每2个迭代运行一次验证.

迭代器类输入的解包行为: 一个常见的模式是传递一个迭代器类对象,如 tf.data.Datasetkeras.utils.PyDatasetfit(), 这将不仅产生特征(x) 而且可选地产生目标(y)和样本权重(sample_weight). Keras要求这种迭代器类的输出是 明确的.迭代器应返回一个长度为1、2或3的元组,可选的第二个和第三个元素 将分别用于ysample_weight. 提供的任何其他类型将被包装在 一个长度为一的元组中,有效地将所有内容视为x.当 产生字典时,它们仍应遵循顶层元组 结构, 例如({"x0": x0, "x1": x1}, y).Keras不会尝试从单个字典的键中分离 特征、目标和权重. 一个不支持的数据类型是namedtuple.原因是 它既表现为有序数据类型(元组)又表现为映射 数据类型(字典).所以给定一个形式为: namedtuple("example_tuple", ["y", "x"]) 的namedtuple,不清楚是否应该反转元素的顺序 当解释值时.更糟糕的是形式为: namedtuple("other_tuple", ["x", "y", "z"]) 的元组,不清楚元组是否打算被解包 到xysample_weight还是作为单个元素传递到x.

返回: 一个History对象.其History.history属性是 训练损失值和指标值 在连续迭代中的记录,以及验证损失值 和验证指标值(如果适用).


[source]

evaluate method

Model.evaluate(
    x=None,
    y=None,
    batch_size=None,
    verbose="auto",
    sample_weight=None,
    steps=None,
    callbacks=None,
    return_dict=False,
    **kwargs
)

返回模型在测试模式下的损失值和指标值.

计算以批次进行(参见 batch_size 参数).

参数: x: 输入数据.可以是以下类型: - 一个 NumPy 数组(或类数组),或数组的列表 (如果模型有多个输入). - 一个张量,或张量的列表 (如果模型有多个输入). - 一个字典,将输入名称映射到相应的数组/张量, 如果模型有命名输入. - 一个 tf.data.Dataset.应返回一个元组 要么是 (inputs, targets) 要么是 (inputs, targets, sample_weights). - 一个生成器或 keras.utils.PyDataset 返回 (inputs, targets)(inputs, targets, sample_weights). y: 目标数据.与输入数据 x 类似,它可以是 NumPy 数组或后端原生张量. 如果 x 是一个 tf.data.Datasetkeras.utils.PyDataset 实例,y 不应指定 (因为目标将从迭代器/数据集中获取). batch_size: 整数或 None.每批次计算的样本数.如果未指定,batch_size 将默认为 32.如果你的数据是以 数据集、生成器或 keras.utils.PyDataset 实例的形式,不要指定 batch_size (因为它们会生成批次). verbose: "auto", 0, 1, 或 2.详细模式. 0 = 静默, 1 = 进度条, 2 = 单行. "auto" 在大多数情况下变为 1. 注意,进度条在记录到文件时不是 特别有用,因此建议在非交互运行时 (例如在生产环境中)使用 verbose=2.默认为 "auto". sample_weight: 可选的测试样本权重 NumPy 数组, 用于加权损失函数.你可以传递一个扁平的 (1D)NumPy 数组,长度与输入样本相同 (权重与样本之间 1:1 映射),或者在时序数据的情况下, 你可以传递一个形状为 (samples, sequence_length) 的 2D 数组, 为每个样本的每个时间步应用不同的权重.当 x 是数据集时,不支持此参数,而是将样本权重作为 x 的第三个元素传递. steps: 整数或 None.在声明评估轮次完成之前的总步数(样本批次). 如果 x 是一个 tf.data.Dataset 并且 stepsNone,评估将运行直到数据集 耗尽. callbacks: keras.callbacks.Callback 实例的列表. 在评估期间应用的回调列表. return_dict: 如果为 True,损失和指标结果将作为字典返回, 每个键是指标的名称. 如果为 False,它们将作为列表返回.

返回: 标量测试损失(如果模型有一个输出且没有指标) 或标量列表(如果模型有多个输出 和/或指标).属性 model.metrics_names 将给出 标量输出的显示标签.


[source]

predict method

Model.predict(x, batch_size=None, verbose="auto", steps=None, callbacks=None)

生成输入样本的输出预测.

计算是以批处理方式进行的.此方法设计用于批量处理大量输入.它不适用于在循环中迭代数据并一次处理少量输入的情况.

对于适合一批的小量输入,直接使用 __call__() 以获得更快的执行速度,例如,model(x),或者如果你有诸如 BatchNormalization 这样的层在推理过程中行为不同,可以使用 model(x, training=False).

注意:有关 Model 方法 predict()__call__() 之间差异的更多详细信息,请参见 此常见问题解答条目.

参数: 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 时忽略. 如果 xtf.data.DatasetstepsNone, predict() 将运行直到输入数据集耗尽. callbacks: keras.callbacks.Callback 实例的列表. 在预测期间应用的回调列表.

返回: NumPy 数组形式的预测结果.


[source]

train_on_batch method

Model.train_on_batch(
    x, y=None, sample_weight=None, class_weight=None, return_dict=False
)

运行单个梯度更新在一个单批次的数据上.

参数: x: 输入数据.必须是类数组. y: 目标数据.必须是类数组. sample_weight: 可选的与x长度相同的数组,包含 应用于模型每个样本损失的权重. 在处理时间序列数据的情况下,可以传递一个2D数组 形状为(样本数, 序列长度),以对每个样本的每个时间步应用不同的 权重. class_weight: 可选的字典,映射类索引(整数) 到应用于模型损失的权重(浮点数),用于训练期间来自该类的样本. 这对于告诉模型"更加关注”来自 代表性不足的类的样本很有用.当指定了class_weight 并且目标的秩为2或更大时,y必须 是独热编码的,或者稀疏类标签必须包含一个明确的最终维度为1. return_dict: 如果为True,损失和度量结果以字典形式返回, 每个键是度量的名称.如果为False, 它们以列表形式返回.

返回: 一个标量损失值(当没有度量且return_dict=False时), 一个损失和度量值的列表 (如果有度量且return_dict=False时),或者一个 度量和损失值的字典(如果return_dict=True时).


[source]

test_on_batch method

Model.test_on_batch(x, y=None, sample_weight=None, return_dict=False)

测试模型在一个批次样本上的表现.

参数: x: 输入数据.必须是类数组类型. y: 目标数据.必须是类数组类型. sample_weight: 可选的与x长度相同的数组,包含应用于模型每个样本损失的权重. 对于时间序列数据,可以传递形状为(样本数, 序列长度)的2D数组, 以对每个样本的每个时间步应用不同的权重. return_dict: 如果为True,损失和指标结果以字典形式返回,每个键为指标的名称. 如果为False,它们以列表形式返回.

返回: 一个标量损失值(当没有指标且return_dict=False时), 一个包含损失和指标值的列表 (如果有指标且return_dict=False时),或一个包含指标和损失值的字典 (如果return_dict=True时).


[source]

predict_on_batch method

Model.predict_on_batch(x)

返回单个样本批次的预测结果.

参数: x: 输入数据.它必须是类数组类型.

返回: NumPy 数组形式的预测结果.