stable-baselines3/torchy_baselines/common/utils.py

42 lines
1.1 KiB
Python
Raw Normal View History

2019-09-05 15:29:41 +00:00
import random
2019-09-18 13:35:17 +00:00
import scipy.signal
2019-09-05 15:29:41 +00:00
import torch as th
import numpy as np
def set_random_seed(seed, using_cuda=False):
"""
Seed the different random generators
:param seed: (int)
:param using_cuda: (bool)
"""
random.seed(seed)
np.random.seed(seed)
th.manual_seed(seed)
if using_cuda:
# Make CuDNN Determinist
th.backends.cudnn.deterministic = True
th.cuda.manual_seed(seed)
2019-09-18 13:35:17 +00:00
2019-09-19 09:43:27 +00:00
# From stable baselines
def explained_variance(y_pred, y_true):
"""
Computes fraction of variance that ypred explains about y.
Returns 1 - Var[y-ypred] / Var[y]
interpretation:
ev=0 => might as well have predicted zero
ev=1 => perfect prediction
ev<0 => worse than just predicting zero
:param y_pred: (np.ndarray) the prediction
:param y_true: (np.ndarray) the expected value
:return: (float) explained variance of ypred and y
"""
assert y_true.ndim == 1 and y_pred.ndim == 1
var_y = np.var(y_true)
return np.nan if var_y == 0 else 1 - np.var(y_true - y_pred) / var_y