Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
greyhatguy007
GitHub Repository: greyhatguy007/Machine-Learning-Specialization-Coursera
Path: blob/main/C3 - Unsupervised Learning, Recommenders, Reinforcement Learning/week3/C3W3A1/public_tests.py
3564 views
1
from tensorflow.keras.activations import relu, linear
2
from tensorflow.keras.layers import Dense
3
from tensorflow.keras.optimizers import Adam
4
5
import numpy as np
6
7
def test_network(target):
8
num_actions = 4
9
state_size = 8
10
i = 0
11
assert len(target.layers) == 3, f"Wrong number of layers. Expected 3 but got {len(target.layers)}"
12
assert target.input.shape.as_list() == [None, state_size], \
13
f"Wrong input shape. Expected [None, 400] but got {target.input.shape.as_list()}"
14
expected = [[Dense, [None, 64], relu],
15
[Dense, [None, 64], relu],
16
[Dense, [None, num_actions], linear]]
17
18
for layer in target.layers:
19
assert type(layer) == expected[i][0], \
20
f"Wrong type in layer {i}. Expected {expected[i][0]} but got {type(layer)}"
21
assert layer.output.shape.as_list() == expected[i][1], \
22
f"Wrong number of units in layer {i}. Expected {expected[i][1]} but got {layer.output.shape.as_list()}"
23
assert layer.activation == expected[i][2], \
24
f"Wrong activation in layer {i}. Expected {expected[i][2]} but got {layer.activation}"
25
i = i + 1
26
27
print("\033[92mAll tests passed!")
28
29
def test_optimizer(target, ALPHA):
30
assert type(target) == Adam, f"Wrong optimizer. Expected: {Adam}, got: {target}"
31
assert np.isclose(target.learning_rate.numpy(), ALPHA), f"Wrong alpha. Expected: {ALPHA}, got: {target.learning_rate.numpy()}"
32
print("\033[92mAll tests passed!")
33
34
35
def test_compute_loss(target):
36
num_actions = 4
37
def target_q_network_random(inputs):
38
return np.float32(np.random.rand(inputs.shape[0],num_actions))
39
40
def q_network_random(inputs):
41
return np.float32(np.random.rand(inputs.shape[0],num_actions))
42
43
def target_q_network_ones(inputs):
44
return np.float32(np.ones((inputs.shape[0], num_actions)))
45
46
def q_network_ones(inputs):
47
return np.float32(np.ones((inputs.shape[0], num_actions)))
48
49
np.random.seed(1)
50
states = np.float32(np.random.rand(64, 8))
51
actions = np.float32(np.floor(np.random.uniform(0, 1, (64, )) * 4))
52
rewards = np.float32(np.random.rand(64, ))
53
next_states = np.float32(np.random.rand(64, 8))
54
done_vals = np.float32((np.random.uniform(0, 1, size=(64,)) > 0.96) * 1)
55
56
loss = target((states, actions, rewards, next_states, done_vals), 0.995, q_network_random, target_q_network_random)
57
58
59
assert np.isclose(loss, 0.6991737), f"Wrong value. Expected {0.6991737}, got {loss}"
60
61
# Test when episode terminates
62
done_vals = np.float32(np.ones((64,)))
63
loss = target((states, actions, rewards, next_states, done_vals), 0.995, q_network_ones, target_q_network_ones)
64
assert np.isclose(loss, 0.343270182), f"Wrong value. Expected {0.343270182}, got {loss}"
65
66
# Test MSE with parameters A = B
67
done_vals = np.float32((np.random.uniform(0, 1, size=(64,)) > 0.96) * 1)
68
rewards = np.float32(np.ones((64, )))
69
loss = target((states, actions, rewards, next_states, done_vals), 0, q_network_ones, target_q_network_ones)
70
assert np.isclose(loss, 0), f"Wrong value. Expected {0}, got {loss}"
71
72
# Test MSE with parameters A = 0 and B = 1
73
done_vals = np.float32((np.random.uniform(0, 1, size=(64,)) > 0.96) * 1)
74
rewards = np.float32(np.zeros((64, )))
75
loss = target((states, actions, rewards, next_states, done_vals), 0, q_network_ones, target_q_network_ones)
76
assert np.isclose(loss, 1), f"Wrong value. Expected {1}, got {loss}"
77
78
print("\033[92mAll tests passed!")
79
80