Browse Source

修复LoadeBestModelCallback的bug

tags/v1.0.0alpha
yh_cc 3 years ago
parent
commit
0043e3e89a
2 changed files with 7 additions and 10 deletions
  1. +2
    -0
      fastNLP/core/callbacks/load_best_model_callback.py
  2. +5
    -10
      fastNLP/core/controllers/evaluator.py

+ 2
- 0
fastNLP/core/callbacks/load_best_model_callback.py View File

@@ -95,6 +95,8 @@ class LoadBestModelCallback(HasMonitorCallback):
self.buffer.seek(0)
trainer.load_model(folder=self.buffer, only_state_dict=self.only_state_dict)

trainer.driver.barrier()

if self.delete_after_after:
if self.real_save_folder and int(os.environ.get(FASTNLP_GLOBAL_RANK, 0)) == 0:
# 只需要 rank 0 执行删除。


+ 5
- 10
fastNLP/core/controllers/evaluator.py View File

@@ -20,13 +20,6 @@ from fastNLP.core.log import logger


class Evaluator:
"""
1. 我们目前不直接提供每一个 metric 对应一个或者特殊的多个 dataloader 的功能,默认就是所有 metric 处理所有 dataloader,如果用户有这种
需求,请使用多个 Tester 进行操作;
2. Trainer 的 validate dataloader 只允许传进去一个,而 Tester 则可以多个;因为 Trainer 涉及到保存 topk 模型的逻辑,而 Tester
则只需要给出评测的结果即可;

"""
driver: Driver
_evaluate_batch_loop: Loop

@@ -37,11 +30,12 @@ class Evaluator:
output_mapping: Optional[Union[Callable, Dict]] = None, model_wo_auto_param_call: bool = False,
fp16: bool = False, verbose: int = 1, **kwargs):
"""
用于对数据进行评测。

:param model: 待测试的模型,如果传入的 driver 为 Driver 实例,该参数将被忽略。
:param dataloaders: 待评测的数据集。
:param dataloaders: 待评测的数据集。如果为多个,请使用 dict 传入。
:param metrics: 使用的 metric 。必须为 dict 类型,其中 key 为 metric 的名称,value 为一个 Metric 对象。支持 fastNLP 的
metric ,torchmetrics,allennlpmetrics等。
metric ,torchmetrics,allennlpmetrics 等。
:param driver: 使用 driver 。
:param device: 使用的设备。
:param evaluate_batch_step_fn: 定制每次 evaluate batch 执行的函数。该函数应接受的两个参数为 `evaluator` 和 `batch`,
@@ -59,7 +53,8 @@ class Evaluator:
:param verbose: 是否打印 evaluate 的结果。
:param kwargs:
bool model_use_eval_mode: 是否在 evaluate 的时候将 model 的状态设置成 eval 状态。在 eval 状态下,model 的dropout
与 batch normalization 将会关闭。默认为True。
与 batch normalization 将会关闭。默认为True。如果为 False,fastNLP 不会对 model 的 evaluate 状态做任何设置。无论
该值是什么,fastNLP 都会在 evaluate 接受后将 model 的状态设置为 train 。
TODO 还没完成。
Union[bool] auto_tensor_conversion_for_metric: 是否自动将输出中的
tensor 适配到 metrics 支持的。例如 model 输出是 paddlepaddle 的 tensor ,但是想利用 torchmetrics 的metric对象,


Loading…
Cancel
Save