compile 方法Model.compile(
optimizer="rmsprop",
loss=None,
metrics=None,
loss_weights=None,
weighted_metrics=None,
run_eagerly=None,
steps_per_execution=None,
jit_compile=None,
pss_evaluation_shards=0,
**kwargs
)
配置模型进行训练。
示例
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3),
loss=tf.keras.losses.BinaryCrossentropy(),
metrics=[tf.keras.metrics.BinaryAccuracy(),
tf.keras.metrics.FalseNegatives()])
参数
tf.keras.optimizers。tf.keras.losses.Loss 实例。请参阅 tf.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 实例且 reduction 设置为 None,则返回值具有形状 (batch_size, d0, .. dN-1),即每个样本或每个时间步的损失值;否则,它是一个标量。如果模型有多个输出,可以通过传递字典或损失列表在每个输出上使用不同的损失。模型将最小化的损失值将是所有单独损失的总和,除非指定了 loss_weights。tf.keras.metrics.Metric 实例。请参阅 tf.keras.metrics。通常你会使用 metrics=['accuracy']。函数是任何具有签名 result = fn(y_true, y_pred) 的可调用对象。要为多输出模型的不同输出指定不同的指标,也可以传递字典,例如 metrics={'output_a':'accuracy', 'output_b':['accuracy', 'mse']}。你也可以传递一个列表来为每个输出指定一个指标或指标列表,例如 metrics=[['accuracy'], ['accuracy', 'mse']] 或 metrics=['accuracy', ['accuracy', 'mse']]。当你传递字符串 'accuracy' 或 'acc' 时,我们会根据目标和模型输出的形状将其转换为 tf.keras.metrics.BinaryAccuracy、tf.keras.metrics.CategoricalAccuracy、tf.keras.metrics.SparseCategoricalAccuracy 中的一个。我们也会对字符串 'crossentropy' 和 'ce' 进行类似的转换。此处传递的指标是在没有样本权重的情况下进行评估的;如果你希望应用样本权重,可以通过 weighted_metrics 参数指定你的指标。loss_weights 系数加权。如果是一个列表,则期望它与模型的输出具有 1:1 的映射。如果是一个字典,则期望它将输出名称(字符串)映射到标量系数。sample_weight 或 class_weight 加权的指标列表。True,则此 Model 的逻辑将不会被包装在 tf.function 中。建议将其保留为 None,除非你的 Model 无法在 tf.function 内运行。当使用 tf.distribute.experimental.ParameterServerStrategy 时,不支持 run_eagerly=True。默认为 False。'auto'。在每次 tf.function 调用期间要运行的批次数。如果设置为 "auto",keras 将在运行时自动调整 steps_per_execution。在单个 tf.function 调用中运行多个批次可以大大提高在 TPU 上使用分布式策略(如 ParameterServerStrategy)或具有较大 Python 开销的小模型的性能。每次执行最多运行一个完整 epoch。如果传递的数字大于 epoch 的大小,则执行将被截断为 epoch 的大小。请注意,如果 steps_per_execution 设置为 N,则 Callback.on_batch_begin 和 Callback.on_batch_end 方法将仅在每 N 个批次之后(即在每次 tf.function 执行之前/之后)调用。默认为 1。True,则使用 XLA 编译模型训练步骤。XLA 是机器学习的优化编译器。默认情况下不启用 jit_compile。请注意,jit_compile=True 可能不适用于所有模型。有关受支持操作的更多信息,请参阅 XLA 文档。另请参阅 已知 XLA 问题 以了解更多详细信息。tf.distribute.ParameterServerStrategy 训练。此参数设置要将数据集拆分成的分片数,以启用评估的精确访问保证,这意味着即使 worker 失败,模型也将精确地应用于每个数据集元素一次。数据集必须被分片,以确保单独的 worker 不会处理相同的数据。分片数应至少为 worker 的数量,以获得良好的性能。值 'auto' 会启用精确评估,并使用一个启发式方法来计算分片数,该方法基于 worker 的数量。0 表示不提供访问保证。注意:在执行精确评估时,自定义的 Model.test_step 实现将被忽略。默认为 0。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,
max_queue_size=10,
workers=1,
use_multiprocessing=False,
)
训练模型固定数量的 epoch(数据集迭代)。
参数
tf.data 数据集。应返回 (inputs, targets) 或 (inputs, targets, sample_weights) 的元组。keras.utils.Sequence,返回 (inputs, targets) 或 (inputs, targets, sample_weights)。tf.keras.utils.experimental.DatasetCreator,它包装一个可调用对象,该对象接受一个类型为 tf.distribute.InputContext 的单个参数,并返回一个 tf.data.Dataset。当用户希望为 Dataset 指定每个副本的批处理和分片逻辑时,应使用 DatasetCreator。有关更多信息,请参阅 tf.keras.utils.experimental.DatasetCreator 文档。下面给出了迭代器类型(Dataset、生成器、Sequence)的解包行为的更详细描述。如果这些包括 sample_weights 作为第三个组件,请注意,样本权重应用于 weighted_metrics 参数,但不应用于 compile() 中的 metrics 参数。如果使用 tf.distribute.experimental.ParameterServerStrategy,则 x 仅支持 DatasetCreator 类型。x 类似,它可以是 Numpy 数组或 TensorFlow 张量。它应该与 x 一致(你不能有 Numpy 输入和张量目标,反之亦然)。如果 x 是数据集、生成器或 keras.utils.Sequence 实例,则不应指定 y (因为目标将从 x 中获得)。None。每次梯度更新的样本数。如果未指定,batch_size 将默认为 32。如果你的数据采用数据集、生成器或 keras.utils.Sequence 实例的形式,请不要指定 batch_size (因为它们会生成批次)。x 和 y 数据的迭代(除非 steps_per_epoch 标志设置为 None 以外的值)。请注意,与 initial_epoch 结合使用时,epochs 应理解为“最终 epoch”。模型不会训练 epochs 给定的迭代次数,而只是训练到达到索引为 epochs 的 epoch。ParameterServerStrategy 一起使用时变为 2。请注意,当记录到文件时,进度条不是特别有用,因此建议在不以交互方式运行时(例如,在生产环境中)使用 verbose=2。默认为 'auto'。keras.callbacks.Callback 实例列表。在训练期间应用的 callbacks 列表。请参阅 tf.keras.callbacks。请注意 tf.keras.callbacks.ProgbarLogger 和 tf.keras.callbacks.History callbacks 是自动创建的,无需传递到 model.fit 中。 是否创建 tf.keras.callbacks.ProgbarLogger 基于传递给 model.fit 的 verbose 参数。当使用 tf.distribute.experimental.ParameterServerStrategy 时,当前不支持具有批次级调用的 callbacks,建议用户使用适当的 steps_per_epoch 值来实现 epoch 级调用。x 和 y 数据中,在洗牌之前选择的最后一部分样本。当 x 是数据集、生成器或 keras.utils.Sequence 实例时,不支持此参数。如果同时提供了 validation_data 和 validation_split,则 validation_data 将覆盖 validation_split。 tf.distribute.experimental.ParameterServerStrategy 尚不支持 validation_split。validation_split 或 validation_data 提供的数据的验证损失不受噪声和 dropout 等正则化层的影响。 validation_data 将覆盖 validation_split。 validation_data 可以是: - 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.Sequence。 tf.distribute.experimental.ParameterServerStrategy 尚不支持 validation_data。x 是生成器或 tf.data.Dataset 对象时,此参数将被忽略。 'batch' 是用于处理 HDF5 数据限制的特殊选项;它会按批次大小的块进行洗牌。当 steps_per_epoch 不为 None 时无效。class_weight 且目标等级为 2 或更高时,y 必须是 one-hot 编码,或者对于稀疏类标签必须包含明确的最终维度 1。(samples, sequence_length) 的 2D 数组,以便将不同的权重应用于每个样本的每个时间步。 当 x 是数据集、生成器或 keras.utils.Sequence 实例时,不支持此参数,请改为将样本权重作为 x 的第三个元素提供。请注意,样本加权不适用于在 compile() 中的 metrics 参数指定的指标。要将样本加权应用于您的指标,您可以改为通过 compile() 中的 weighted_metrics 指定它们。None。在声明一个 epoch 完成并开始下一个 epoch 之前的总步数(样本批次)。 当使用 TensorFlow 数据张量等输入张量进行训练时,默认值 None 等于数据集中的样本数除以批次大小,如果无法确定则为 1。 如果 x 是 tf.data 数据集,且 'steps_per_epoch' 为 None,则 epoch 将运行直到输入数据集耗尽。当传递无限重复的数据集时,您必须指定 steps_per_epoch 参数。如果 steps_per_epoch=-1,训练将无限期地运行,使用无限重复的数据集。数组输入不支持此参数。当使用 tf.distribute.experimental.ParameterServerStrategy 时: * 不支持 steps_per_epoch=None。validation_data 且为 tf.data 数据集时才相关。在每个 epoch 结束时执行验证时停止之前的总步数(样本批次)。如果 'validation_steps' 为 None,验证将运行直到 validation_data 数据集耗尽。在无限重复数据集的情况下,它将进入无限循环。如果指定了 'validation_steps' 并且仅使用数据集的一部分,则评估将从每个 epoch 的数据集开头开始。这确保了每次都使用相同的验证样本。None。每个验证批次的样本数。如果未指定,则默认为 batch_size。如果您的数据采用数据集、生成器或 keras.utils.Sequence 实例的形式(因为它们会生成批次),请勿指定 validation_batch_size。collections.abc.Container 实例(例如列表、元组等)。如果为整数,则指定在执行新的验证运行之前要运行多少个训练 epoch,例如,validation_freq=2 每 2 个 epoch 运行一次验证。如果为 Container,则指定运行验证的 epoch,例如,validation_freq=[1, 2, 10] 在第 1、第 2 和第 10 个 epoch 结束时运行验证。keras.utils.Sequence 输入。生成器队列的最大大小。如果未指定,max_queue_size 将默认为 10。keras.utils.Sequence 输入。在使用基于进程的线程时要启动的最大进程数。如果未指定,workers 将默认为 1。keras.utils.Sequence 输入。如果为 True,则使用基于进程的线程。如果未指定,use_multiprocessing 将默认为 False。请注意,由于此实现依赖于多进程,因此您不应将不可 pickle 的参数传递给生成器,因为它们无法轻松传递给子进程。类迭代输入的解包行为:一种常见的模式是将 tf.data.Dataset、生成器或 tf.keras.utils.Sequence 传递给 fit 的 x 参数,这实际上不仅会产生特征 (x),还会选择性地产生目标 (y) 和样本权重。TF-Keras 要求此类类似迭代器的输出是明确的。迭代器应返回长度为 1、2 或 3 的元组,其中可选的第二个和第三个元素将分别用于 y 和 sample_weight。提供的任何其他类型都将包装在长度为 1 的元组中,有效地将所有内容视为“x”。当生成字典时,它们仍应遵守顶级元组结构。例如,({"x0": x0, "x1": x1}, y)。TF-Keras 不会尝试从单个字典的键中分离特征、目标和权重。一个值得注意的不支持的数据类型是 namedtuple。原因是它的行为类似于有序数据类型(元组)和映射数据类型(字典)。因此,给定一个具有以下形式的 namedtuple:namedtuple("example_tuple", ["y", "x"]),当解释该值时是否反转元素的顺序是不明确的。更糟糕的是以下形式的元组:namedtuple("other_tuple", ["x", "y", "z"]),其中不清楚该元组是否打算被解包到 x、y 和 sample_weight 中,还是作为单个元素传递到 x 中。因此,如果数据处理代码遇到 namedtuple,则会简单地引发 ValueError。(以及解决此问题的说明。)
返回值
一个 History 对象。它的 History.history 属性是连续 epoch 的训练损失值和指标值,以及验证损失值和验证指标值(如果适用)的记录。
引发
model.fit 被包装在 tf.function 中。evaluate 方法Model.evaluate(
x=None,
y=None,
batch_size=None,
verbose="auto",
sample_weight=None,
steps=None,
callbacks=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False,
return_dict=False,
**kwargs
)
返回模型在测试模式下的损失值和指标值。
计算以批次方式完成(请参阅 batch_size 参数)。
参数
tf.data 数据集。应返回 (inputs, targets) 或 (inputs, targets, sample_weights) 的元组。(inputs, targets) 或 (inputs, targets, sample_weights) 的生成器或 keras.utils.Sequence。有关迭代器类型(数据集、生成器、序列)的解包行为的更详细描述,请参见 Model.fit 的“类迭代输入的解包行为”部分。x 类似,它可以是 Numpy 数组或 TensorFlow 张量。它应与 x 一致(您不能有 Numpy 输入和张量目标,反之亦然)。如果 x 是数据集、生成器或 keras.utils.Sequence 实例,则不应指定 y(因为目标将从迭代器/数据集中获取)。None。每次计算批次的样本数。如果未指定,则 batch_size 将默认为 32。如果您的数据采用数据集、生成器或 keras.utils.Sequence 实例的形式(因为它们会生成批次),请勿指定 batch_size。"auto"、0、1 或 2。详细模式。0 = 静默,1 = 进度条,2 = 单行。在大多数情况下,"auto" 变为 1,当与 ParameterServerStrategy 一起使用时,变为 2。请注意,当记录到文件时,进度条不是特别有用,因此建议在不以交互方式运行时(例如,在生产环境中)使用 verbose=2。默认为“auto”。(samples, sequence_length) 的 2D 数组,以便将不同的权重应用于每个样本的每个时间步。当 x 是数据集时,不支持此参数,请改为将样本权重作为 x 的第三个元素传递。None。声明评估轮次完成之前的总步数(样本批次)。 使用默认值 None 时会被忽略。 如果 x 是 tf.data 数据集,并且 steps 为 None,则 'evaluate' 将运行直到数据集耗尽。数组输入不支持此参数。keras.callbacks.Callback 实例的列表。在评估期间应用的 callbacks 列表。 请参阅callbacks。keras.utils.Sequence 输入。生成器队列的最大大小。如果未指定,max_queue_size 将默认为 10。keras.utils.Sequence 输入。在使用基于进程的线程时要启动的最大进程数。如果未指定,workers 将默认为 1。keras.utils.Sequence 输入。如果为 True,则使用基于进程的线程。如果未指定,use_multiprocessing 将默认为 False。请注意,由于此实现依赖于多进程,因此您不应将不可 pickle 的参数传递给生成器,因为它们无法轻松传递给子进程。True,则损失和指标结果将作为字典返回,每个键都是指标的名称。如果为 False,则将它们作为列表返回。有关 Model.fit 的 类迭代输入的解包行为 的讨论,请参阅相关内容。
返回值
标量测试损失(如果模型只有一个输出且没有指标)或标量列表(如果模型有多个输出和/或指标)。属性 model.metrics_names 将为您提供标量输出的显示标签。
引发
model.evaluate 被包裹在 tf.function 中。predict 方法Model.predict(
x,
batch_size=None,
verbose="auto",
steps=None,
callbacks=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False,
)
为输入样本生成输出预测。
计算以批次方式完成。此方法专为批量处理大量输入而设计。它不适合在循环中使用,循环迭代您的数据并一次处理少量输入。
对于适合一个批次的少量输入,直接使用 __call__() 可加快执行速度,例如,model(x),或者如果您的层(例如 tf.keras.layers.BatchNormalization)在推理期间表现不同,则使用 model(x, training=False)。您可以在内部循环中将单独的模型调用与 tf.function 配对以获得额外的性能。如果您需要在模型调用后访问 numpy 数组值而不是张量,您可以使用 tensor.numpy() 来获取 eager 张量的 numpy 数组值。
另请注意,测试损失不受噪声和 dropout 等正则化层的影响。
注意:有关 Model 方法 predict() 和 __call__() 之间差异的更多详细信息,请参阅 此常见问题解答条目。
参数
tf.data 数据集。keras.utils.Sequence 实例。有关迭代器类型(数据集、生成器、序列)解包行为的更详细描述,请参阅 Model.fit 的 Unpacking behavior for iterator-like inputs 部分。None。每个批次的样本数。如果未指定,batch_size 将默认为 32。如果您的数据以数据集、生成器或 keras.utils.Sequence 实例的形式存在,则不要指定 batch_size(因为它们会生成批次)。"auto"、0、1 或 2。详细模式。0 = 静默,1 = 进度条,2 = 单行。在大多数情况下,"auto" 变为 1,当与 ParameterServerStrategy 一起使用时,变为 2。请注意,当记录到文件时,进度条不是特别有用,因此建议在不以交互方式运行时(例如,在生产环境中)使用 verbose=2。默认为“auto”。None,则忽略。如果 x 是一个 tf.data 数据集且 steps 为 None,则 predict() 将运行到输入数据集耗尽。keras.callbacks.Callback 实例的列表。在预测期间应用的回调列表。请参阅 回调。keras.utils.Sequence 输入。生成器队列的最大大小。如果未指定,max_queue_size 将默认为 10。keras.utils.Sequence 输入。在使用基于进程的线程时要启动的最大进程数。如果未指定,workers 将默认为 1。keras.utils.Sequence 输入。如果为 True,则使用基于进程的线程。如果未指定,use_multiprocessing 将默认为 False。请注意,由于此实现依赖于多进程,因此您不应将不可 pickle 的参数传递给生成器,因为它们无法轻松传递给子进程。请参阅 Model.fit 的 Unpacking behavior for iterator-like inputs 的讨论。请注意,Model.predict 使用与 Model.fit 和 Model.evaluate 相同的解释规则,因此对于所有三种方法,输入都必须是明确的。
返回值
预测的 Numpy 数组。
引发
model.predict 被包裹在 tf.function 中。train_on_batch 方法Model.train_on_batch(
x,
y=None,
sample_weight=None,
class_weight=None,
reset_metrics=True,
return_dict=False,
)
对单个数据批次运行单个梯度更新。
参数
x 一样,它可以是 Numpy 数组或 TensorFlow 张量。class_weight 并且目标的秩为 2 或更大时,y 必须是独热编码的,或者必须为稀疏类标签包含一个显式的最终维度 1。True,则返回的指标将仅针对此批次。如果为 False,则指标将在各个批次之间有状态地累积。True,则损失和指标结果将作为字典返回,每个键都是指标的名称。如果为 False,则将它们作为列表返回。返回值
标量训练损失(如果模型只有一个输出且没有指标)或标量列表(如果模型有多个输出和/或指标)。属性 model.metrics_names 将为您提供标量输出的显示标签。
引发
model.train_on_batch 被包裹在 tf.function 中。test_on_batch 方法Model.test_on_batch(
x, y=None, sample_weight=None, reset_metrics=True, return_dict=False
)
在单个样本批次上测试模型。
参数
x 一样,它可以是 Numpy 数组或 TensorFlow 张量。它应该与 x 一致(您不能有 Numpy 输入和张量目标,反之亦然)。True,则返回的指标将仅针对此批次。如果为 False,则指标将在各个批次之间有状态地累积。True,则损失和指标结果将作为字典返回,每个键都是指标的名称。如果为 False,则将它们作为列表返回。返回值
标量测试损失(如果模型只有一个输出且没有指标)或标量列表(如果模型有多个输出和/或指标)。属性 model.metrics_names 将为您提供标量输出的显示标签。
引发
model.test_on_batch 被包裹在 tf.function 中。predict_on_batch 方法Model.predict_on_batch(x)
返回单个样本批次的预测。
参数
返回值
预测的 Numpy 数组。
引发
model.predict_on_batch 被包裹在 tf.function 中。run_eagerly 属性tf_keras.Model.run_eagerly
可设置的属性,指示模型是否应急切运行。
急切运行意味着您的模型将像 Python 代码一样逐步运行。您的模型可能会运行得更慢,但是通过逐步进入各个层调用,您应该可以更轻松地调试它。
默认情况下,我们将尝试将您的模型编译为静态图,以提供最佳的执行性能。
返回值
布尔值,指示模型是否应急切运行。