def test_obs_not_image(self): env = self.env with mock.patch(('garage.tf.models.' 'categorical_cnn_model.CNNModel._build'), autospec=True, side_effect=CNNModel._build) as build: qf = DiscreteCNNQFunction(env_spec=env.spec, filters=((5, (3, 3)), ), strides=(2, ), dueling=False) normalized_obs = build.call_args_list[0][0][1] input_ph = qf.input assert input_ph == normalized_obs fake_obs = [np.full(env.spec.observation_space.shape, 255)] assert (self.sess.run(normalized_obs, feed_dict={input_ph: fake_obs}) == 255.).all() obs_dim = env.spec.observation_space.shape state_input = tf.compat.v1.placeholder(tf.float32, shape=(None, ) + obs_dim) qf.get_qval_sym(state_input, name='another') normalized_obs = build.call_args_list[1][0][1] fake_obs = [np.full(env.spec.observation_space.shape, 255)] assert (self.sess.run(normalized_obs, feed_dict={state_input: fake_obs}) == 255).all()
def test_obs_is_image(self): image_env = TfEnv(DummyDiscretePixelEnv(), is_image=True) with mock.patch(('garage.tf.models.' 'categorical_cnn_model.CNNModel._build'), autospec=True, side_effect=CNNModel._build) as build: qf = DiscreteCNNQFunction(env_spec=image_env.spec, filter_dims=(3, ), num_filters=(5, ), strides=(2, ), dueling=False) normalized_obs = build.call_args_list[0][0][1] input_ph = qf.input assert input_ph != normalized_obs fake_obs = [np.full(image_env.spec.observation_space.shape, 255)] assert (self.sess.run(normalized_obs, feed_dict={input_ph: fake_obs}) == 1.).all() obs_dim = image_env.spec.observation_space.shape state_input = tf.compat.v1.placeholder(tf.uint8, shape=(None, ) + obs_dim) qf.get_qval_sym(state_input, name='another') normalized_obs = build.call_args_list[1][0][1] fake_obs = [np.full(image_env.spec.observation_space.shape, 255)] assert (self.sess.run(normalized_obs, feed_dict={state_input: fake_obs}) == 1.).all()
def test_get_qval_sym(self, filters, strides): with mock.patch(('garage.tf.q_functions.' 'discrete_cnn_q_function.CNNModel'), new=SimpleCNNModel): with mock.patch(('garage.tf.q_functions.' 'discrete_cnn_q_function.MLPModel'), new=SimpleMLPModel): qf = DiscreteCNNQFunction(env_spec=self.env.spec, filters=filters, strides=strides, dueling=False) output1 = self.sess.run(qf.q_vals, feed_dict={qf.input: [self.obs]}) obs_dim = self.env.observation_space.shape action_dim = self.env.action_space.n input_var = tf.compat.v1.placeholder(tf.float32, shape=(None, ) + obs_dim) q_vals = qf.get_qval_sym(input_var, 'another') output2 = self.sess.run(q_vals, feed_dict={input_var: [self.obs]}) expected_output = np.full(action_dim, 0.5) assert np.array_equal(output1, output2) assert np.array_equal(output2[0], expected_output)
def test_obs_not_image(self): env = self.env with mock.patch(('garage.tf.policies.' 'categorical_cnn_policy.CNNModel._build'), autospec=True, side_effect=CNNModel._build) as build: qf = DiscreteCNNQFunction(env_spec=env.spec, filter_dims=(3, ), num_filters=(5, ), strides=(2, ), dueling=False) normalized_obs = build.call_args_list[0][0][1] input_ph = tf.compat.v1.get_default_graph().get_tensor_by_name( 'obs:0') fake_obs = [np.full(env.spec.observation_space.shape, 255)] assert (self.sess.run(normalized_obs, feed_dict={input_ph: fake_obs}) == 255.).all() obs_dim = env.spec.observation_space.shape state_input = tf.compat.v1.placeholder(tf.float32, shape=(None, ) + obs_dim) qf.get_qval_sym(state_input, name='another') normalized_obs = build.call_args_list[1][0][1] input_ph = tf.compat.v1.get_default_graph().get_tensor_by_name( 'Placeholder:0') fake_obs = [np.full(env.spec.observation_space.shape, 255)] assert (self.sess.run(normalized_obs, feed_dict={input_ph: fake_obs}) == 255).all()