非洲人的战斗-one_hidden_layer

本文将极为简略

1
2
3
4
5
6
def (X,Y):
n_x = X.shape[0]
n_h = 4
n_y = Y.shape[0]

return (n_x,n_h,n_y)
1
2
3
4
5
6
7
def initialize_parameters(n_x,n_h,n_y):
W1 = np.random.randn(n_h,n_x) * 0.01
b1 = np.zeros((n_h,1))
W2 = np.random.randn(n_y.n_h) * 0.01
b2 = np.zeros((n_y,1))

return {'W1':W1, 'b1':b1, 'W2':W2, 'b2':b2}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def forward_propagation(X, parameters):
W1 = parameters['W1']
b1 = parameters['b1']
W2 = parameters['W2']
b2 = parameters['b2']
Z1 = np.dot(W1,X) + b1
A1 = np.tanh(Z1)
Z2 = np.dot(W2,A1) + b2
A2 = sigmoid(Z2)


cache = {'Z1': Z1,
'A1': A1,
'Z2': Z2,
'A2': A2}

return A2, cache
1
2
3
4
5
6
7
def compute_cost(A2,Y,parameters):
m = Y.shape[1]

logprobs = np.multiply(np.log(A2),Y) + np.multiply(np.log(1-A2),1-Y)
cost = -np.sum(logprobs) / m

return cost
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def backward_propagation(parameters,cache,X,Y):
m = X.shape[1]

W1 = parameters['W1']
W2 = parameters['W2']
A1 = cache['A1']
A2 = cache['A2']


dZ2 = A2 - Y
dW2 = 1/m * np.dot(dZ2,A1.T)
db2 = 1/m * np.sum(dZ2,axis=1,keepdims=True)
dZ1 = np.dot(W2.T,dZ2) * (1-np.power(A1,2))
dW1 = 1/m * np.dot(dZ1,X.T)
db1 = 1/m * np.sum(dZ1,axis=1,keepdims=True)

return {'dW1':dW1,
'db1':db1,
'dW2':dW2,
'db2':db2}
1
2
3
4
5
def predict(parameters,X):
A2,cache = forward_propagation(X,parameters)
predictions = np.around(A2)

return predictions