compile 方法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(),
],
)
参数
keras.optimizers。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 系数加权。如果为列表,则期望它与模型的输出一一对应。如果为字典,则期望它将输出名称(字符串)映射到标量系数。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.BinaryAccuracy、keras.metrics.CategoricalAccuracy 或 keras.metrics.SparseCategoricalAccuracy 之一。对于字符串 "crossentropy" 和 "ce" 也会进行类似的转换。此处传递的评估指标是在不使用样本权重的情况下评估的;如果你希望使用样本权重,可以改用 weighted_metrics 参数指定你的评估指标。sample_weight 或 class_weight 评估和加权的评估指标列表。True,则此模型的前向传播永远不会被编译。建议在训练时将其保留为 False(以获得最佳性能),并在调试时将其设置为 True。steps_per_execution 设置为 N,Callback.on_batch_begin 和 Callback.on_batch_end 方法将每 N 个批次调用一次(即,在每次编译函数执行之前/之后)。不支持 PyTorch 后端。"auto"。编译模型时是否使用 XLA 编译。对于 jax 和 tensorflow 后端,jit_compile="auto" 会在模型支持时启用 XLA 编译,否则禁用。对于 torch 后端,"auto" 默认为即时执行,而 jit_compile=True 将使用 torch.compile 和 "inductor" 后端运行。True 且模型的 dtype policy 为 "mixed_float16",则传入的优化器将被自动包装在 LossScaleOptimizer 中,该优化器将动态缩放损失以防止下溢。fit 方法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,
)
在固定数量的 epoch(数据集迭代)内训练模型。
参数
(inputs, targets) 或 (inputs, targets, sample_weights) 的 keras.utils.PyDataset。(inputs, targets) 或 (inputs, targets, sample_weights) 的 tf.data.Dataset。(inputs, targets) 或 (inputs, targets, sample_weights) 的 torch.utils.data.DataLoader。(inputs, targets) 或 (inputs, targets, sample_weights) 的 Python 生成器函数。x 类似,它可以是 NumPy 数组或后端原生张量。如果 x 是 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader 或 Python 生成器函数,则不应指定 y,因为目标将从 x 中获取。None。每个梯度更新的样本数。如果未指定,batch_size 将默认为 32。如果输入数据 x 是 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader 或 Python 生成器函数,则不要指定 batch_size,因为它们会生成批次。x 和 y 数据的一次迭代(除非 steps_per_epoch 标志设置为 None)。请注意,与 initial_epoch 结合使用时,epochs 应理解为“最终 epoch”。模型并非训练 epochs 指定的迭代次数,而是仅训练直到达到索引为 epochs 的 epoch。"auto"、0、1 或 2。详细程度模式。0 = 静默,1 = 进度条,2 = 每 epoch 一行。 "auto" 在大多数情况下会变为 1。请注意,进度条在记录到文件时不太有用,因此在非交互式运行(例如,在生产环境中)时建议使用 verbose=2。默认为 "auto"。keras.callbacks.Callback 实例列表。在训练期间应用的 callback 列表。请参阅 keras.callbacks。请注意,keras.callbacks.ProgbarLogger 和 keras.callbacks.History callback 会自动创建,无需传递给 model.fit()。keras.callbacks.ProgbarLogger 是否创建取决于 model.fit() 中的 verbose 参数。x 和 y 数据中的最后几个样本中选择,在混洗之前。此参数仅在 x 和 y 由 NumPy 数组或张量组成时支持。如果同时提供了 validation_data 和 validation_split,则 validation_data 将覆盖 validation_split。validation_split 或 validation_data 提供的数据的验证损失不受噪声和 dropout 等正则化层的影响。validation_data 将覆盖 validation_split。它可以是(x_val, y_val) 元组,由 NumPy 数组或张量组成。(x_val, y_val, val_sample_weights) 元组,由 NumPy 数组组成。(inputs, targets) 的 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader,或者一个返回 (x_val, y_val) 或 (inputs, targets, sample_weights) 的 Python 生成器函数。x 是 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader 或 Python 生成器函数时,将忽略此参数。class_weight 且目标秩为 2 或更高时,y 必须是 one-hot 编码的,或者必须为稀疏类标签包含一个显式的最终维度 1。(samples, sequence_length) 的 2D NumPy 数组或张量,为每个样本的每个时间步应用不同的权重。当 x 是 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader 或 Python 生成器函数时,不支持此参数。取而代之的是,将 sample_weights 作为 x 的第三个元素提供。请注意,样本权重不适用于 compile() 中 metrics 参数指定的评估指标。要将样本权重应用于你的评估指标,你可以改用 compile() 中的 weighted_metrics 参数指定它们。None。在宣布一个 epoch 完成并开始下一个 epoch 之前执行的总步数(样本批次)。当使用输入张量或 NumPy 数组进行训练时,默认的 None 意味着使用的值是你的数据集中的样本数除以批次大小,如果无法确定则为 1。如果 x 是 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader 或 Python 生成器函数,则 epoch 将运行直到输入数据集耗尽。当传递一个无限循环的数据集时,必须指定 steps_per_epoch 参数,否则训练将无限期运行。None。仅当提供了 validation_data 时才相关。在每个 epoch 结束时进行验证时,要绘制的总步数(样本批次),直到停止。如果 validation_steps 为 None,则验证将一直运行直到 validation_data 数据集耗尽。在无限循环数据集的情况下,它将无限期运行。如果指定了 validation_steps 并且只消耗了数据集的一部分,那么每次评估都将从数据集的开头开始。这确保了每次都使用相同的验证样本。None。每个验证批次的样本数。如果未指定,将默认为 batch_size。如果你的数据是 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader 或 Python 生成器函数,则不要指定 validation_batch_size,因为它们会生成批次。validation_freq=2 每 2 个 epoch 运行一次验证。迭代器类输入的解包行为:一个常见的模式是将类似迭代器的对象(如 tf.data.Dataset 或 keras.utils.PyDataset)传递给 fit(),该对象实际上将不仅产生特征(x),还可以选择性地产生目标(y)和样本权重(sample_weight)。Keras 要求此类迭代器类输入的输出是明确的。迭代器应返回一个长度为 1、2 或 3 的元组,其中可选的第二个和第三个元素将分别用于 y 和 sample_weight。提供的任何其他类型都将被包装在一个长度为一的元组中,有效地将所有内容视为 x。当生成字典时,它们仍应遵循顶层元组结构,例如 ({"x0": x0, "x1": x1}, y)。Keras 不会尝试从单个字典的键中分离特征、目标和权重。一个值得注意的不支持的数据类型是 namedtuple。原因是它同时表现得像一个有序数据类型(元组)和一个映射数据类型(字典)。因此,给定一个形式为:namedtuple("example_tuple", ["y", "x"]) 的 namedtuple,无法确定在解释值时是否应反转元素的顺序。更糟糕的是一个形式为:namedtuple("other_tuple", ["x", "y", "z"]) 的元组,此时不清楚该元组是否打算解包为 x、y 和 sample_weight,还是作为一个单一元素传递给 x。
返回
一个 History 对象。其 History.history 属性是一个记录,包含 successive epochs 的训练损失值和评估指标值,以及验证损失值和验证评估指标值(如果适用)。
evaluate 方法Model.evaluate(
x=None,
y=None,
batch_size=None,
verbose="auto",
sample_weight=None,
steps=None,
callbacks=None,
return_dict=False,
**kwargs
)
返回模型在测试模式下的损失值和评估指标值。
计算以批次进行(请参阅 batch_size 参数)。
参数
(inputs, targets) 或 (inputs, targets, sample_weights) 的 keras.utils.PyDataset。(inputs, targets) 或 (inputs, targets, sample_weights) 的 tf.data.Dataset。(inputs, targets) 或 (inputs, targets, sample_weights) 的 torch.utils.data.DataLoader。(inputs, targets) 或 (inputs, targets, sample_weights) 的 Python 生成器函数。x 类似,它可以是 NumPy 数组或后端原生张量。如果 x 是 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader 或 Python 生成器函数,则不应指定 y,因为目标将从 x 中获取。None。计算批次的样本数。如果未指定,batch_size 将默认为 32。如果输入数据 x 是 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader 或 Python 生成器函数,则不要指定 batch_size,因为它们会生成批次。"auto"、0、1 或 2。详细程度模式。0 = 静默,1 = 进度条,2 = 单行。"auto" 在大多数情况下会变为 1。请注意,进度条在记录到文件时不太有用,因此在非交互式运行(例如,在生产环境中)时建议使用 verbose=2。默认为 "auto"。(samples, sequence_length) 的 2D NumPy 数组或张量,为每个样本的每个时间步应用不同的权重。当 x 是 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader 或 Python 生成器函数时,不支持此参数。取而代之的是,将 sample_weights 作为 x 的第三个元素提供。请注意,样本权重不适用于 compile() 中 metrics 参数指定的评估指标。要将样本权重应用于你的评估指标,你可以改用 compile() 中的 weighted_metrics 参数指定它们。None。在宣布评估轮次结束之前要绘制的总步数(样本批次)。如果 steps 为 None,它将一直运行直到 x 耗尽。在无限循环数据集的情况下,它将无限期运行。keras.callbacks.Callback 实例列表。在评估期间应用的 callback 列表。True,则损失和评估指标结果将作为字典返回,其中每个键是评估指标的名称。如果为 False,则它们将作为列表返回。返回
标量测试损失(如果模型只有一个输出且没有评估指标)或标量列表(如果模型有多个输出和/或评估指标)。
注意:在使用编译的评估指标时,evaluate() 可能会返回多个子度量值,而 model.metrics_names 通常只列出顶级名称(例如,'loss'、'compile_metrics'),导致长度不匹配。evaluate() 输出的顺序对应于 model.compile() 期间指定的评估指标的顺序。你可以使用此顺序将 evaluate() 结果映射到预期的评估指标。model.metrics_names 本身将仅返回顶级名称。
predict 方法Model.predict(x, batch_size=None, verbose="auto", steps=None, callbacks=None)
为输入样本生成输出预测。
计算以批次进行。此方法旨在批量处理大量输入。它不适用于在遍历数据并一次处理少量输入的循环中使用。
对于适合一个批次的小量输入,请直接使用 __call__() 以获得更快的执行速度,例如 model(x),或者在有像 BatchNormalization 这样在推理期间行为不同的层时使用 model(x, training=False)。
注意:有关 Model 方法 predict() 和 __call__() 之间区别的更多详细信息,请参阅 此 FAQ 条目。
参数
keras.utils.PyDataset。tf.data.Dataset。torch.utils.data.DataLoader。None。计算批次的样本数。如果未指定,batch_size 将默认为 32。如果输入数据 x 是 keras.utils.PyDataset、tf.data.Dataset、torch.utils.data.DataLoader 或 Python 生成器函数,则不要指定 batch_size,因为它们会生成批次。"auto"、0、1 或 2。详细程度模式。0 = 静默,1 = 进度条,2 = 单行。"auto" 在大多数情况下会变为 1。请注意,进度条在记录到文件时不太有用,因此在非交互式运行(例如,在生产环境中)时建议使用 verbose=2。默认为 "auto"。steps 为 None,它将一直运行直到 x 耗尽。在无限循环数据集的情况下,它将无限期运行。keras.callbacks.Callback 实例列表。在预测期间应用的 callback 列表。返回
NumPy 数组形式的预测。
train_on_batch 方法Model.train_on_batch(
x, y=None, sample_weight=None, class_weight=None, return_dict=False
)
对单个数据批次运行一次梯度更新。
参数
(samples, sequence_length) 的 2D 数组,为每个样本的每个时间步应用不同的权重。class_weight 且目标秩为 2 或更高时,y 必须是 one-hot 编码的,或者必须为稀疏类标签包含一个显式的最终维度 1。True,则损失和评估指标结果将作为字典返回,其中每个键是评估指标的名称。如果为 False,则它们将作为列表返回。返回
标量损失值(当没有评估指标且 return_dict=False 时),损失和评估指标值的列表(如果存在评估指标且 return_dict=False),或评估指标和损失值的字典(如果 return_dict=True)。
test_on_batch 方法Model.test_on_batch(x, y=None, sample_weight=None, return_dict=False)
在单个样本批次上测试模型。
参数
(samples, sequence_length) 的 2D 数组,为每个样本的每个时间步应用不同的权重。True,则损失和评估指标结果将作为字典返回,其中每个键是评估指标的名称。如果为 False,则它们将作为列表返回。返回
标量损失值(当没有评估指标且 return_dict=False 时),损失和评估指标值的列表(如果存在评估指标且 return_dict=False),或评估指标和损失值的字典(如果 return_dict=True)。
predict_on_batch 方法Model.predict_on_batch(x)
为单个样本批次返回预测。
参数
返回
NumPy 数组形式的预测。