Skip to content

Commit 05daa55

Browse files
authored
Bound temperature (#142)
* Bump up tensorflow requirements * Use exp-transformed log alpha to guarantee its positivity * Fix preprocessor serialization in BasePolicy * Change the SAC loss averaging to match the old SAC code * Convert SAC._alpha to tensor for diagnostics * Fix SAC alpha restore * Update tf versions
1 parent 0596f68 commit 05daa55

6 files changed

Lines changed: 21 additions & 20 deletions

File tree

examples/development/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ def _restore_algorithm(self, checkpoint_dir):
213213
)
214214

215215
self.algorithm._alpha_optimizer.apply_gradients([(
216-
tf.zeros_like(self.algorithm._alpha), self.algorithm._alpha
216+
tf.zeros_like(self.algorithm._log_alpha), self.algorithm._log_alpha
217217
)])
218218
self.algorithm._policy_optimizer.apply_gradients([
219219
(tf.zeros_like(variable), variable)

examples/development/main_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def test_checkpoint_dict(self):
129129
for initial_Q_weights, Q_weights in zip(initial_Qs_weights, Qs_weights):
130130
assert_weights_not_equal(initial_Q_weights, Q_weights)
131131

132-
experiment_runner.algorithm._alpha.assign(5.0)
132+
experiment_runner.algorithm._log_alpha.assign(tf.math.log(5.0))
133133
expected_alpha_value = 5.0
134134
self.assertEqual(
135135
experiment_runner.algorithm._alpha.numpy(),

requirements.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ fasteners==0.15
2424
filelock==3.0.12
2525
funcsigs==1.0.2
2626
future==0.18.2
27-
gast==0.2.2
27+
gast>=0.3.2
2828
gitdb2==2.0.6
2929
GitPython==3.1.0
3030
glfw==1.9.1
@@ -104,10 +104,10 @@ six==1.13.0
104104
smmap2==2.0.5
105105
tabulate==0.8.6
106106
tensorboard==2.2.0
107-
tensorflow==2.2.0rc2
108-
tensorflow-addons==0.8.3
109-
tensorflow-estimator==2.2.0rc0
110-
tfp-nightly>=0.10.0.dev20200313
107+
tensorflow==2.2.0rc4
108+
tensorflow-addons==0.9.1
109+
tensorflow-estimator==2.2.0
110+
tensorflow-probability==0.10.0rc1
111111
termcolor==1.1.0
112112
tqdm==4.41.1
113113
urllib3==1.24.3

setup.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@
5050
'scikit-video>=1.1.11',
5151
'scipy>=1.4.1',
5252
'tensorflow',
53-
# 'tensorflow-probability',
54-
'tfp-nightly',
53+
'tensorflow-probability>=0.10.0rc0',
5554
),
5655
zip_safe=True,
5756
license='MIT'

softlearning/algorithms/sac.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

softlearning/policies/base_policy.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ def get_config(self):
197197
'input_shapes': self._input_shapes,
198198
'output_shape': self._output_shape,
199199
'observation_keys': self._observation_keys,
200-
# 'preprocessors': preprocessors.serialize(self._preprocessors),
201-
'preprocessors': self._preprocessors,
200+
'preprocessors': tree.map(
201+
preprocessors_lib.serialize, self._preprocessors),
202202
'name': self._name,
203203
}
204204
return config

0 commit comments

Comments
 (0)