def test_metric_tracker_save_and_load(): metric_tracker = MetricTracker(patient=1) for metric in METRICS: metric_tracker.add_metric(**metric) if metric["epoch"] > 4: ASSERT.assertTrue(metric_tracker.early_stopping(metric["epoch"])) else: ASSERT.assertFalse(metric_tracker.early_stopping(metric["epoch"])) if metric_tracker.early_stopping(metric["epoch"]): break saved_file_path = os.path.join(ROOT_PATH, "data/easytext/tests/trainer/metric_tracker.json") metric_tracker.save(saved_file_path) loaded_metric_tracker = MetricTracker.from_file(saved_file_path) best = metric_tracker.best() loaded_best = loaded_metric_tracker.best() ASSERT.assertEqual(best.epoch, loaded_best.epoch) ASSERT.assertDictEqual(best.train_metric, loaded_best.train_metric) ASSERT.assertDictEqual(best.validation_metric, loaded_best.validation_metric) ASSERT.assertEqual(best.train_model_target_metric.name, loaded_best.train_model_target_metric.name) ASSERT.assertEqual(best.train_model_target_metric.value, loaded_best.train_model_target_metric.value) ASSERT.assertEqual(best.validation_model_target_metric.name, loaded_best.validation_model_target_metric.name) ASSERT.assertEqual(best.validation_model_target_metric.value, loaded_best.validation_model_target_metric.value)
def test_metric_tracker_patient(): metric_tracker = MetricTracker(patient=1) for metric in METRICS: metric_tracker.add_metric(**metric) if metric["epoch"] > 4: ASSERT.assertTrue(metric_tracker.early_stopping(metric["epoch"])) else: ASSERT.assertFalse(metric_tracker.early_stopping(metric["epoch"])) if metric_tracker.early_stopping(metric["epoch"]): break expect = {"epoch": 3, "train_metric": {"acc": 0.85}, "train_model_target_metric": ModelTargetMetric(metric_name="acc", metric_value=0.85), "validation_metric": {"acc": 0.60}, "validation_model_target_metric": ModelTargetMetric(metric_name="acc", metric_value=0.60)} best = metric_tracker.best() ASSERT.assertEqual(expect["epoch"], best.epoch) ASSERT.assertDictEqual(expect["train_metric"], best.train_metric) ASSERT.assertDictEqual(expect["validation_metric"], best.validation_metric) ASSERT.assertEqual(expect["train_model_target_metric"].name, best.train_model_target_metric.name) ASSERT.assertEqual(expect["train_model_target_metric"].value, best.train_model_target_metric.value) ASSERT.assertEqual(expect["validation_model_target_metric"].name, best.validation_model_target_metric.name) ASSERT.assertEqual(expect["validation_model_target_metric"].value, best.validation_model_target_metric.value)
def test_is_tensor_equal(): """ 测试两个 tensor 是否相等 :return: """ x = torch.tensor([1, 2, 3]) y = torch.tensor([1, 2, 3]) equal = tensor_util.is_tensor_equal(tensor1=x, tensor2=y, epsilon=0) ASSERT.assertTrue(equal) x = torch.tensor([1, 2, 3]) y = torch.tensor([2, 2, 3]) equal = tensor_util.is_tensor_equal(tensor1=x, tensor2=y, epsilon=0) ASSERT.assertFalse(equal) x = torch.tensor([1.0001, 2.0001, 3.0001]) y = torch.tensor([1., 2., 3.]) equal = tensor_util.is_tensor_equal(tensor1=x, tensor2=y, epsilon=1e-3) ASSERT.assertTrue(equal) equal = tensor_util.is_tensor_equal(tensor1=x, tensor2=y, epsilon=1e-4) ASSERT.assertFalse(equal)