-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathVMRegressor_different_number_appliances.py
109 lines (98 loc) · 4.33 KB
/
VMRegressor_different_number_appliances.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from lab.nilm_experiments import *
from constants.constants import *
from constants.enumerates import *
devs_taus = {
ElectricalAppliances.KETTLE: 0.7, #0.5
ElectricalAppliances.MICROWAVE: 0.975,
ElectricalAppliances.FRIDGE: 0.9,
ElectricalAppliances.WASHING_MACHINE: 0.5, #0.025,
ElectricalAppliances.DISH_WASHER: 0.5, #0.1,
ElectricalAppliances.TOASTER: 0.5,
ElectricalAppliances.LIGHT: 0.5,
ElectricalAppliances.BOILER: 0.5,
ElectricalAppliances.PRINTER: 0.5,
ElectricalAppliances.TELEVISION: 0.5,
}
devices = list(devs_taus.keys())
experiment_categories = [
SupportedExperimentCategories.SINGLE_CATEGORY,
]
prior_distributions = [NORMAL_DIST for i in range(0, len(devices))]
prior_means = [0 for i in range(0, len(devices))]
prior_stds = [.1 for i in range(0, len(devices))]
prior_noise_std = 1
for i, dev in enumerate(devices):
if dev == ElectricalAppliances.DISH_WASHER:
prior_stds[i] = 0.15
if dev == ElectricalAppliances.WASHING_MACHINE:
prior_stds[i] = 0.15
elif dev == ElectricalAppliances.FRIDGE:
prior_stds[i] = 0.001
elif dev == ElectricalAppliances.KETTLE:
prior_stds[i] = 0.1
elif dev == ElectricalAppliances.MICROWAVE:
prior_stds[i] = 0.01
else:
prior_stds[i] = 0.1
prior_noise_std = 1 - sum(prior_stds)
devs = list(devs_taus.keys())
for i in [2, 4, 8, 10]:
experiment_parameters = {
EPOCHS: 25,
ITERATIONS: 5,
INFERENCE_CPU: False,
SAMPLE_PERIOD: 6,
BATCH_SIZE: 1024,
ITERABLE_DATASET: False,
PREPROCESSING_METHOD: SupportedPreprocessingMethods.ROLLING_WINDOW,
SCALING_METHOD: SupportedScalingMethods.STANDARDIZATION,
FIXED_WINDOW: 200,
FILLNA_METHOD: SupportedFillingMethods.FILL_ZEROS,
SUBSEQ_WINDOW: None,
TRAIN_TEST_SPLIT: 0.75,
CV_FOLDS: 3,
NOISE_FACTOR: 0.0,
}
devs_scenario = devs[:i]
print('Scenario: ', devs_scenario)
taus = [devs_taus[dev] for dev in devs_scenario]
model_hparams = [
{
'model_name': 'UNetNiLM',
'hparams': {'window_size': None, 'taus': taus, 'num_layers': 5, 'features_start': 8,
'n_channels': 1, 'num_classes': len(taus), 'pooling_size': 16,
'num_quantiles': 1, 'dropout': 0.1, 'd_model': 128, 'lr': 0.001,
'adam_betas': (0.9, 0.98),
}
},
# {
# 'model_name': 'CNN1DUnetNilm',
# 'hparams': {'window_size': None, 'taus': taus, 'num_classes': len(taus),
# 'pooling_size': 16, 'num_quantiles': 1, 'dropout': 0.0, 'lr': 0.001,
# 'adam_betas': (0.9, 0.98),
# }
# },
{
'model_name': 'StateVariationalMultiRegressorConvEncoder',
'hparams': {'input_dim': None, 'distribution_dim': 16, 'targets_num': len(devs_scenario),
'mode': 'att', 'beta': 1e-3, 'gamma': 1e-0, 'delta': 10, 'complexity_cost_weight': 1e-6,
'dae_output_dim': experiment_parameters[FIXED_WINDOW],
'max_noise': 0.1, 'prior_stds': prior_stds, 'prior_noise_std': prior_noise_std,
'prior_means': prior_means, 'prior_distributions': prior_distributions,
'lr': 1e-3, 'bayesian_encoder': False, 'bayesian_regressor': False,
},
},
]
model_hparams = ModelHyperModelParameters(model_hparams)
experiment_parameters = ExperimentParameters(**experiment_parameters)
experiment = NILMSuperExperiments(project_name='MULTI_TARGET_{}_Appliances'.format(str(i)), clean_project=False,
devices=devs_scenario, save_timeseries_results=False,
experiment_categories=experiment_categories,
experiment_volume=SupportedExperimentVolumes.UKDALE_ALL_VOLUME,
experiment_parameters=experiment_parameters,
save_model=False, export_plots=False,
)
experiment.run_benchmark(model_hparams=model_hparams)
print('#' * 80)
# experiment.export_report(model_hparams=model_hparams, experiment_type=SupportedNilmExperiments.BENCHMARK)
#