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 生成时,最好将输入填充到相同大小,或者在您的 tokenizer 或 DataCollator 中使用 pad_to_multiple_of 参数,这将减少唯一输入形状的数量并节省大量编译时间。如果 predict_with_generateFalse,则此选项无效。
  • generate_kwargs (dict, 可选) — 生成时传递给 model.generate() 的关键字参数。如果 predict_with_generateFalse,则无效。

回调以在每个 epoch 结束时计算指标。与普通的 Keras 指标不同,这些指标不需要由 TF 编译。它对于常见的 NLP 指标(如 BLEU 和 ROUGE)特别有用,这些指标需要字符串操作或无法编译的生成循环。预测(或生成)将在 eval_dataset 上计算,然后再以 np.ndarray 格式传递给 metric_fnmetric_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 上更新