Пример #1
0
    def find_learning_rate(self, train_data: TargetCollection,
                           results_dir: Path, 
                           find_lr_kwargs: Optional[Dict[str, Any]] = None
                           ) -> None:
        '''
        Given the training data it will plot learning rate against loss to allow 
        you to find the best learning rate.

        This is just a wrapper around 
        allennlp.commands.find_learning_rate.find_learning_rate_model method.

        :param train_data: Training data.
        :param results_dir: Directory to store the results of the learning rate
                            findings.
        :param find_lr_kwargs: Dictionary of keyword arguments to give to the 
                               allennlp.commands.find_learning_rate.find_learning_rate_model
                               method.
        '''
        model_params = self._preprocess_and_load_param_file(self._param_fp)
        with tempfile.TemporaryDirectory() as temp_dir:
            train_fp = Path(temp_dir, 'train_data.json')
            self._data_to_json(train_data, train_fp)
            model_params['train_data_path'] = str(train_fp.resolve())
            if find_lr_kwargs is None:
                find_learning_rate_model(model_params, results_dir)
            else:
                find_learning_rate_model(model_params, results_dir, **find_lr_kwargs)
 def test_find_learning_rate_multi_gpu(self):
     params = self.params()
     params["trainer"]["cuda_device"] = [0, 1]
     find_learning_rate_model(params,
                              os.path.join(self.TEST_DIR, 'test_find_learning_rate_multi_gpu'),
                              start_lr=1e-5,
                              end_lr=1,
                              num_batches=100,
                              linear_steps=True,
                              stopping_factor=None,
                              force=False)
Пример #3
0
 def test_find_learning_rate_multi_gpu(self):
     params = self.params()
     params["trainer"]["cuda_device"] = [0, 1]
     find_learning_rate_model(params,
                              os.path.join(
                                  self.TEST_DIR,
                                  'test_find_learning_rate_multi_gpu'),
                              start_lr=1e-5,
                              end_lr=1,
                              num_batches=100,
                              linear_steps=True,
                              stopping_factor=None,
                              force=False)
Пример #4
0
    def test_find_learning_rate(self):
        find_learning_rate_model(
            self.params(),
            os.path.join(self.TEST_DIR, "test_find_learning_rate"),
            start_lr=1e-5,
            end_lr=1,
            num_batches=100,
            linear_steps=True,
            stopping_factor=None,
            force=False,
        )

        # It's OK if serialization dir exists but is empty:
        serialization_dir2 = os.path.join(self.TEST_DIR, "empty_directory")
        assert not os.path.exists(serialization_dir2)
        os.makedirs(serialization_dir2)
        find_learning_rate_model(
            self.params(),
            serialization_dir2,
            start_lr=1e-5,
            end_lr=1,
            num_batches=100,
            linear_steps=True,
            stopping_factor=None,
            force=False,
        )

        # It's not OK if serialization dir exists and has junk in it non-empty:
        serialization_dir3 = os.path.join(self.TEST_DIR, "non_empty_directory")
        assert not os.path.exists(serialization_dir3)
        os.makedirs(serialization_dir3)
        with open(os.path.join(serialization_dir3, "README.md"), "w") as f:
            f.write("TEST")

        with pytest.raises(ConfigurationError):
            find_learning_rate_model(
                self.params(),
                serialization_dir3,
                start_lr=1e-5,
                end_lr=1,
                num_batches=100,
                linear_steps=True,
                stopping_factor=None,
                force=False,
            )

        # ... unless you use the --force flag.
        find_learning_rate_model(
            self.params(),
            serialization_dir3,
            start_lr=1e-5,
            end_lr=1,
            num_batches=100,
            linear_steps=True,
            stopping_factor=None,
            force=True,
        )
Пример #5
0
    def test_find_learning_rate_multi_gpu(self):
        params = self.params()
        del params["trainer"]["cuda_device"]
        params["distributed"] = Params({})
        params["distributed"]["cuda_devices"] = [0, 1]

        with pytest.raises(AssertionError) as execinfo:
            find_learning_rate_model(
                params,
                os.path.join(self.TEST_DIR, "test_find_learning_rate_multi_gpu"),
                start_lr=1e-5,
                end_lr=1,
                num_batches=100,
                linear_steps=True,
                stopping_factor=None,
                force=False,
            )
        assert "DistributedDataParallel" in str(execinfo.value)
    def test_find_learning_rate(self):
        find_learning_rate_model(self.params(),
                                 os.path.join(self.TEST_DIR, 'test_find_learning_rate'),
                                 start_lr=1e-5,
                                 end_lr=1,
                                 num_batches=100,
                                 linear_steps=True,
                                 stopping_factor=None,
                                 force=False)

        # It's OK if serialization dir exists but is empty:
        serialization_dir2 = os.path.join(self.TEST_DIR, 'empty_directory')
        assert not os.path.exists(serialization_dir2)
        os.makedirs(serialization_dir2)
        find_learning_rate_model(self.params(), serialization_dir2,
                                 start_lr=1e-5,
                                 end_lr=1,
                                 num_batches=100,
                                 linear_steps=True,
                                 stopping_factor=None,
                                 force=False)

        # It's not OK if serialization dir exists and has junk in it non-empty:
        serialization_dir3 = os.path.join(self.TEST_DIR, 'non_empty_directory')
        assert not os.path.exists(serialization_dir3)
        os.makedirs(serialization_dir3)
        with open(os.path.join(serialization_dir3, 'README.md'), 'w') as f:
            f.write("TEST")

        with pytest.raises(ConfigurationError):
            find_learning_rate_model(self.params(), serialization_dir3,
                                     start_lr=1e-5,
                                     end_lr=1,
                                     num_batches=100,
                                     linear_steps=True,
                                     stopping_factor=None,
                                     force=False)

        # ... unless you use the --force flag.
        find_learning_rate_model(self.params(), serialization_dir3,
                                 start_lr=1e-5,
                                 end_lr=1,
                                 num_batches=100,
                                 linear_steps=True,
                                 stopping_factor=None,
                                 force=True)
    def test_find_learning_rate(self):
        find_learning_rate_model(self.params(),
                                 serialization_dir=os.path.join(self.TEST_DIR, 'test_find_learning_rate'),
                                 start_lr=1e-5,
                                 end_lr=1,
                                 num_batches=100,
                                 linear_steps=True,
                                 stopping_factor=None)

        # It's OK if serialization dir exists but is empty:
        serialization_dir2 = os.path.join(self.TEST_DIR, 'empty_directory')
        assert not os.path.exists(serialization_dir2)
        os.makedirs(serialization_dir2)
        find_learning_rate_model(self.params(),
                                 serialization_dir=serialization_dir2,
                                 start_lr=1e-5,
                                 end_lr=1,
                                 num_batches=100,
                                 linear_steps=True,
                                 stopping_factor=None)

        # It's not OK if serialization dir exists and has junk in it non-empty:
        serialization_dir3 = os.path.join(self.TEST_DIR, 'non_empty_directory')
        assert not os.path.exists(serialization_dir3)
        os.makedirs(serialization_dir3)
        with open(os.path.join(serialization_dir3, 'README.md'), 'w') as f:
            f.write("TEST")

        with pytest.raises(ConfigurationError):
            find_learning_rate_model(self.params(),
                                     serialization_dir=serialization_dir3,
                                     start_lr=1e-5,
                                     end_lr=1,
                                     num_batches=100,
                                     linear_steps=True,
                                     stopping_factor=None)