I am following a tutorial from a youtuber where the soft update of the target networks are perfromed by this function:
    def update_network_parameters(self, tau=None):
        if tau is None:
            tau = self.tau

        weights = []
        targets = self.target_actor.weights
        for i, weight in enumerate(self.actor.weights):
            weights.append(weight * tau + targets[i]*(1-tau))
        self.target_actor.set_weights(weights)

        weights = []
        targets = self.target_critic.weights
        for i, weight in enumerate(self.critic.weights):
            weights.append(weight * tau + targets[i]*(1-tau))
        self.target_critic.set_weights(weights)

But idk if that’s the proper way. What if there are NoisyDense layers or Normalization layers? Are they updated also using this approach? Is there somewhere a proper implementation? Maybe its already somewhere in the tf lib and idk it…