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
后端,如果模型支持 XLA 编译,则 jit_compile="auto"
启用 XLA 编译,否则禁用。对于 torch
后端,"auto"
将默认为急切执行,而 jit_compile=True
将使用 "inductor"
后端的 torch.compile
运行。True
并且模型 dtype 策略为 "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
实例列表。在训练期间应用的回调列表。请参考 keras.callbacks
。请注意,keras.callbacks.ProgbarLogger
和 keras.callbacks.History
回调是自动创建的,不需要传递给 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)
。(x_val, y_val, val_sample_weights)
。keras.utils.PyDataset
、一个 tf.data.Dataset
、一个产生 (inputs, targets)
的 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
并且仅使用了数据集的一部分,则评估将在每个 epoch 从数据集的开头开始。这确保了每次都使用相同的验证样本。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
。提供的任何其他类型都将包装在长度为 1 的元组中,从而有效地将所有内容视为 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
属性是连续 epoch 的训练损失值和指标值,以及验证损失值和验证指标值(如果适用)的记录。
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
实例的列表。在评估期间应用的回调列表。True
,则损失和指标结果将作为字典返回,其中每个键都是指标的名称。如果为 False
,则它们将作为列表返回。返回
标量测试损失(如果模型具有单个输出且没有指标)或标量列表(如果模型具有多个输出和/或指标)。属性 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__()
之间差异的更多详细信息,请参阅 此常见问题解答条目。
参数
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
实例的列表。在预测期间应用的回调列表。返回
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 预测数组。