(self, mode)
| 589 | self._initialize(self._progs[mode], mode) |
| 590 | |
| 591 | def _make_program(self, mode): |
| 592 | prog = self._progs.get(mode, None) |
| 593 | if prog is not None: |
| 594 | return |
| 595 | |
| 596 | prog = self._orig_prog.clone() |
| 597 | |
| 598 | losses = [] |
| 599 | metrics = [] |
| 600 | prog_param = prog.get_all_parameter_values() |
| 601 | |
| 602 | named_sublayers = self.model.network.named_sublayers( |
| 603 | prefix='', |
| 604 | include_self=True, |
| 605 | remove_duplicate=True, |
| 606 | ) |
| 607 | for layer_prefix, sublayer in named_sublayers: |
| 608 | params = sublayer._parameters.items() |
| 609 | for key, param in params: |
| 610 | sublayer._parameters[key] = prog_param[param.name] |
| 611 | |
| 612 | with base.program_guard(prog, self._startup_prog): |
| 613 | inputs = self.model._inputs |
| 614 | labels = self.model._labels if self.model._labels else [] |
| 615 | inputs = [k._create_feed_layer() for k in to_list(inputs)] |
| 616 | labels = [k._create_feed_layer() for k in to_list(labels)] |
| 617 | self._label_vars[mode] = labels |
| 618 | |
| 619 | if mode == 'train' and self.model._optimizer: |
| 620 | opt_param = [] |
| 621 | for key, value in prog_param.items(): |
| 622 | opt_param.append(value) |
| 623 | |
| 624 | self.model._optimizer._parameter_list = list(opt_param) |
| 625 | |
| 626 | if self._amp_level != "O0" and core.is_compiled_with_cuda: |
| 627 | self.model.network, self.model._optimizer = ( |
| 628 | paddle.amp.decorate( |
| 629 | models=self.model.network, |
| 630 | optimizers=self.model._optimizer, |
| 631 | level=self._amp_level, |
| 632 | ) |
| 633 | ) |
| 634 | |
| 635 | with paddle.amp.auto_cast( |
| 636 | level=self._amp_level, dtype='float16', use_promote=True |
| 637 | ): |
| 638 | outputs = to_list(self.model.network.forward(*inputs)) |
| 639 | |
| 640 | if mode != 'test' and self.model._loss: |
| 641 | losses = self.model._loss(*(outputs + labels)) |
| 642 | |
| 643 | if mode != 'test': |
| 644 | for metric in self.model._metrics: |
| 645 | metrics.append( |
| 646 | to_list(metric.compute(*(outputs + labels))) |
| 647 | ) |
| 648 | else: |
no test coverage detected