start = time.time() dataset_manager = DatasetManager(dataset_name) data = dataset_manager.read_dataset() train, test = dataset_manager.split_data(data, train_ratio, split="temporal") train, val = dataset_manager.get_train_val_data(train, sample_size, val_sample_size) print("Done: %s" % (time.time() - start)) print('Encoding data...') start = time.time() dt_train = dataset_manager.encode_data(train) dt_val = dataset_manager.encode_data(val) dt_test = dataset_manager.encode_data(test) X, y = dataset_manager.generate_3d_data(dt_train, max_len) X_val, y_val = dataset_manager.generate_3d_data(dt_val, max_len) print("Done: %s" % (time.time() - start)) print('Building and compiling the model...') start = time.time() data_dim = X.shape[2] model = Sequential() model.add( LSTM(lstmsize, input_shape=(max_len, data_dim), return_sequences=True)) model.add(BatchNormalization()) model.add( LSTM(lstmsize2, input_shape=(max_len, lstmsize), return_sequences=True)) model.add(BatchNormalization()) model.add(Dropout(dropout))
dataset_manager.calculate_divisors(dt_train) elif normalize_over == "all": dt_all = dataset_manager.extract_timestamp_features(data) dt_all = dataset_manager.extract_duration_features(dt_all) dataset_manager.calculate_divisors(dt_all) else: print("unknown normalization mode") dt_train = dataset_manager.normalize_data(dt_train) max_len = dataset_manager.get_max_case_length(dt_train) activity_cols = [col for col in dt_train.columns if col.startswith("act")] n_activities = len(activity_cols) data_dim = n_activities + 5 X, y_a, y_t = dataset_manager.generate_3d_data(dt_train, max_len) print("Done: %s"%(time.time() - start)) # compile a model with same parameters that was trained, and load the weights of the trained model print('Training model...') start = time.time() main_input = Input(shape=(max_len, data_dim), name='main_input') # train a 2-layer LSTM with one shared layer l1 = LSTM(lstmsize, input_shape=(max_len, data_dim), consume_less='gpu', init='glorot_uniform', return_sequences=True, dropout_W=dropout)(main_input) # the shared layer b1 = BatchNormalization(axis=1)(l1) l2_1 = LSTM(lstmsize, consume_less='gpu', init='glorot_uniform', return_sequences=False, dropout_W=dropout)(b1) # the layer specialized in activity prediction b2_1 = BatchNormalization()(l2_1) l2_2 = LSTM(lstmsize, consume_less='gpu', init='glorot_uniform', return_sequences=False, dropout_W=dropout)(b1) # the layer specialized in time prediction