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)
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)
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_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)