@@ -131,7 +131,8 @@ def __init__(
131131 learning_rate = self ._policy_lr ,
132132 name = "policy_optimizer" )
133133
134- self ._alpha = tf .Variable (tf .exp (0.0 ), name = 'alpha' )
134+ self ._log_alpha = tf .Variable (0.0 )
135+ self ._alpha = tfp .util .DeferredTensor (self ._log_alpha , tf .exp )
135136
136137 self ._alpha_optimizer = tf .optimizers .Adam (
137138 self ._alpha_lr , name = 'alpha_optimizer' )
@@ -188,10 +189,11 @@ def _update_critic(self, batch):
188189 for Q , optimizer in zip (self ._Qs , self ._Q_optimizers ):
189190 with tf .GradientTape () as tape :
190191 Q_values = Q .values (observations , actions )
191- Q_losses = (
192- 0.5 * tf .losses .MSE (y_true = Q_targets , y_pred = Q_values ))
192+ Q_losses = 0.5 * (
193+ tf .losses .MSE (y_true = Q_targets , y_pred = Q_values ))
194+ Q_loss = tf .nn .compute_average_loss (Q_losses )
193195
194- gradients = tape .gradient (Q_losses , Q .trainable_variables )
196+ gradients = tape .gradient (Q_loss , Q .trainable_variables )
195197 optimizer .apply_gradients (zip (gradients , Q .trainable_variables ))
196198 Qs_losses .append (Q_losses )
197199 Qs_values .append (Q_values )
@@ -217,8 +219,8 @@ def _update_actor(self, batch):
217219 Qs_log_targets = tuple (
218220 Q .values (observations , actions ) for Q in self ._Qs )
219221 Q_log_targets = tf .reduce_min (Qs_log_targets , axis = 0 )
220-
221222 policy_losses = self ._alpha * log_pis - Q_log_targets
223+ policy_loss = tf .nn .compute_average_loss (policy_losses )
222224
223225 tf .debugging .assert_shapes ((
224226 (actions , ('B' , 'nA' )),
@@ -227,7 +229,7 @@ def _update_actor(self, batch):
227229 ))
228230
229231 policy_gradients = tape .gradient (
230- policy_losses , self ._policy .trainable_variables )
232+ policy_loss , self ._policy .trainable_variables )
231233
232234 self ._policy_optimizer .apply_gradients (zip (
233235 policy_gradients , self ._policy .trainable_variables ))
@@ -251,9 +253,9 @@ def _update_alpha(self, batch):
251253 # large learning rate.
252254 alpha_loss = tf .nn .compute_average_loss (alpha_losses )
253255
254- alpha_gradients = tape .gradient (alpha_loss , [self ._alpha ])
256+ alpha_gradients = tape .gradient (alpha_loss , [self ._log_alpha ])
255257 self ._alpha_optimizer .apply_gradients (zip (
256- alpha_gradients , [self ._alpha ]))
258+ alpha_gradients , [self ._log_alpha ]))
257259
258260 return alpha_losses
259261
@@ -276,7 +278,7 @@ def _do_updates(self, batch):
276278 ('Q_value-mean' , tf .reduce_mean (Qs_values )),
277279 ('Q_loss-mean' , tf .reduce_mean (Qs_losses )),
278280 ('policy_loss-mean' , tf .reduce_mean (policy_losses )),
279- ('alpha' , self ._alpha ),
281+ ('alpha' , tf . convert_to_tensor ( self ._alpha ) ),
280282 ('alpha_loss-mean' , tf .reduce_mean (alpha_losses )),
281283 ))
282284 return diagnostics
0 commit comments