Пример #1
0
 def test_get_trajs_from_data_2020_featurize(self):
     # Ensure we can properly featurize states with updated dynamics and updated objects (i.e tomatoes)
     params = copy.deepcopy(self.base_get_trajs_from_data_params)
     params['layouts'] = ['inverse_marshmallow_experiment']
     params['data_path'] = DUMMY_2020_CLEAN_HUMAN_DATA_PATH
     params['featurize_states'] = True
     trajectories, _ = get_trajs_from_data(**params)
def load_data(bc_params, verbose):
    predict_orders = bc_params.get("predict_orders",
                                   DEFAULT_BC_PARAMS["predict_orders"])

    processed_trajs, _ = get_trajs_from_data(**bc_params["data_params"],
                                             silent=not verbose,
                                             include_orders=predict_orders)
    observations, actions = processed_trajs[
        "ep_observations"], processed_trajs["ep_actions"],
    if predict_orders:
        orders = processed_trajs["ep_orders"]
    else:
        orders = None

    if bc_params['use_lstm']:
        ep_lens = np.array([len(ob) for ob in observations])
        observations = _pad(observations,
                            default=np.zeros(bc_params['observation_shape']))
        observations = np.moveaxis(np.stack(np.moveaxis(observations, 0, 2)),
                                   2, 0)

        actions = _pad(actions, default=np.zeros(1))
        actions = np.dstack(actions).transpose((2, 0, 1))

        if predict_orders:
            orders = _pad(orders, default=np.zeros(bc_params["orders_shape"]))
            orders = np.moveaxis(np.stack(np.moveaxis(orders, 0, 2)), 2, 0)
    else:
        observations = np.vstack(observations)
        ep_lens = None  # not used in non recurrent networks
        actions = np.vstack(actions)
        if predict_orders: orders = np.vstack(orders)

    return observations, ep_lens, actions, orders
Пример #3
0
def symmetric_bc(model_savename,
                 bc_params,
                 num_epochs=1000,
                 lr=1e-4,
                 adam_eps=1e-8):
    """DEPRECATED: Trains two BC models from the same data. Splits data 50-50 and uses each subset as training data for
    one model and validation for the other."""
    expert_trajs = get_trajs_from_data(bc_params["data_params"])

    save_npz_file(expert_trajs, "temp")
    train_dataset = ExpertDataset(expert_path="temp",
                                  verbose=1,
                                  train_fraction=0.5)
    train_indices = train_dataset.train_loader.original_indices
    val_indices = train_dataset.val_loader.original_indices

    # Train BC model
    train_model_save_dir = model_savename + "_train/"
    bc_from_dataset_and_params(train_dataset, bc_params, train_model_save_dir,
                               num_epochs, lr, adam_eps)

    # Switching testing and validation datasets (somewhat hacky)
    indices_split = (val_indices, train_indices)
    test_dataset = ExpertDataset(expert_path="temp",
                                 verbose=1,
                                 train_fraction=0.5,
                                 indices_split=indices_split)

    # Test BC model
    test_model_save_dir = model_savename + "_test/"
    bc_from_dataset_and_params(test_dataset, bc_params, test_model_save_dir,
                               num_epochs, lr, adam_eps)
Пример #4
0
    def test_csv_to_df_to_trajs_integration(self):
        # Ensure the output of 'csv_to_df_pickle' works as valid input to 'get_trajs_from_data'
        params = copy.deepcopy(self.base_csv_to_df_params)
        _ = csv_to_df_pickle(**params)

        params = copy.deepcopy(self.base_get_trajs_from_data_params)
        params['data_path'] = os.path.join(self.temp_data_dir,
                                           'unittest_all.pickle')
        params['layouts'] = ['inverse_marshmallow_experiment']
        _ = get_trajs_from_data(**params)
