-
Notifications
You must be signed in to change notification settings - Fork 0
/
experiment_1_noisy_sinusoids.py
90 lines (74 loc) · 3.83 KB
/
experiment_1_noisy_sinusoids.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
import numpy as np
class Sinusoid_extra_Noise_Env():
def __init__(self, amp_low=2.0, amp_high=3.0, x_shift_low=-2.0, x_shift_high=2.0,
x_low=-4.0, x_high=4.0, noise_std=0.1, seed=234, X_std = 1):
self.amp_low = amp_low
self.amp_high = amp_high
self.x_shift_low = x_shift_low
self.x_shift_high = x_shift_high
self.x_low = x_low
self.x_high = x_high
self.noise_std = noise_std
self.random_state = np.random.RandomState(seed)
self.X_std = X_std
def _sample_sinusoid_fn(self):
amplitude = self.random_state.uniform(self.amp_low, self.amp_high)
x_shift = self.random_state.uniform(self.x_shift_low, self.x_shift_high)
return lambda x: amplitude * np.sin((x - x_shift)) + 5.0
def generate_meta_train_data(self, n_tasks, n_samples):
meta_train_tuples = []
for i in range(n_tasks):
f = self._sample_sinusoid_fn()
X = self.X_std * self.random_state.normal(size=(n_samples, 1))
Y = f(X) + self.noise_std * self.random_state.normal(size=f(X).shape)
meta_train_tuples.append((X, Y))
return meta_train_tuples
def generate_meta_test_data(self, n_tasks, n_samples_context, n_samples_test):
assert n_samples_test > 0
meta_test_tuples = []
for i in range(n_tasks):
f = self._sample_sinusoid_fn()
X = self.random_state.uniform(self.x_low, self.x_high, size=(n_samples_context + n_samples_test, 1))
Y = f(X) + self.noise_std * self.random_state.normal(size=f(X).shape)
meta_test_tuples.append(
(X[:n_samples_context], Y[:n_samples_context], X[n_samples_context:], Y[n_samples_context:]))
return meta_test_tuples
class Noise_Env_V2_bounded_X():
def __init__(self, amp_low=2.0, amp_high=3.0, x_shift_low=-2.0, x_shift_high=2.0,
x_low=-5.0, x_high=5.0, noise_std=0.1, seed=234, X_std = 0.7):
self.amp_low = amp_low
self.amp_high = amp_high
self.x_shift_low = x_shift_low
self.x_shift_high = x_shift_high
self.x_low = x_low
self.x_high = x_high
self.noise_std = noise_std
self.random_state = np.random.RandomState(seed)
self.X_std = X_std
def _sample_sinusoid_fn(self):
amplitude = self.random_state.uniform(self.amp_low, self.amp_high)
x_shift = self.random_state.uniform(self.x_shift_low, self.x_shift_high)
return lambda x: amplitude * np.sin((x - x_shift)) + 5.0
def generate_meta_train_data(self, n_tasks, n_samples):
meta_train_tuples = []
for i in range(n_tasks):
f = self._sample_sinusoid_fn()
samples = self.X_std * self.random_state.normal(size=(n_samples, 1))
while np.any((samples < x_low) | (samples > x_high)):
samples_outside_range = (samples < x_low) | (samples > x_high)
n_resamples = np.sum(samples_outside_range)
samples[samples_outside_range] = np.random.normal(size=n_resamples)
X = samples
Y = f(X) + self.noise_std * self.random_state.normal(size=f(X).shape)
meta_train_tuples.append((X, Y))
return meta_train_tuples
def generate_meta_test_data(self, n_tasks, n_samples_context, n_samples_test):
assert n_samples_test > 0
meta_test_tuples = []
for i in range(n_tasks):
f = self._sample_sinusoid_fn()
X = self.random_state.uniform(self.x_low, self.x_high, size=(n_samples_context + n_samples_test, 1))
Y = f(X) + self.noise_std * self.random_state.normal(size=f(X).shape)
meta_test_tuples.append(
(X[:n_samples_context], Y[:n_samples_context], X[n_samples_context:], Y[n_samples_context:]))
return meta_test_tuples