Transformers 文档
Keras 回调
并获得增强的文档体验
开始使用
Keras 回调
当使用 Keras 训练 Transformers 模型时,有一些库特定的回调可用于自动化常见任务。
KerasMetricCallback
class transformers.KerasMetricCallback
< 来源 >( metric_fn: typing.Callable eval_dataset: typing.Union[tensorflow.python.data.ops.dataset_ops.DatasetV2, numpy.ndarray, tensorflow.python.framework.tensor.Tensor, tuple, dict] output_cols: typing.Optional[list[str]] = None label_cols: typing.Optional[list[str]] = None batch_size: typing.Optional[int] = None predict_with_generate: bool = False use_xla_generation: bool = False generate_kwargs: typing.Optional[dict] = None )
参数
- metric_fn (
Callable
) — 用户提供的指标函数。它将接收两个参数 -predictions
和labels
。这两个参数包含模型的输出和数据集中匹配的标签。它应该返回一个将指标名称映射到数值的字典。 - eval_dataset (
tf.data.Dataset
或dict
或tuple
或np.ndarray
或tf.Tensor
) — 用于为metric_fn
生成预测的验证数据。 - output_cols (`list[str], 可选) — 要从模型输出中保留作为预测的列的列表。默认为所有列。
- label_cols (’
list[str]
, 可选’) — 要从输入数据集中保留作为标签的列的列表。如果未提供此参数,将自动检测。 - batch_size (
int
, 可选) — 批处理大小。仅在数据不是预批处理的tf.data.Dataset
时使用。 - predict_with_generate (
bool
, 可选, 默认为False
) — 是否应该使用model.generate()
获取模型输出。 - use_xla_generation (
bool
, 可选, 默认为False
) — 如果正在生成,是否使用 XLA 编译模型生成。这可以极大地提高生成速度(高达 100 倍加速),但每个输入形状都需要一次新的 XLA 编译。使用 XLA 生成时,最好将输入填充到相同大小,或在tokenizer
或DataCollator
中使用pad_to_multiple_of
参数,这将减少唯一输入形状的数量,节省大量编译时间。如果predict_with_generate
为False
,则此选项无效。 - generate_kwargs (
dict
, 可选) — 在生成时传递给model.generate()
的关键字参数。如果predict_with_generate
为False
,则此选项无效。
用于在每个 epoch 结束时计算指标的回调。与普通的 Keras 指标不同,这些指标不需要被 TF 编译。它对于常见的 NLP 指标特别有用,如 BLEU 和 ROUGE,这些指标需要字符串操作或无法编译的生成循环。在传递给 metric_fn
之前,将在 eval_dataset
上计算预测(或生成)结果,并以 np.ndarray
格式传递。metric_fn
应计算指标并返回一个将指标名称映射到指标值的字典。
我们提供了一个合适的 metric_fn 示例,用于计算摘要模型的 ROUGE 分数。请注意,为了可读性和简单性,此示例省略了一些后处理,可能不应直接使用!
from datasets import load_metric
rouge_metric = load_metric("rouge")
def rouge_fn(predictions, labels):
decoded_predictions = tokenizer.batch_decode(predictions, skip_special_tokens=True)
decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)
result = rouge_metric.compute(predictions=decoded_predictions, references=decoded_labels)
return {key: value.mid.fmeasure * 100 for key, value in result.items()}
PushToHubCallback
class transformers.PushToHubCallback
< 来源 >( output_dir: typing.Union[str, pathlib.Path] save_strategy: typing.Union[str, transformers.trainer_utils.IntervalStrategy] = 'epoch' save_steps: typing.Optional[int] = None tokenizer: typing.Optional[transformers.tokenization_utils_base.PreTrainedTokenizerBase] = None hub_model_id: typing.Optional[str] = None hub_token: typing.Optional[str] = None checkpoint: bool = False **model_card_args )
参数
- output_dir (
str
) — 模型预测和检查点将被写入并与 Hub 上的仓库同步的输出目录。 - save_strategy (
str
或 IntervalStrategy, 可选, 默认为"epoch"
) — 训练期间采用的检查点保存策略。可能的值有:"no"
: 在训练结束时保存。"epoch"
: 在每个 epoch 结束时保存。"steps"
: 每save_steps
保存一次。
- save_steps (
int
, 可选) — 使用“steps”save_strategy
时,两次保存之间的步数。 - tokenizer (
PreTrainedTokenizerBase
, 可选) — 模型使用的分词器。如果提供,将与权重一起上传到仓库。 - hub_model_id (
str
, 可选) — 与本地output_dir
保持同步的仓库名称。它可以是一个简单的模型 ID,这种情况下模型将被推送到您的命名空间。否则,它应该是完整的仓库名称,例如"user_name/model"
,这允许您推送到您所属的组织,格式为"organization_name/model"
。将默认为
output_dir
的名称。 - hub_token (
str
, 可选) — 用于将模型推送到 Hub 的令牌。将默认为通过huggingface-cli login
获得的缓存文件夹中的令牌。 - checkpoint (
bool
, 可选, 默认为False
) — 是否保存完整的训练检查点(包括 epoch 和优化器状态)以允许恢复训练。仅在save_strategy
为"epoch"
时可用。
该回调将定期保存模型并将其推送到 Hub。默认情况下,它每个 epoch 推送一次,但可以通过 save_strategy
参数进行更改。推送的模型可以像 Hub 上的任何其他模型一样访问,例如使用 from_pretrained
方法。