def train_bc_agent(model_save_dir, bc_params, num_epochs=1000, lr=1e-4, adam_eps=1e-8):
    # Extract necessary expert data and save in right format
    expert_trajs = get_trajs_from_data(**bc_params["data_params"])
    
    # Load the expert dataset
    save_npz_file(expert_trajs, "temp.npz")
    dataset = ExpertDataset(expert_path="temp.npz", verbose=1, train_fraction=0.85)
    assert dataset is not None
    assert dataset.train_loader is not None
    return bc_from_dataset_and_params(dataset, bc_params, model_save_dir, num_epochs, lr, adam_eps)
def load_data(bc_params, verbose):
    processed_trajs, _ = get_trajs_from_data(**bc_params["data_params"],
                                             silent=not verbose)
    inputs, targets = processed_trajs["ep_observations"], processed_trajs[
        "ep_actions"]

    if bc_params['use_lstm']:
        seq_lens = np.array([len(seq) for seq in inputs])
        seq_padded = _pad(inputs, default=np.zeros((len(inputs[0][0], ))))
        targets_padded = _pad(targets, default=np.zeros(1))
        seq_t = np.dstack(seq_padded).transpose((2, 0, 1))
        targets_t = np.dstack(targets_padded).transpose((2, 0, 1))
        return seq_t, seq_lens, targets_t
    else:
        return np.vstack(inputs), None, np.vstack(targets)
Пример #7
0
    def setUp(self):
        set_global_seed(0)
        self.bc_params = get_default_bc_params()
        self.bc_params["mdp_params"]["layout_name"] = "cramped_room"
        self.bc_params["training_params"]["epochs"] = 1
        self.model_dir = os.path.join(BC_SAVE_DIR, "test_model")

        if not os.path.exists(self.model_dir):
            os.makedirs(self.model_dir)

        processed_trajs, _ = get_trajs_from_data(**
                                                 self.bc_params["data_params"],
                                                 silent=True)
        self.dummy_input = np.vstack(processed_trajs["ep_observations"])[:1, :]
        self.initial_states = [
            np.zeros((1, self.bc_params['cell_size'])),
            np.zeros((1, self.bc_params['cell_size']))
        ]
        with open(BC_EXPECTED_DATA_PATH, "rb") as f:
            self.expected = pickle.load(f)
    def setUp(self):
        set_global_seed(0)
        self.bc_params = get_bc_params(
            **{"data_path": DUMMY_2019_CLEAN_HUMAN_DATA_PATH})
        self.bc_params["mdp_params"]["layout_name"] = "cramped_room"
        self.bc_params["training_params"]["epochs"] = 1
        self.model_dir = os.path.join(BC_SAVE_DIR, "test_model")

        if not os.path.exists(self.model_dir):
            os.makedirs(self.model_dir)

        processed_trajs, _ = get_trajs_from_data(**
                                                 self.bc_params["data_params"],
                                                 silent=True)
        self.dummy_input = np.vstack(processed_trajs["ep_states"])[:1, :]
        self.initial_states = [
            np.zeros((1, self.bc_params['cell_size'])),
            np.zeros((1, self.bc_params['cell_size']))
        ]
        with open(BC_EXPECTED_DATA_PATH, "rb") as f:
            self.expected = pickle.load(f)

        # Disable TF warnings and infos
        tf.get_logger().setLevel('ERROR')
Пример #9
0
 def test_get_trajs_from_data_2019_featurize(self):
     params = copy.deepcopy(self.base_get_trajs_from_data_params)
     params['featurize_states'] = True
     trajectories, _ = get_trajs_from_data(**params)
Пример #10
0
 def test_get_trajs_from_data_2019(self):
     params = copy.deepcopy(self.base_get_trajs_from_data_params)
     trajectories, _ = get_trajs_from_data(**params)
Пример #11
0
def get_dummy_input(bc_params):
    #NOTE: can add caching if too slow, see: https://stackoverflow.com/questions/6358481/using-functools-lru-cache-with-dictionary-arguments
    # no processing orders as they won't be used anyway
    processed_trajs, _ = get_trajs_from_data(**bc_params["data_params"], include_orders=False, silent=True)
    return np.vstack(processed_trajs["ep_observations"])[:1, :]