-
Notifications
You must be signed in to change notification settings - Fork 47
/
Copy pathtest_mcd.py
86 lines (72 loc) · 2.63 KB
/
test_mcd.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
"""
Test functions for dann module.
"""
import numpy as np
import tensorflow as tf
from tensorflow.keras import Sequential, Model
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.initializers import GlorotUniform
from adapt.feature_based import MCD
Xs = np.concatenate((
np.linspace(0, 1, 100).reshape(-1, 1),
np.zeros((100, 1))
), axis=1)
Xt = np.concatenate((
np.linspace(0, 1, 100).reshape(-1, 1),
np.ones((100, 1))
), axis=1)
ys = 0.2 * Xs[:, 0].ravel()
yt = 0.2 * Xt[:, 0].ravel()
def _get_encoder(input_shape=Xs.shape[1:]):
model = Sequential()
model.add(Input(shape=input_shape))
model.add(Dense(1,
kernel_initializer="ones",
use_bias=False))
model.compile(loss="mse", optimizer="adam")
return model
def _get_discriminator(input_shape=(1,)):
model = Sequential()
model.add(Input(shape=input_shape))
model.add(Dense(10,
kernel_initializer=GlorotUniform(seed=0),
activation="relu"))
model.add(Dense(1,
kernel_initializer=GlorotUniform(seed=0),
activation="sigmoid"))
model.compile(loss="mse", optimizer="adam")
return model
def _get_task(input_shape=(1,), output_shape=(1,)):
model = Sequential()
model.add(Input(shape=input_shape))
model.add(Dense(np.prod(output_shape),
kernel_initializer=GlorotUniform(seed=0),
use_bias=False))
model.compile(loss="mse", optimizer=Adam(0.1))
return model
def test_fit():
tf.random.set_seed(0)
np.random.seed(0)
model = MCD(_get_encoder(), _get_task(),
loss="mse", optimizer=Adam(0.01), metrics=["mse"])
model.fit(Xs, ys, Xt, yt,
epochs=50, batch_size=34, verbose=0)
assert isinstance(model, Model)
assert np.abs(model.encoder_.get_weights()[0][1][0]) < 0.2
assert np.sum(np.abs(model.predict(Xs).ravel() - ys)) > 5
assert np.sum(np.abs(model.predict(Xt).ravel() - yt)) < 11
yp_avg = model.predict_avg(Xt)
ypt = model.predict(Xt)
ypd = model.predict_disc(Xt)
assert np.all(yp_avg == 0.5 * (ypt+ypd))
def test_n_steps():
tf.random.set_seed(0)
np.random.seed(0)
model = MCD(_get_encoder(), _get_task(), n_steps=4,
loss="mse", optimizer=Adam(0.01), metrics=["mse"])
model.fit(Xs, ys, Xt, yt,
epochs=50, batch_size=34, verbose=0)
assert isinstance(model, Model)
assert np.abs(model.encoder_.get_weights()[0][1][0]) < 0.1
assert np.sum(np.abs(model.predict(Xt).ravel() - yt)) < 11