def get_diagnostics(self, paths, prefix=''): statistics = OrderedDict() # for stat_name in [ # 'touch_distance', # 'hand_success', # 'obj_success', # 'hand_and_obj_success', # 'touch_success', # 'hand_distance', # 'obj_distance', # 'hand_and_obj_distance', # 'total_pickups', # ]: # these are copied from saywer_pickup_and_place.py for stat_name in [ 'ag_state', 'g_state', 'image_dist', 'image_success', ]: stat_name = stat_name stat = get_stat_in_paths(paths, 'env_infos', stat_name) statistics.update( create_stats_ordered_dict( '%s%s' % (prefix, stat_name), stat, always_show_all_stats=True, )) statistics.update( create_stats_ordered_dict( 'Final %s%s' % (prefix, stat_name), [s[-1] for s in stat], always_show_all_stats=True, )) return statistics
def goal_conditioned_diagnostics(self, paths, goals): statistics = OrderedDict() stat_to_lists = defaultdict(list) for path, goal in zip(paths, goals): difference = path['observations'] - goal for i in range(len(self._all_objects)): distance = np.linalg.norm(difference[:, 2 * i:2 * i + 2], axis=-1) distance_key = 'distance_to_target_obj_{}'.format(i) stat_to_lists[distance_key].append(distance) success_key = 'success_obj_{}'.format(i) stat_to_lists[success_key].append( distance < self.success_threshold) for stat_name, stat_list in stat_to_lists.items(): statistics.update( create_stats_ordered_dict( stat_name, stat_list, always_show_all_stats=True, )) statistics.update( create_stats_ordered_dict( '{}/final'.format(stat_name), [s[-1:] for s in stat_list], always_show_all_stats=True, exclude_max_min=True, )) statistics.update( create_stats_ordered_dict( '{}/initial'.format(stat_name), [s[:1] for s in stat_list], always_show_all_stats=True, exclude_max_min=True, )) return statistics
def get_diagnostics(self, paths, prefix=''): statistics = OrderedDict() for stat_name in [ 'touch_distance', 'hand_success', 'obj_success', 'hand_and_obj_success', 'touch_success', 'hand_distance', 'obj_distance', 'hand_and_obj_distance', 'total_pickups', ]: stat_name = stat_name stat = get_stat_in_paths(paths, 'env_infos', stat_name) statistics.update(create_stats_ordered_dict( '%s%s' % (prefix, stat_name), stat, always_show_all_stats=True, )) statistics.update(create_stats_ordered_dict( 'Final %s%s' % (prefix, stat_name), [s[-1] for s in stat], always_show_all_stats=True, )) return statistics
def get_diagnostics(self, paths, prefix=''): statistics = OrderedDict() for stat_name in [ 'radius', 'target_position', 'distance_to_target', 'velocity', 'speed', 'is_success', ]: stat_name = stat_name stat = get_stat_in_paths(paths, 'env_infos', stat_name) statistics.update( create_stats_ordered_dict( '%s%s' % (prefix, stat_name), stat, always_show_all_stats=True, )) statistics.update( create_stats_ordered_dict( 'Final %s%s' % (prefix, stat_name), [s[-1] for s in stat], always_show_all_stats=True, )) return statistics
def get_diagnostics(self, paths, prefix=''): statistics = OrderedDict() list_of_stat_names = [ 'state_diff', 'pos_diff', 'angle_diff', 'pos_angle_diff', 'pos_success', 'angle_success', ] if self.vel_in_state: list_of_stat_names.append('velocity_diff') list_of_stat_names.append('angular_velocity_diff') for stat_name in list_of_stat_names: stat_name = stat_name stat = get_stat_in_paths(paths, 'env_infos', stat_name) statistics.update( create_stats_ordered_dict( '%s%s' % (prefix, stat_name), stat, always_show_all_stats=True, )) statistics.update( create_stats_ordered_dict( 'Final %s%s' % (prefix, stat_name), [s[-1] for s in stat], always_show_all_stats=True, )) return statistics
def log_diagnostics(self, paths, logger=None, prefix=""): if logger is None: return statistics = OrderedDict() for stat_name in [ 'hand_distance', 'puck_distance', 'touch_distance', 'success', ]: stat_name = stat_name stat = get_stat_in_paths(paths, 'env_infos', stat_name) statistics.update( create_stats_ordered_dict( '%s %s' % (prefix, stat_name), stat, always_show_all_stats=True, )) statistics.update( create_stats_ordered_dict( 'Final %s %s' % (prefix, stat_name), [s[-1] for s in stat], always_show_all_stats=True, )) for key, value in statistics.items(): logger.record_tabular(key, value)
def get_diagnostics(self, paths, prefix=''): statistics = OrderedDict() stat_names = [ 'hand_success', 'obj_success', 'hand_and_obj_success', 'hand_distance', 'obj_distance', 'obj_distance0', 'hand_and_obj_distance', 'total_pickups', 'obj_x0', 'obj_y0', 'obj_z0', 'mujoco_exception_raised', 'flying_object', ] if self.two_obj: stat_names.append('obj_distance1') stat_names.append('obj_x1') stat_names.append('obj_y1') stat_names.append('obj_z1') for stat_name in stat_names: stat_name = stat_name stat = get_stat_in_paths(paths, 'env_infos', stat_name) statistics.update(create_stats_ordered_dict( '%s%s' % (prefix, stat_name), stat, always_show_all_stats=True, )) statistics.update(create_stats_ordered_dict( 'Final %s%s' % (prefix, stat_name), [s[-1] for s in stat], always_show_all_stats=True, )) return statistics
def goal_conditioned_diagnostics(self, paths, goals): statistics = OrderedDict() distance_to_target_list = [] is_success_list = [] for path, goal in zip(paths, goals): distance_to_target = np.linalg.norm(path['observations'] - goal, axis=1) is_success = distance_to_target < self.target_radius distance_to_target_list.append(distance_to_target) is_success_list.append(is_success) for stat_name, stat_list in [ ('distance_to_target', distance_to_target_list), ('is_success', is_success_list), ]: statistics.update( create_stats_ordered_dict( stat_name, stat_list, always_show_all_stats=True, )) statistics.update( create_stats_ordered_dict( '{}/final'.format(stat_name), [s[-1:] for s in stat_list], always_show_all_stats=True, exclude_max_min=True, )) statistics.update( create_stats_ordered_dict( '{}/initial'.format(stat_name), [s[:1] for s in stat_list], always_show_all_stats=True, exclude_max_min=True, )) return statistics
def get_contextual_diagnostics(self, paths, contexts): diagnostics = OrderedDict() state_key = "state_observation" goal_key = "state_desired_goal" values = [] for i in range(len(paths)): state = paths[i]["observations"][-1][state_key] goal = contexts[i][goal_key] distance = np.linalg.norm(state - goal) values.append(distance) diagnostics_key = goal_key + "/final/distance" diagnostics.update(create_stats_ordered_dict( diagnostics_key, values, )) values = [] for i in range(len(paths)): for j in range(len(paths[i]["observations"])): state = paths[i]["observations"][j][state_key] goal = contexts[i][goal_key] distance = np.linalg.norm(state - goal) values.append(distance) diagnostics_key = goal_key + "/distance" diagnostics.update(create_stats_ordered_dict( diagnostics_key, values, )) return diagnostics
def get_diagnostics(self, paths, **kwargs): statistics = self.wrapped_env.get_diagnostics(paths, **kwargs) for stat_name_in_paths in ["image_dist", "image_success"]: stats = get_stat_in_paths(paths, 'env_infos', stat_name_in_paths) statistics.update(create_stats_ordered_dict( stat_name_in_paths, stats, always_show_all_stats=True, )) final_stats = [s[-1] for s in stats] statistics.update(create_stats_ordered_dict( "Final " + stat_name_in_paths, final_stats, always_show_all_stats=True, )) return statistics
def get_diagnostics(self, trajectories, desired_goal_states): """ Logs things Args: trajectories: Numpy Array [# Trajectories x Max Path Length x State Dim] desired_goal_states: Numpy Array [# Trajectories x State Dim] """ endeff_distances = np.array([self.endeff_distance(trajectories[i], np.tile(desired_goal_states[i], (trajectories.shape[1],1))) for i in range(trajectories.shape[0])]) puck_distances = np.array([self.puck_distance(trajectories[i], np.tile(desired_goal_states[i], (trajectories.shape[1],1))) for i in range(trajectories.shape[0])]) endeff_movement = self.endeff_distance(trajectories[:,0], trajectories[:, -1]) puck_movement = self.puck_distance(trajectories[:,0], trajectories[:, -1]) statistics = OrderedDict() for stat_name, stat in [ ('final puck distance', puck_distances[:,-1]), ('final endeff distance', endeff_distances[:,-1]), ('puck movement', puck_movement), ('endeff movement', endeff_movement), ]: statistics.update(create_stats_ordered_dict( stat_name, stat, always_show_all_stats=True, )) return statistics
def get_diagnostics(self, paths, prefix=''): statistics = OrderedDict() stat_names = [ 'opt_func_loss', 'opt_grad_norm', 'opt_v_value', 'opt_v_value_min', 'opt_v_value_sum', 'opt_realistic_subgoal_rew', 'init_opt_func_loss', 'init_opt_grad_norm', 'init_opt_v_value', 'init_opt_v_value_min', 'init_opt_v_value_sum', 'init_opt_realistic_subgoal_rew', 'opt_func_calls', 'opt_num_iters', 'opt_stopped', ] for stat_name in stat_names: stat_name = stat_name stat = get_stat_in_paths(paths, 'agent_infos', stat_name) statistics.update(create_stats_ordered_dict( '%s%s' % (prefix, stat_name), stat, always_show_all_stats=True, )) return statistics
def get_diagnostics(self, trajectories, desired_goal_states): """ Logs things Args: trajectories: Numpy Array [# Trajectories x Max Path Length x State Dim] desired_goal_states: Numpy Array [# Trajectories x State Dim] """ puck_distances = np.array([ self.door_distance( trajectories[i], np.tile(desired_goal_states[i], (trajectories.shape[1], 1))) for i in range(trajectories.shape[0]) ]) statistics = OrderedDict() for stat_name, stat in [ ('final door distance', puck_distances[:, -1]), ('min door distance', np.min(puck_distances, axis=-1)), ]: statistics.update( create_stats_ordered_dict( stat_name, stat, always_show_all_stats=True, )) return statistics
def get_diagnostics(self, paths, prefix=''): statistics = OrderedDict() for stat_name in ['angle_difference', 'angle_success']: stat_name = stat_name stat = get_stat_in_paths(paths, 'env_infos', stat_name) statistics.update( create_stats_ordered_dict( '%s%s' % (prefix, stat_name), stat, always_show_all_stats=True, )) statistics.update( create_stats_ordered_dict( 'Final %s%s' % (prefix, stat_name), [s[-1] for s in stat], always_show_all_stats=True, )) return statistics
def get_diagnostics(self, paths, prefix=''): statistics = OrderedDict() for stat_name in [ obj_name + '_distance' for obj_name in self._object_names ]: stat_name = stat_name stat = get_stat_in_paths(paths, 'env_infos', stat_name) statistics.update( create_stats_ordered_dict( '%s%s' % (prefix, stat_name), stat, always_show_all_stats=True, )) statistics.update( create_stats_ordered_dict( 'Final %s%s' % (prefix, stat_name), [s[-1] for s in stat], always_show_all_stats=True, )) return statistics
def get_contextual_diagnostics(self, paths, contexts): diagnostics = OrderedDict() state_key = "state_observation" goal_key = "state_desired_goal" for idx, name in [ (slice(0, 2), "hand_goal"), (slice(2, 4), "puck_goal"), ]: values = [] for i in range(len(paths)): state = paths[i]["observations"][-1][state_key][idx] goal = contexts[i][goal_key][idx] distance = np.linalg.norm(state - goal) values.append(distance) diagnostics_key = name + "/final/distance" diagnostics.update( create_stats_ordered_dict( diagnostics_key, values, )) values = [] for i in range(len(paths)): for j in range(len(paths[i]["observations"])): state = paths[i]["observations"][j][state_key][idx] goal = contexts[i][goal_key][idx] distance = np.linalg.norm(state - goal) values.append(distance) diagnostics_key = name + "/distance" diagnostics.update( create_stats_ordered_dict( diagnostics_key, values, )) return diagnostics
def get_diagnostics(self, paths, prefix=""): statistics = collections.OrderedDict() stats = ['hand_distance'] for i in range(self.puck_count): stats += [ 'puck{}_distance'.format(i), 'touch{}_distance'.format(i), ] for stat_name in stats: stat_name = stat_name stat = get_stat_in_paths(paths, 'env_infos', stat_name) statistics.update( create_stats_ordered_dict( '%s%s' % (prefix, stat_name), stat, always_show_all_stats=True, )) statistics.update( create_stats_ordered_dict( 'Final %s%s' % (prefix, stat_name), [s[-1] for s in stat], always_show_all_stats=True, )) return statistics
def get_diagnostics(self, paths, prefix=''): statistics = OrderedDict() for stat_name in [ 'distance_to_target_obj_{}'.format(i) for i in range(len(self.objects)) ] + ['success_obj_{}'.format(i) for i in range(len(self.objects))] + [ 'distance_to_target_cursor', 'success_cursor', ]: stat_name = stat_name stat = get_stat_in_paths(paths, 'env_infos', stat_name) statistics.update( create_stats_ordered_dict( '%s%s' % (prefix, stat_name), stat, always_show_all_stats=True, )) statistics.update( create_stats_ordered_dict( 'Final %s%s' % (prefix, stat_name), [s[-1] for s in stat], always_show_all_stats=True, )) return statistics