예제 #1
0
 def sync_target_network(self) -> None:
     """Synchronize target network with current network."""
     synchronize_parameters(
         src=self.model.q_function,
         dst=self.target_model,
         method=self.target_update_method,
         tau=self.soft_update_tau,
     )
예제 #2
0
 def sync_target_network(self):
     """Synchronize target network with current network."""
     synchronize_parameters(
         src=self.q_func1,
         dst=self.target_q_func1,
         method="soft",
         tau=self.soft_update_tau,
     )
     synchronize_parameters(
         src=self.q_func2,
         dst=self.target_q_func2,
         method="soft",
         tau=self.soft_update_tau,
     )
예제 #3
0
파일: dqn.py 프로젝트: Mo-youssef/DQN
    def sync_target_network(self):
        """Synchronize target network with current network."""
        if self.target_model is None:
            self.target_model = copy.deepcopy(self.model)

            def flatten_parameters(mod):
                if isinstance(mod, torch.nn.RNNBase):
                    mod.flatten_parameters()

            # RNNBase.flatten_parameters must be called again after deep-copy.
            # See: https://discuss.pytorch.org/t/why-do-we-need-flatten-parameters-when-using-rnn-with-dataparallel/46506  # NOQA
            self.target_model.apply(flatten_parameters)
            # set target n/w to evaluate only.
            self.target_model.eval()
        else:
            synchronize_parameters(
                src=self.model,
                dst=self.target_model,
                method=self.target_update_method,
                tau=self.soft_update_tau,
            )