Transformers 文档

Keras 回调

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

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) — 用户提供的指标函数。它将接收两个参数 - predictionslabels。这两个参数包含模型的输出和数据集中匹配的标签。它应该返回一个将指标名称映射到数值的字典。
  • eval_dataset (tf.data.Datasetdicttuplenp.ndarraytf.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 生成时,最好将输入填充到相同大小,或在 tokenizerDataCollator 中使用 pad_to_multiple_of 参数,这将减少唯一输入形状的数量,节省大量编译时间。如果 predict_with_generateFalse,则此选项无效。
  • generate_kwargs (dict, 可选) — 在生成时传递给 model.generate() 的关键字参数。如果 predict_with_generateFalse,则此选项无效。

用于在每个 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()}

上述函数将返回一个包含值的字典,这些值将像任何其他 Keras 指标一样被记录下来。

{'rouge1': 37.4199, 'rouge2': 13.9768, 'rougeL': 34.361, 'rougeLsum': 35.0781

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 (strIntervalStrategy, 可选, 默认为 "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 方法。

from transformers.keras_callbacks import PushToHubCallback

push_to_hub_callback = PushToHubCallback(
    output_dir="./model_save",
    tokenizer=tokenizer,
    hub_model_id="gpt5-7xlarge",
)

model.fit(train_dataset, callbacks=[push_to_hub_callback])
< > 在 GitHub 上更新