数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
二、Callbacks
callbacks
是一种对象,它可以自定义PyTorch Trainer
中training loop
(TensorFlow
中尚未实现此功能)。例如,检查training loop
状态(用于进度报告、在TensorBoard
或其他ML
平台上进行logging
)并做出决定(如early stopping
)。callbacks
是"read only"
的代码,除了它们返回的TrainerControl
对象外,它们不能改变training loop
中的任何东西。如果需要改变training loop
,那么你应该对Trainer
进行子类化并覆盖你想要改变的方法。默认情况下,
Trainer
将使用以下callbacks
:DefaultFlowCallback
:处理logging, saving, evaluation
的默认callback
。PrinterCallback
或ProgressCallback
:显示训练进度,或打印日志。如果你通过TrainingArguments
禁用tqdm
,那么Trainer
就使用PrinterCallback
;否则就使用ProgressCallback
。TensorBoardCallback
:如果tensorboard
可用(安装了PyTorch >= 1.4
或tensorboardX
),则Trainer
就使用TensorBoardCallback
。WandbCallback
:如果wandb
已安装,则Trainer
使用WandbCallback
。CometCallback
:如果comet_ml
已安装,则Trainer
使用CometCallback
。MLflowCallback
:如果mlflow
已安装,则Trainer
使用MLflowCallback
。NeptuneCallback
:如果neptune
已安装,则Trainer
使用NeptuneCallback
。AzureMLCallback
:如果azureml-sdk
已安装,则Trainer
使用AzureMLCallback
。CodeCarbonCallback
:如果codecarbon
已安装,则Trainer
使用CodeCarbonCallback
。ClearMLCallback
:如果clearml
已安装,则Trainer
使用ClearMLCallback
。
实现
callbacks
的主要类是TrainerCallback
。它获得用于实例化Trainer
的TrainingArguments
,可以通过TrainerState
访问该Trainer
的内部状态,并且可以通过TrainerControl
对training loop
采取一些行动。
2.1 API
class transformers.TrainerCallback
:TrainerCallback
,它将在一些事件中检查training loop
的状态并作出一些决定。初始化参数:
args
:一个TrainingArguments
,指定用于实例化Trainer
的训练参数。state
:一个TrainerState
,指定训练器的当前状态。control
:一个TrainerControl
,指定返回给训练器的对象,它可以用来做一些决定。model
:一个PreTrainedModel
或torch.nn.Module
,指定正在训练的模型。tokenizer
:一个PreTrainedTokenizer
,指定用于对数据进行编码的tokenizer
。optimizer
:一个torch.optim.Optimizer
,指定用于训练的优化器。lr_scheduler
:一个torch.optim.lr_scheduler.LambdaLR
,指定用于训练的学习率调度器。train_dataloader
:一个torch.utils.data.DataLoader
,指定training dataloader
。eval_dataloader
:一个torch.utils.data.DataLoader
,指定evaluation dataloader
。metrics
:一个字典Dict[str, float]
,指定由上一次evaluation
阶段计算得到的指标。它仅在
on_evaluate
事件中才能访问。logs
:一个字典Dict[str, float]
,指定需要log
的内容。它只能在事件
on_log
中访问。
方法(这些参数参考初始化参数):
on_epoch_begin(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在一个epoch
的开始时被调用的事件。on_epoch_end(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在一个epoch
的结束时被调用的事件。on_evaluate(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在evaluation
阶段之后被调用的事件。on_init_end(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在Trainer
的初始化结束之后被调用的事件。on_log(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在logging last logs
之后被调用的事件。on_predict(args: TrainingArguments, state: TrainerState, control: TrainerControl, metrics, **kwargs)
:在一个成功的预测之后被调用的事件。on_prediction_step(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在一个prediction step
之后被调用的事件。on_save(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在一个checkpoint save
之后被调用的事件。on_step_begin(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在一个training step
之前被调用的事件。如果使用梯度累积
gradient accumulation
,那么一个training step
可能需要若干个inputs
。on_step_end(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在一个training step
之后被调用的事件。如果使用梯度累积
gradient accumulation
,那么一个training step
可能需要若干个inputs
。on_substep_end(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在gradient accumulation
期间的每个training substep
之后被调用的事件。on_train_begin(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在训练开始时被调用的事件。on_train_end(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
:在训练结束时被调用的事件。
在每个事件中,都有以下参数:
control
对象:是唯一可以被callback
改变的对象,在这种情况下,改变它的事件应该返回修改后的版本。args, state, control
是所有事件中的位置参数,而其他参数都位于kwargs
关键字参数。你可以unpack
你需要的关键字参数。例如:
xxxxxxxxxx
class PrinterCallback(TrainerCallback): def on_log(self, args, state, control, logs=None, **kwargs): _ = logs.pop("total_flos", None) if state.is_local_process_zero: print(logs)将一个自定义的
callback
注册到PyTorch Trainer
的例子:xxxxxxxxxx
class MyCallback(TrainerCallback): def on_train_begin(self, args, state, control, **kwargs): print("Starting training") trainer = Trainer(model,args,train_dataset=train_dataset,eval_dataset=eval_dataset, callbacks=[MyCallback], # 可以传入一个类,也可以传入一个 callback 对象 )也可以通过如下的方式注册:
xxxxxxxxxx
trainer = Trainer(...) trainer.add_callback(MyCallback) # 或者 trainer.add_callback(MyCallback())library
中目前可用的TrainerCallback
:xxxxxxxxxx
class transformers.integrations.CometCallback() # send logs to CometML def setup(args, state, model) class transformers.DefaultFlowCallback() # default callback for logging, saving, evaluation class transformers.PrinterCallback() # just prints the logs class transformers.ProgressCallback() # displays the progress of training or evaluation class transformers.EarlyStoppingCallback( # handles early stopping, Use with TrainingArguments metric_for_best_model early_stopping_patience: int = 1, early_stopping_threshold: typing.Optional[float] = 0.0) class transformers.integrations.TensorBoardCallback( tb_writer = None ) # sends the logs to TensorBoard class transformers.integrations.WandbCallback() # sends the logs to Weight and Biases def setup(args, state, model, **kwargs ) class transformers.integrations.MLflowCallback() # sends the logs to MLflow def setup(args, state, model) class transformers.integrations.AzureMLCallback(azureml_run = None) # sends the logs to AzureML class transformers.integrations.CodeCarbonCallback() # tracks the CO2 emission of training class transformers.integrations.NeptuneCallback( # sends the logs to Neptune api_token: typing.Optional[str] = None, project: typing.Optional[str] = None, name: typing.Optional[str] = None, base_namespace: str = 'finetuning', run: typing.Optional[ForwardRef('Run')] = None, log_parameters: bool = True, log_checkpoints: typing.Optional[str] = None, **neptune_run_kwargs ) class transformers.integrations.ClearMLCallback() # sends the logs to ClearMLclass transformers.TrainerState
:一个包含Trainer
内部状态的类,在checkpointing
时将伴随着模型和优化器保存并传递给TrainerCallback
。xxxxxxxxxx
class transformers.TrainerState( epoch: typing.Optional[float] = None, global_step: int = 0, max_steps: int = 0, num_train_epochs: int = 0, total_flos: float = 0, log_history: typing.List[typing.Dict[str, float]] = None, best_metric: typing.Optional[float] = None, best_model_checkpoint: typing.Optional[str] = None, is_local_process_zero: bool = True, is_world_process_zero: bool = True, is_hyper_param_search: bool = False, trial_name: str = None, trial_params: typing.Dict[str, typing.Union[str, float, int, bool]] = None )参数:
epoch
:一个浮点数,仅用于训练期间,指定当前训练所处的epoch
(小数部分代表当前epoch
完成的百分比)。global_step
:一个整数,仅用于训练期间,指定已经完成的update steps
数量。max_steps
:一个整数,指定当前训练需要执行的update steps
数量。total_flos
:一个浮点数,指定从训练开始以来,模型所做的浮点预算的总和。以浮点形式存储,避免溢出。log_history
:一个关于字典的列表List[Dict[str, float]]
,指定自训练开始以来完成的日志列表。best_metric
:一个浮点数,指定当tracking best model
时,到目前为止遇到的最佳指标值。best_model_checkpoint
:一个浮点数,指定当tracking best model
时,到目前为止遇到的最佳模型的checkpoint
的名称。is_local_process_zero
:一个布尔值,指定当前进程是否是local
的主进程(用于分布式训练的场景)。is_world_process_zero
:一个布尔值,指定当前进程是否是global
的主进程。当以分布式的方式在几台机器上进行训练时,只有一个进程为True
。is_hyper_param_search
:一个布尔值,指定我们是否正在使用Trainer.hyperparameter_search
进行超参数搜索。这将影响数据在TensorBoard
中的记录方式。
注意,在
TrainerState
中,一个step
应理解为一个update step
。当使用gradient accumulation
时,一个update step
可能需要几个前向和反向传播:如果你使用gradient_accumulation_steps=n
,那么一个update step
需要经过 $ n $ 个batch
。方法:
load_from_json(json_path: str )
:从json_path
的内容创建一个TrainerState
实例。save_to_json(json_path: str )
:将当前实例的内容以JSON
格式存储到json_path
。
class class transformers.TrainerControl
:一个处理Trainer
控制流的类。这个类被TrainerCallback
用来激活training loop
中的一些开关。xxxxxxxxxx
class transformers.TrainerControl( should_training_stop: bool = False, should_epoch_stop: bool = False, should_save: bool = False, should_evaluate: bool = False, should_log: bool = False )参数:
should_training_stop
:一个布尔值,指定训练是否应该被中断。如果为True
,那么这个变量将没有机会被设置为False
,因为训练将直接停止。should_epoch_stop
:一个布尔值,指定当前的epoch
是否应该被中断。如果是True
,这个变量将在下一个epoch
的开始被设置为False
。should_save
:一个布尔值,指定当前step
是否应该保存模型。如果是True
,这个变量将在下一个step
开始时被设置为False
。should_evaluate
:一个布尔值,指定当前step
是否应该评估模型。如果是True
,这个变量将在下一个step
开始时被设置为False
。should_log
:一个布尔值,指定当前step
是否应该上报日志。如果是True
,这个变量将在下一个step
开始时被设置为False
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论