-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexperiment2_noisy_sins.py
45 lines (38 loc) · 1.87 KB
/
experiment2_noisy_sins.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
import numpy as np
from scipy.stats import truncnorm
class Noise_Env_clipped_X():
def __init__(self, amp_low=2.0, amp_high=3.0, x_shift_low=-2.0, x_shift_high=2.0,
x_low=-4, x_high=4, 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()
loc = 0
a, b = (self.x_low - loc) / self.X_std, (self.x_high - loc) / self.X_std
X = truncnorm.rvs(a, b, size=n_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