2
2
使用 Callback 自定义你的训练过程
3
3
===================================================
4
4
5
- - 什么是 Callback
6
- - 使用 Callback
7
- - 一些常用的 Callback
8
- - 自定义实现 Callback
5
+ - ` 什么是Callback `_
6
+ - ` 使用 Callback `_
7
+ - ` fastNLP 中的 Callback`_
8
+ - ` 自定义 Callback`_
9
9
10
10
11
11
什么是Callback
12
12
---------------------
13
13
14
- Callback 是与 Trainer 紧密结合的模块,利用 Callback 可以在 Trainer 训练时,加入自定义的操作,比如梯度裁剪,学习率调节,测试模型的性能等。定义的 Callback 会在训练的特定阶段被调用。
14
+ :class: ` ~fastNLP.core.callback. Callback` 是与 :class: ` ~fastNLP.core.trainer. Trainer` 紧密结合的模块,利用 Callback 可以在 :class: ` ~fastNLP.core.trainer. Trainer` 训练时,加入自定义的操作,比如梯度裁剪,学习率调节,测试模型的性能等。定义的 Callback 会在训练的特定阶段被调用。
15
15
16
- fastNLP 中提供了很多常用的 Callback ,开箱即用。
16
+ fastNLP 中提供了很多常用的 :class: ` ~fastNLP.core.callback. Callback` ,开箱即用。
17
17
18
18
19
19
使用 Callback
@@ -35,11 +35,11 @@ fastNLP 中提供了很多常用的 Callback ,开箱即用。
35
35
data = pipe().process_from_file()
36
36
print (data)
37
37
data.rename_field(' chars' , ' words' )
38
- train_data = data.datasets[ ' train' ]
39
- dev_data = data.datasets[ ' dev' ]
40
- test_data = data.datasets[ ' test' ]
41
- vocab = data.vocabs[ ' words' ]
42
- tgt_vocab = data.vocabs[ ' target' ]
38
+ train_data = data.get_dataset( ' train' )
39
+ dev_data = data.get_dataset( ' dev' )
40
+ test_data = data.get_dataset( ' test' )
41
+ vocab = data.get_vocab( ' words' )
42
+ tgt_vocab = data.get_vocab( ' target' )
43
43
return train_data, dev_data, test_data, vocab, tgt_vocab
44
44
45
45
# prepare model
@@ -72,7 +72,7 @@ fastNLP 中提供了很多常用的 Callback ,开箱即用。
72
72
fastNLP 中的 Callback
73
73
---------------------
74
74
75
- fastNLP 中提供了很多常用的 Callback,如梯度裁剪,训练时早停和测试验证集,fitlog 等等。具体 Callback 请参考 fastNLP.core.callbacks
75
+ fastNLP 中提供了很多常用的 Callback,如梯度裁剪,训练时早停和测试验证集,fitlog 等等。具体 Callback 请参考 :mod: ` fastNLP.core.callback `
76
76
77
77
.. code-block :: python
78
78
@@ -92,18 +92,18 @@ fastNLP 中提供了很多常用的 Callback,如梯度裁剪,训练时早停
92
92
93
93
1. 创建 Callback
94
94
95
- 要自定义 Callback,我们要实现一个类,继承 fastNLP.Callback。这里我们定义 MyCallBack ,继承 fastNLP.Callback 。
95
+ 要自定义 Callback,我们要实现一个类,继承 :class: ` ~ fastNLP.core.callback. Callback` 。这里我们定义 `` MyCallBack `` ,继承 fastNLP.Callback 。
96
96
97
97
2. 指定 Callback 调用的阶段
98
98
99
99
Callback 中所有以 `on_ ` 开头的类方法会在 Trainer 的训练中在特定阶段调用。 如 on_train_begin() 会在训练开始时被调用,on_epoch_end()
100
- 会在每个 epoch 结束时调用。 具体有哪些类方法,参见 Callback 文档。这里, MyCallBack 在求得loss时调用 on_backward_begin() 记录
100
+ 会在每个 epoch 结束时调用。 具体有哪些类方法,参见 :class: ` ~fastNLP.core.callback. Callback` 文档。这里, MyCallBack 在求得loss时调用 on_backward_begin() 记录
101
101
当前 loss,在每一个 epoch 结束时调用 on_epoch_end() ,求当前 epoch 平均loss并输出。
102
102
103
103
3. 使用 Callback 的属性访问 Trainer 的内部信息
104
104
105
- 为了方便使用,可以使用 Callback 的属性,访问 Trainer 中的对应信息,如 optimizer, epoch, n_epochs,分别对应训练时的优化器,
106
- 当前 epoch 数,和总 epoch 数。 具体可访问的属性,参见文档 Callback 。这里, MyCallBack 为了求平均 loss ,需要知道当前 epoch 的总步
105
+ 为了方便使用,可以使用 :class: ` ~fastNLP.core.callback. Callback` 的属性,访问 :class: ` ~fastNLP.core.trainer. Trainer` 中的对应信息,如 optimizer, epoch, n_epochs,分别对应训练时的优化器,
106
+ 当前 epoch 数,和总 epoch 数。 具体可访问的属性,参见 :class: ` ~fastNLP.core.callback. Callback` 。这里, MyCallBack 为了求平均 loss ,需要知道当前 epoch 的总步
107
107
数,可以通过 self.step 属性得到当前训练了多少步。
108
108
109
109
.. code-block :: python
0 commit comments