From 4a05242606e99bfcd234b76b9e7d7d2ba2fe7940 Mon Sep 17 00:00:00 2001 From: roger Date: Thu, 30 Jul 2020 04:24:28 +0000 Subject: [PATCH 01/10] f1 fix --- fastNLP/core/metrics.py | 30 ++++++++++---- test/core/test_metrics.py | 87 ++++++++++++++------------------------- 2 files changed, 53 insertions(+), 64 deletions(-) diff --git a/fastNLP/core/metrics.py b/fastNLP/core/metrics.py index cf5b82b7..31f69cb9 100644 --- a/fastNLP/core/metrics.py +++ b/fastNLP/core/metrics.py @@ -313,11 +313,9 @@ def __init__(self, pred=None, target=None, seq_len=None, - show_result=None, print_ratio=False ): r""" - :param vocab: vocab词表类,要求有to_word()方法。 :param pred: 参数映射表中 `pred` 的映射关系,None表示映射关系为 `pred` -> `pred` :param target: 参数映射表中 `target` 的映射关系,None表示映射关系为 `target` -> `target` @@ -327,7 +325,6 @@ def __init__(self, super().__init__() self._init_param_map(pred=pred, target=target, seq_len=seq_len) self.confusion_matrix = ConfusionMatrix( - show_result=show_result, vocab=vocab, print_ratio=print_ratio, ) @@ -335,6 +332,7 @@ def __init__(self, def evaluate(self, pred, target, seq_len=None): r""" evaluate函数将针对一个批次的预测结果做评价指标的累计 + :param torch.Tensor pred: 预测的tensor, tensor的形状可以是torch.Size([B,]), torch.Size([B, n_classes]), torch.Size([B, max_len]), 或者torch.Size([B, max_len, n_classes]) :param torch.Tensor target: 真实值的tensor, tensor的形状可以是Element's can be: torch.Size([B,]), @@ -356,6 +354,10 @@ def evaluate(self, pred, target, seq_len=None): f"got {type(seq_len)}.") if pred.dim() == target.dim(): + if torch.numel(pred) !=torch.numel(target): + raise RuntimeError(f"In {_get_func_signature(self.evaluate)}, when pred have same dimensions with target, they should have same element numbers. while target have " + f"element numbers:{torch.numel(target)}, pred have element numbers: {torch.numel(pred)}") + pass elif pred.dim() == target.dim() + 1: pred = pred.argmax(dim=-1) @@ -446,6 +448,10 @@ def evaluate(self, pred, target, seq_len=None): masks = None if pred.dim() == target.dim(): + if torch.numel(pred) !=torch.numel(target): + raise RuntimeError(f"In {_get_func_signature(self.evaluate)}, when pred have same dimensions with target, they should have same element numbers. while target have " + f"element numbers:{torch.numel(target)}, pred have element numbers: {torch.numel(pred)}") + pass elif pred.dim() == target.dim() + 1: pred = pred.argmax(dim=-1) @@ -477,7 +483,6 @@ def get_metric(self, reset=True): self.total = 0 return evaluate_result - class ClassifyFPreRecMetric(MetricBase): r""" 分类问题计算FPR值的Metric(其它的Metric参见 :mod:`fastNLP.core.metrics` ) @@ -567,9 +572,14 @@ def evaluate(self, pred, target, seq_len=None): masks = seq_len_to_mask(seq_len=seq_len, max_len=max_len) else: masks = torch.ones_like(target).long().to(target.device) - masks = masks.eq(False) + + masks = masks.eq(1) if pred.dim() == target.dim(): + if torch.numel(pred) !=torch.numel(target): + raise RuntimeError(f"In {_get_func_signature(self.evaluate)}, when pred have same dimensions with target, they should have same element numbers. while target have " + f"element numbers:{torch.numel(target)}, pred have element numbers: {torch.numel(pred)}") + pass elif pred.dim() == target.dim() + 1: pred = pred.argmax(dim=-1) @@ -580,12 +590,14 @@ def evaluate(self, pred, target, seq_len=None): f"size:{pred.size()}, target should have size: {pred.size()} or " f"{pred.size()[:-1]}, got {target.size()}.") - target_idxes = set(target.reshape(-1).tolist()) target = target.to(pred) + target = target.masked_select(masks) + pred = pred.masked_select(masks) + target_idxes = set(target.reshape(-1).tolist()) for target_idx in target_idxes: - self._tp[target_idx] += torch.sum((pred == target_idx).long().masked_fill(target != target_idx, 0).masked_fill(masks, 0)).item() - self._fp[target_idx] += torch.sum((pred != target_idx).long().masked_fill(target != target_idx, 0).masked_fill(masks, 0)).item() - self._fn[target_idx] += torch.sum((pred == target_idx).long().masked_fill(target == target_idx, 0).masked_fill(masks, 0)).item() + self._tp[target_idx] += torch.sum((pred == target_idx).long().masked_fill(target != target_idx, 0)).item() + self._fp[target_idx] += torch.sum((pred == target_idx).long().masked_fill(target == target_idx, 0)).item() + self._fn[target_idx] += torch.sum((pred != target_idx).long().masked_fill(target != target_idx, 0)).item() def get_metric(self, reset=True): r""" diff --git a/test/core/test_metrics.py b/test/core/test_metrics.py index 27799c54..14096ff5 100644 --- a/test/core/test_metrics.py +++ b/test/core/test_metrics.py @@ -1,13 +1,14 @@ import unittest +from collections import Counter import numpy as np import torch - from fastNLP import AccuracyMetric -from fastNLP.core.metrics import _pred_topk, _accuracy_topk +from fastNLP.core.metrics import (ClassifyFPreRecMetric, CMRC2018Metric, + ConfusionMatrixMetric, SpanFPreRecMetric, + _accuracy_topk, _pred_topk) from fastNLP.core.vocabulary import Vocabulary -from collections import Counter -from fastNLP.core.metrics import SpanFPreRecMetric, CMRC2018Metric, ClassifyFPreRecMetric,ConfusionMatrixMetric +from sklearn import metrics as m def _generate_tags(encoding_type, number_labels=4): @@ -563,69 +564,45 @@ def test_case_1(self): # 跑通即可 + class TestClassfiyFPreRecMetric(unittest.TestCase): def test_case_1(self): - pred = torch.FloatTensor([[-0.1603, -1.3247, 0.2010, 0.9240, -0.6396], - [-0.7316, -1.6028, 0.2281, 0.3558, 1.2500], - [-1.2943, -1.7350, -0.7085, 1.1269, 1.0782], - [ 0.1314, -0.2578, 0.7200, 1.0920, -1.0819], - [-0.6787, -0.9081, -0.2752, -1.5818, 0.5538], - [-0.2925, 1.1320, 2.8709, -0.6225, -0.6279], - [-0.3320, -0.9009, -1.5762, 0.3810, -0.1220], - [ 0.4601, -1.0509, 1.4242, 0.3427, 2.7014], - [-0.5558, 1.0899, -1.9045, 0.3377, 1.3192], - [-0.8251, -0.1558, -0.0871, -0.6755, -0.5905], - [ 0.1019, 1.2504, -1.1627, -0.7062, 1.8654], - [ 0.9016, -0.1984, -0.0831, -0.7646, 1.5309], - [ 0.2073, 0.2250, -0.0879, 0.1608, -0.8915], - [ 0.3624, 0.3806, 0.3159, -0.3603, -0.6672], - [ 0.2714, 2.5086, -0.1053, -0.5188, 0.9229], - [ 0.3258, -0.0303, 1.1439, -0.9123, 1.5180], - [ 1.2496, -1.0298, -0.4463, 0.1186, -1.7089], - [ 0.0788, 0.6300, -1.3336, -0.7122, 1.0164], - [-1.1900, -0.9620, -0.3839, 0.1159, -1.2045], - [-0.9037, -0.1447, 1.1834, -0.2617, 2.6112], - [ 0.1507, 0.1686, -0.1535, -0.3669, -0.8425], - [ 1.0537, 1.1958, -1.2309, 1.0405, 1.3018], - [-0.9823, -0.9712, 1.1560, -0.6473, 1.0361], - [ 0.8659, -0.2166, -0.8335, -0.3557, -0.5660], - [-1.4742, -0.8773, -2.5237, 0.7410, 0.1506], - [-1.3032, -1.7157, 0.7479, 1.0755, 1.0817], - [-0.2988, 2.3745, 1.2072, 0.0054, 1.1877], - [-0.0123, 1.6513, 0.2741, -0.7791, 0.6161], - [ 1.6339, -1.0365, 0.3961, -0.9683, 0.2684], - [-0.0278, -2.0856, -0.5376, 0.5129, -0.3169], - [ 0.9386, 0.8317, 0.9518, -0.5050, -0.2808], - [-0.6907, 0.5020, -0.9039, -1.1061, 0.1656]]) - - arg_max_pred = torch.Tensor([3, 2, 3, 3, 4, 2, 3, 4, 4, 2, 4, 4, 1, 1, - 1, 4, 0, 4, 3, 4, 1, 4, 2, 0, - 3, 4, 1, 1, 0, 3, 2, 1]) - target = torch.Tensor([3, 3, 3, 3, 4, 1, 0, 2, 1, 2, 4, 4, 1, 1, - 1, 4, 0, 4, 3, 4, 1, 4, 2, 0, - 3, 4, 1, 1, 0, 3, 2, 1]) + pred= torch.randn(32,5) + arg_max_pred = torch.argmax(pred,dim=-1) + target=np.random.randint(0, high=5, size=(32,1)) + target = torch.from_numpy(target) + metric = ClassifyFPreRecMetric(f_type='macro') metric.evaluate(pred, target) - result_dict = metric.get_metric(reset=True) - ground_truth = {'f': 0.8362782, 'pre': 0.8269841, 'rec': 0.8668831} + result_dict = metric.get_metric() + f1_score = m.f1_score(target.tolist(), arg_max_pred.tolist(), average="macro") + recall = m.recall_score(target.tolist(), arg_max_pred.tolist(), average="macro") + pre = m.precision_score(target.tolist(), arg_max_pred.tolist(), average="macro") + + ground_truth = {'f': f1_score, 'pre': pre, 'rec': recall} for keys in ['f', 'pre', 'rec']: self.assertAlmostEqual(result_dict[keys], ground_truth[keys], delta=0.0001) metric = ClassifyFPreRecMetric(f_type='micro') metric.evaluate(pred, target) - result_dict = metric.get_metric(reset=True) - ground_truth = {'f': 0.84375, 'pre': 0.84375, 'rec': 0.84375} + result_dict = metric.get_metric() + f1_score = m.f1_score(target.tolist(), arg_max_pred.tolist(), average="micro") + recall = m.recall_score(target.tolist(), arg_max_pred.tolist(), average="micro") + pre = m.precision_score(target.tolist(), arg_max_pred.tolist(), average="micro") + + ground_truth = {'f': f1_score, 'pre': pre, 'rec': recall} for keys in ['f', 'pre', 'rec']: self.assertAlmostEqual(result_dict[keys], ground_truth[keys], delta=0.0001) - metric = ClassifyFPreRecMetric(only_gross=False, f_type='micro') + metric = ClassifyFPreRecMetric(only_gross=False, f_type='macro') metric.evaluate(pred, target) result_dict = metric.get_metric(reset=True) - ground_truth = {'f-0': 0.857143, 'pre-0': 0.75, 'rec-0': 1.0, 'f-1': 0.875, 'pre-1': 0.777778, 'rec-1': 1.0, - 'f-2': 0.75, 'pre-2': 0.75, 'rec-2': 0.75, 'f-3': 0.857143, 'pre-3': 0.857143, - 'rec-3': 0.857143, 'f-4': 0.842105, 'pre-4': 1.0, 'rec-4': 0.727273, 'f': 0.84375, - 'pre': 0.84375, 'rec': 0.84375} - for keys in ground_truth.keys(): - self.assertAlmostEqual(result_dict[keys], ground_truth[keys], delta=0.0001) - + ground_truth = m.classification_report(target.tolist(), arg_max_pred.tolist(),output_dict=True) + for keys in result_dict.keys(): + if keys=="f" or "pre" or "rec": + continue + gl=str(keys[-1]) + tmp_d={"p":"precision","r":"recall","f":"f1-score"} + gk=tmp_d[keys[0]] + self.assertAlmostEqual(result_dict[keys], ground_truth[gl][gk], delta=0.0001) From 88b02bbcdfc1f19f52f71d9a38feeffefb32cd1b Mon Sep 17 00:00:00 2001 From: roger Date: Wed, 5 Aug 2020 00:21:51 -0400 Subject: [PATCH 02/10] fix f1 test --- test/core/test_metrics.py | 59 +++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/test/core/test_metrics.py b/test/core/test_metrics.py index 14096ff5..742ab61d 100644 --- a/test/core/test_metrics.py +++ b/test/core/test_metrics.py @@ -564,45 +564,74 @@ def test_case_1(self): # 跑通即可 - class TestClassfiyFPreRecMetric(unittest.TestCase): def test_case_1(self): - - pred= torch.randn(32,5) + pred= torch.tensor([[-0.4375, -0.1779, -1.0985, -1.1592, 0.4910], + [ 1.3410, 0.2889, -0.8667, -1.8580, 0.3029], + [ 0.7459, -1.1957, 0.3231, 0.0308, -0.1847], + [ 1.1439, -0.0057, 0.8203, 0.0312, -1.0051], + [-0.4870, 0.3215, -0.8290, 0.9221, 0.4683], + [ 0.9078, 1.0674, -0.5629, 0.3895, 0.8917], + [-0.7743, -0.4041, -0.9026, 0.2112, 1.0892], + [ 1.8232, -1.4188, -2.5615, -2.4187, 0.5907], + [-1.0592, 0.4164, -0.1192, 1.4238, -0.9258], + [-1.1137, 0.5773, 2.5778, 0.5398, -0.3323], + [-0.3868, -0.5165, 0.2286, -1.3876, 0.5561], + [-0.3304, 1.3619, -1.5744, 0.4902, -0.7661], + [ 1.8387, 0.5234, 0.4269, 1.3748, -1.2793], + [ 0.6692, 0.2571, 1.2425, -0.5894, -0.0184], + [ 0.4165, 0.4084, -0.1280, 1.4489, -2.3058], + [-0.5826, -0.5469, 1.5898, -0.2786, -0.9882], + [-1.5548, -2.2891, 0.2983, -1.2145, -0.1947], + [-0.7222, 2.3543, -0.5801, -0.0640, -1.5614], + [-1.4978, 1.9297, -1.3652, -0.2358, 2.5566], + [ 0.1561, -0.0316, 0.9331, 1.0363, 2.3949], + [ 0.2650, -0.8459, 1.3221, 0.1321, -1.1900], + [ 0.0664, -1.2353, -0.5242, -1.4491, 1.3300], + [-0.2744, 0.0941, 0.7157, 0.1404, 1.2046], + [ 0.9341, -0.6652, 1.4512, 0.9608, -0.3623], + [-1.1641, 0.0873, 0.1163, -0.2068, -0.7002], + [ 1.4775, -2.0025, -0.5634, -0.1589, 0.0247], + [ 1.0151, 1.0304, -0.1042, -0.6955, -0.0629], + [-0.3119, -0.4558, 0.7757, 0.0758, -1.6297], + [ 1.0654, 0.0313, -0.7716, 0.1194, 0.6913], + [-0.8088, -0.6648, -0.5018, -0.0230, -0.8207], + [-0.7753, -0.3508, 1.6163, 0.7158, 1.5207], + [ 0.8692, 0.7718, -0.6734, 0.6515, 0.0641]]) arg_max_pred = torch.argmax(pred,dim=-1) - target=np.random.randint(0, high=5, size=(32,1)) - target = torch.from_numpy(target) + target = torch.tensor([0, 2, 4, 1, 4, 0, 1, 3, 3, 3, 1, 3, 4, 4, 3, 4, 0, 2, 4, 4, 3, 4, 4, 3, + 0, 3, 0, 0, 0, 1, 3, 1]) metric = ClassifyFPreRecMetric(f_type='macro') metric.evaluate(pred, target) result_dict = metric.get_metric() - f1_score = m.f1_score(target.tolist(), arg_max_pred.tolist(), average="macro") - recall = m.recall_score(target.tolist(), arg_max_pred.tolist(), average="macro") - pre = m.precision_score(target.tolist(), arg_max_pred.tolist(), average="macro") + f1_score = 0.1882051282051282 + recall = 0.1619047619047619 + pre = 0.23928571428571427 ground_truth = {'f': f1_score, 'pre': pre, 'rec': recall} for keys in ['f', 'pre', 'rec']: - self.assertAlmostEqual(result_dict[keys], ground_truth[keys], delta=0.0001) + self.assertAlmostEqual(result_dict[keys], ground_truth[keys], delta=0.000001) metric = ClassifyFPreRecMetric(f_type='micro') metric.evaluate(pred, target) result_dict = metric.get_metric() - f1_score = m.f1_score(target.tolist(), arg_max_pred.tolist(), average="micro") - recall = m.recall_score(target.tolist(), arg_max_pred.tolist(), average="micro") - pre = m.precision_score(target.tolist(), arg_max_pred.tolist(), average="micro") + f1_score = 0.21875 + recall = 0.21875 + pre = 0.21875 ground_truth = {'f': f1_score, 'pre': pre, 'rec': recall} for keys in ['f', 'pre', 'rec']: - self.assertAlmostEqual(result_dict[keys], ground_truth[keys], delta=0.0001) + self.assertAlmostEqual(result_dict[keys], ground_truth[keys], delta=0.000001) metric = ClassifyFPreRecMetric(only_gross=False, f_type='macro') metric.evaluate(pred, target) result_dict = metric.get_metric(reset=True) - ground_truth = m.classification_report(target.tolist(), arg_max_pred.tolist(),output_dict=True) + ground_truth = {'0': {'f1-score': 0.13333333333333333, 'precision': 0.125, 'recall': 0.14285714285714285, 'support': 7}, '1': {'f1-score': 0.0, 'precision': 0.0, 'recall': 0.0, 'support': 5}, '2': {'f1-score': 0.0, 'precision': 0.0, 'recall': 0.0, 'support': 2}, '3': {'f1-score': 0.30769230769230765, 'precision': 0.5, 'recall': 0.2222222222222222, 'support': 9}, '4': {'f1-score': 0.5, 'precision': 0.5714285714285714, 'recall': 0.4444444444444444, 'support': 9}, 'macro avg': {'f1-score': 0.1882051282051282, 'precision': 0.23928571428571427, 'recall': 0.1619047619047619, 'support': 32}, 'micro avg': {'f1-score': 0.21875, 'precision': 0.21875, 'recall': 0.21875, 'support': 32}, 'weighted avg': {'f1-score': 0.2563301282051282, 'precision': 0.3286830357142857, 'recall': 0.21875, 'support': 32}} for keys in result_dict.keys(): if keys=="f" or "pre" or "rec": continue gl=str(keys[-1]) tmp_d={"p":"precision","r":"recall","f":"f1-score"} gk=tmp_d[keys[0]] - self.assertAlmostEqual(result_dict[keys], ground_truth[gl][gk], delta=0.0001) + self.assertAlmostEqual(result_dict[keys], ground_truth[gl][gk], delta=0.000001) From cc0b378ed133f56501ac59c86851136e23222d17 Mon Sep 17 00:00:00 2001 From: ROGERDJQ Date: Fri, 7 Aug 2020 14:38:11 +0000 Subject: [PATCH 03/10] f1 fix --- test/core/test_metrics.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/core/test_metrics.py b/test/core/test_metrics.py index 9abf853b..4330ebc2 100644 --- a/test/core/test_metrics.py +++ b/test/core/test_metrics.py @@ -8,7 +8,6 @@ ConfusionMatrixMetric, SpanFPreRecMetric, _accuracy_topk, _pred_topk) from fastNLP.core.vocabulary import Vocabulary -from sklearn import metrics as m def _generate_tags(encoding_type, number_labels=4): From 848d0a707880a97712f3832659844b43a4ffc236 Mon Sep 17 00:00:00 2001 From: ROGERDJQ Date: Sun, 13 Dec 2020 14:55:26 +0000 Subject: [PATCH 04/10] fix fitlogcallback when applied on DistTrainer --- .gitignore | 4 ++-- fastNLP/core/dist_trainer.py | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 17f7654f..555baa26 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -.gitignore - +*.history .DS_Store .ipynb_checkpoints *.pyc @@ -16,3 +15,4 @@ logs/ .fitconfig docs/build +.history/fastNLP/core/dist_trainer_20200502131444.py diff --git a/fastNLP/core/dist_trainer.py b/fastNLP/core/dist_trainer.py index 726a5e60..625754ec 100644 --- a/fastNLP/core/dist_trainer.py +++ b/fastNLP/core/dist_trainer.py @@ -164,10 +164,13 @@ def __init__(self, train_data, model, optimizer=None, loss=None, self.optimizer = optimizer self.sampler = DistributedSampler(self.train_data) - self.data_iterator = self._get_data_iter(self.train_data) + self.data_iteraitor = self._get_data_iter(self.train_data) self.batch_size = self.world_size * self.batch_size_per_gpu self.n_steps = self._get_n_steps() - + self.dev_data = dev_data + self.metrics = metrics + self.test_use_tqdm = True + self.kwargs = dict() # 简而言之 这里使用了建立dict的讨巧的方法,鉴于fitlogcallback中使用了get以避免key 不存在,使用空的dict在callback中会默认返回get的default值 # for evaluation, only run eval on master proc if dev_data and metrics: cb = _TesterCallback( From fb1bc88e3384d8670195a2556fd75378737e7858 Mon Sep 17 00:00:00 2001 From: ROGERDJQ Date: Sun, 13 Dec 2020 15:04:46 +0000 Subject: [PATCH 05/10] small typo --- fastNLP/core/dist_trainer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastNLP/core/dist_trainer.py b/fastNLP/core/dist_trainer.py index 625754ec..4aed8fd8 100644 --- a/fastNLP/core/dist_trainer.py +++ b/fastNLP/core/dist_trainer.py @@ -164,7 +164,7 @@ def __init__(self, train_data, model, optimizer=None, loss=None, self.optimizer = optimizer self.sampler = DistributedSampler(self.train_data) - self.data_iteraitor = self._get_data_iter(self.train_data) + self.data_iterator = self._get_data_iter(self.train_data) self.batch_size = self.world_size * self.batch_size_per_gpu self.n_steps = self._get_n_steps() self.dev_data = dev_data From bbb6d2ee8b42632bd03fc87f5c8900114ff4ef64 Mon Sep 17 00:00:00 2001 From: ROGERDJQ Date: Mon, 14 Dec 2020 23:40:20 +0800 Subject: [PATCH 06/10] Delete .gitignore delete gitignore as required --- .gitignore | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 555baa26..00000000 --- a/.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -*.history -.DS_Store -.ipynb_checkpoints -*.pyc -__pycache__ -*.swp -.vscode/ -.idea/** - -caches - -# fitlog -.fitlog -logs/ -.fitconfig - -docs/build -.history/fastNLP/core/dist_trainer_20200502131444.py From d027a8f35fa6135b67eb7d4e8f07ebeda0263010 Mon Sep 17 00:00:00 2001 From: ROGERDJQ Date: Tue, 15 Dec 2020 07:30:26 +0000 Subject: [PATCH 07/10] =?UTF-8?q?=E5=9B=9E=E9=80=80=E5=8F=96=E6=B6=88.giti?= =?UTF-8?q?gnore=E7=9A=84=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 555baa26..6d8d69cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -*.history .DS_Store .ipynb_checkpoints *.pyc From 6a7a0c0a2790314a7cb5e7a664717fb6d8fa5cc0 Mon Sep 17 00:00:00 2001 From: ROGERDJQ Date: Tue, 15 Dec 2020 07:36:12 +0000 Subject: [PATCH 08/10] =?UTF-8?q?=E9=87=8D=E6=96=B0=E5=8F=96=E6=B6=88.giti?= =?UTF-8?q?gnore=E7=9A=84=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6d8d69cc..7e21723d 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,3 @@ logs/ .fitconfig docs/build -.history/fastNLP/core/dist_trainer_20200502131444.py From 4bc1c90a8f6df35f240b8230bf5709db3d80499f Mon Sep 17 00:00:00 2001 From: ROGERDJQ Date: Tue, 15 Dec 2020 07:47:47 +0000 Subject: [PATCH 09/10] =?UTF-8?q?=E6=81=A2=E5=A4=8Dgitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 7e21723d..17f7654f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.gitignore + .DS_Store .ipynb_checkpoints *.pyc From 33fa2f163f2a9cfc64e3fa0a9496704e79dc6537 Mon Sep 17 00:00:00 2001 From: ROGERDJQ Date: Tue, 15 Dec 2020 07:49:28 +0000 Subject: [PATCH 10/10] fix typo --- fastNLP/core/dist_trainer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastNLP/core/dist_trainer.py b/fastNLP/core/dist_trainer.py index 625754ec..4aed8fd8 100644 --- a/fastNLP/core/dist_trainer.py +++ b/fastNLP/core/dist_trainer.py @@ -164,7 +164,7 @@ def __init__(self, train_data, model, optimizer=None, loss=None, self.optimizer = optimizer self.sampler = DistributedSampler(self.train_data) - self.data_iteraitor = self._get_data_iter(self.train_data) + self.data_iterator = self._get_data_iter(self.train_data) self.batch_size = self.world_size * self.batch_size_per_gpu self.n_steps = self._get_n_steps() self.dev_data = dev_data