compile methodModel.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.BinaryAccuracy、keras.metrics.CategoricalAccuracy、keras.metrics.SparseCategoricalAccuracy 之一.类似的转换也适用于字符串 "crossentropy" 和 "ce".
这里传递的指标在不应用样本权重的情况下进行评估;如果你希望应用样本权重,可以通过 weighted_metrics 参数指定你的指标.
weighted_metrics:在训练和测试期间要评估并由 sample_weight 或 class_weight 加权的指标列表.
run_eagerly:布尔值.如果为 True,此模型的前向传播将永远不会被编译.建议在训练时将其保留为 False(以获得最佳性能),并在调试时设置为 True.
steps_per_execution:整数.每次编译函数调用期间运行的批次数量.在一个编译函数调用中运行多个批次可以大大提高在 TPU 或具有较大 Python 开销的小模型上的性能.最多,每次执行将运行一个完整周期.如果传递的数字大于周期的尺寸,执行将被截断为周期的尺寸.请注意,如果 steps_per_execution 设置为 N,Callback.on_batch_begin 和 Callback.on_batch_end 方法将仅每 N 批次调用一次(即在每次编译函数执行之前/之后).
不支持 PyTorch 后端.
jit_compile:布尔值或 "auto".编译模型时是否使用 XLA 编译.对于 jax 和 tensorflow 后端,jit_compile="auto" 在模型支持时启用 XLA 编译,否则禁用.对于 torch 后端,"auto" 将默认为急切执行,jit_compile=True 将使用 torch.compile 和 "inductor" 后端运行.
auto_scale_loss:布尔值.如果为 True 且模型数据类型策略为 "mixed_float16",传递的优化器将自动包装在 LossScaleOptimizer 中,该优化器将动态缩放损失以防止下溢.
fit methodModel.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: 整数.训练模型的迭代次数.
一个迭代是整个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之间的浮点数.
用作验证数据部分的训练数据.
模型将分离这部分训练数据,
不会在其上训练,并且将在每个迭代结束时评估
损失和任何模型指标
在这部分数据上.
验证数据是从提供的x和y数据中最后选择的样本,在打乱之前.这个
参数在x是数据集、生成器或
keras.utils.PyDataset实例时不支持.
如果同时提供validation_data和validation_split,
validation_data将覆盖validation_split.
validation_data: 在每个迭代结束时评估
损失和任何模型指标的数据.
模型不会在此数据上训练.因此,注意
使用validation_split或validation_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.如果x是
tf.data.Dataset,并且steps_per_epoch
是None,迭代将运行直到输入数据集耗尽.当传递一个无限重复的数据集时,你必须
指定steps_per_epoch参数.如果
steps_per_epoch=-1,训练将无限期地运行,使用一个无限重复的数据集.
validation_steps: 仅在提供validation_data时相关.
在每次迭代结束时执行验证之前停止的总步数(样本批次).如果validation_steps是None,
验证将运行直到validation_data数据集耗尽.在无限重复数据集的情况下,
它将进入无限循环.如果validation_steps是
指定并且只消耗部分数据集,评估将在每个迭代开始时从数据集的开始重新开始.这确保了每次使用的验证样本是相同的.
validation_batch_size: 整数或None.
每个验证批次的样本数.
如果未指定,将默认为batch_size.
如果你的数据是数据集或keras.utils.PyDataset
实例的形式,不要指定validation_batch_size.
validation_freq: 仅在提供验证数据时相关.
指定在执行新的验证运行之前运行的训练迭代次数,
例如validation_freq=2每2个迭代运行一次验证.
迭代器类输入的解包行为:
一个常见的模式是传递一个迭代器类对象,如
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属性是
训练损失值和指标值
在连续迭代中的记录,以及验证损失值
和验证指标值(如果适用).
evaluate methodModel.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.Dataset 或 keras.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 并且
steps 是 None,评估将运行直到数据集
耗尽.
callbacks: keras.callbacks.Callback 实例的列表.
在评估期间应用的回调列表.
return_dict: 如果为 True,损失和指标结果将作为字典返回,
每个键是指标的名称.
如果为 False,它们将作为列表返回.
返回:
标量测试损失(如果模型有一个输出且没有指标)
或标量列表(如果模型有多个输出
和/或指标).属性 model.metrics_names 将给出
标量输出的显示标签.
predict methodModel.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 时忽略.
如果 x 是 tf.data.Dataset 且 steps 为 None,
predict() 将运行直到输入数据集耗尽.
callbacks: keras.callbacks.Callback 实例的列表.
在预测期间应用的回调列表.
返回: NumPy 数组形式的预测结果.
train_on_batch methodModel.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时).
test_on_batch methodModel.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时).
predict_on_batch methodModel.predict_on_batch(x)
返回单个样本批次的预测结果.
参数: x: 输入数据.它必须是类数组类型.
返回: NumPy 数组形式的预测结果.