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 数组形式的预测结果.