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)特别有用,这些指标需要字符串操作或无法编译的生成循环。预测(或生成)将在 eval_dataset
上计算,然后再以 np.ndarray
格式传递给 metric_fn
。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
方法。