| | |
| | |
| | |
| | |
| |
|
| | import logging |
| | import unittest |
| |
|
| | from fairseq.dataclass.utils import convert_namespace_to_omegaconf |
| | from fairseq.models.transformer import TransformerModel |
| | from tests.test_sequence_generator import get_dummy_task_and_parser |
| |
|
| |
|
| | class TestInferenceDropout(unittest.TestCase): |
| | def setUp(self): |
| | self.task, self.parser = get_dummy_task_and_parser() |
| | TransformerModel.add_args(self.parser) |
| | self.args = self.parser.parse_args([]) |
| | self.args.encoder_layers = 2 |
| | self.args.decoder_layers = 1 |
| | logging.disable(logging.CRITICAL) |
| |
|
| | def tearDown(self): |
| | logging.disable(logging.NOTSET) |
| |
|
| | def test_sets_inference_dropout_to_true(self): |
| | self.args.retain_dropout = True |
| | self.transformer_model = TransformerModel.build_model(self.args, self.task) |
| | cfg = convert_namespace_to_omegaconf(self.args) |
| | self.transformer_model.prepare_for_inference_(cfg) |
| | assert self.transformer_model.encoder.dropout_module.apply_during_inference |
| | assert self.transformer_model.decoder.dropout_module.apply_during_inference |
| | for layer in self.transformer_model.encoder.layers: |
| | assert layer.dropout_module.apply_during_inference |
| |
|
| | def test_inference_dropout_false_by_default(self): |
| | self.transformer_model = TransformerModel.build_model(self.args, self.task) |
| | cfg = convert_namespace_to_omegaconf(self.args) |
| | self.transformer_model.prepare_for_inference_(cfg) |
| | assert not self.transformer_model.encoder.dropout_module.apply_during_inference |
| | assert not self.transformer_model.decoder.dropout_module.apply_during_inference |
| | for layer in self.transformer_model.encoder.layers: |
| | assert not layer.dropout_module.apply_during_inference |
| | for layer in self.transformer_model.decoder.layers: |
| | assert not layer.dropout_module.apply_during_inference |
| |
|
| | def test_applies_training_mode(self): |
| | self.transformer_model = TransformerModel.build_model(self.args, self.task) |
| | assert self.transformer_model.encoder.dropout_module.training |
| | for layer in self.transformer_model.encoder.layers: |
| | assert layer.dropout_module.training |
| |
|
| | self.transformer_model.eval() |
| | assert not self.transformer_model.decoder.dropout_module.training |
| | for layer in self.transformer_model.encoder.layers: |
| | assert not layer.dropout_module.training |
| |
|
| | def test_retain_modules(self): |
| | self.args.retain_dropout = True |
| | self.args.retain_dropout_modules = [ |
| | "TransformerEncoder", |
| | "TransformerEncoderLayer", |
| | ] |
| | self.transformer_model = TransformerModel.build_model(self.args, self.task) |
| | cfg = convert_namespace_to_omegaconf(self.args) |
| | self.transformer_model.prepare_for_inference_(cfg) |
| | assert self.transformer_model.encoder.dropout_module.apply_during_inference |
| | assert not self.transformer_model.decoder.dropout_module.apply_during_inference |
| | for layer in self.transformer_model.decoder.layers: |
| | assert not layer.dropout_module.apply_during_inference |
| |
|