def test_fit_without_trusted_region(self): gcr = GaussianCNNRegressorWithModel( input_shape=(10, 10, 3), num_filters=(3, 6), filter_dims=(3, 3), strides=(1, 1), padding='SAME', hidden_sizes=(32, ), output_dim=1, adaptive_std=False, use_trust_region=False) train_data, test_data = get_train_test_data() observations, returns = train_data for _ in range(20): gcr.fit(observations, returns) paths, expected = test_data prediction = gcr.predict(paths['observations']) average_error = 0.0 for i in range(len(expected)): average_error += np.abs(expected[i] - prediction[i]) average_error /= len(expected) assert average_error <= 0.05
class GaussianCNNBaselineWithModel(Baseline): """ GaussianCNNBaseline With Model. It fits the input data to a gaussian distribution estimated by a CNN. Args: env_spec (garage.envs.env_spec.EnvSpec): Environment specification. subsample_factor (float): The factor to subsample the data. By default it is 1.0, which means using all the data. regressor_args (dict): Arguments for regressor. """ def __init__( self, env_spec, subsample_factor=1., regressor_args=None, name='GaussianCNNBaselineWithModel', ): super().__init__(env_spec) if regressor_args is None: regressor_args = dict() self._regressor = GaussianCNNRegressorWithModel( input_shape=(env_spec.observation_space.shape), output_dim=1, name=name, **regressor_args) self.name = name @overrides def fit(self, paths): """Fit regressor based on paths.""" observations = np.concatenate([p['observations'] for p in paths]) returns = np.concatenate([p['returns'] for p in paths]) self._regressor.fit(observations, returns.reshape((-1, 1))) @overrides def predict(self, path): """Predict value based on paths.""" return self._regressor.predict(path['observations']).flatten() @overrides def get_param_values(self, **tags): """Get parameter values.""" return self._regressor.get_param_values(**tags) @overrides def set_param_values(self, flattened_params, **tags): """Set parameter values to val.""" self._regressor.set_param_values(flattened_params, **tags) @overrides def get_params_internal(self, **tags): """Get parameter values.""" return self._regressor.get_params_internal(**tags)
def test_fit_unnormalized(self): gcr = GaussianCNNRegressorWithModel( input_shape=(10, 10, 3), num_filters=(3, 6), filter_dims=(3, 3), strides=(1, 1), padding='SAME', hidden_sizes=(32, ), output_dim=1, adaptive_std=True, normalize_inputs=False, normalize_outputs=False) train_data, test_data = get_train_test_data() observations, returns = train_data for _ in range(20): gcr.fit(observations, returns) paths, expected = test_data prediction = gcr.predict(paths['observations']) average_error = 0.0 for i in range(len(expected)): average_error += np.abs(expected[i] - prediction[i]) average_error /= len(expected) assert average_error <= 0.1 x_mean = self.sess.run(gcr.model.networks['default'].x_mean) x_mean_expected = np.zeros_like(x_mean) x_std = self.sess.run(gcr.model.networks['default'].x_std) x_std_expected = np.ones_like(x_std) assert np.array_equal(x_mean, x_mean_expected) assert np.array_equal(x_std, x_std_expected) y_mean = self.sess.run(gcr.model.networks['default'].y_mean) y_mean_expected = np.zeros_like(y_mean) y_std = self.sess.run(gcr.model.networks['default'].y_std) y_std_expected = np.ones_like(y_std) assert np.allclose(y_mean, y_mean_expected) assert np.allclose(y_std, y_std_expected)