定义神经网络结构
1. 定义神经网络结构
import numpy as np
def layer_sizes(X,Y):
n_x=X.shape[0]
n_h=4
n_y=Y.shape[0]
return (n_x,n_h,n_y)
print(“=测试layer_sizes”)
X_asses,Y_asses=layer_sizes_test_case()
(n_x,n_h,n_y)=layer_sizes(X_asses,Y_asses)
print("输入层的结点数量为:n_x= "+str(n_x))
print(“隐藏层的节点数量为:n_h=” +str(n_h))
print(“输出层的节点数量为:n_y=” +str(n_y))
def initialize_parameters(n_x,n_h,n_y):
np.random.seed(2)
W1=np.random.randn(n_h,n_x)*0.01
b1=np.zeros(shape=(n_h,1))
W2=np.random.randn(n_y,n_h)*0.01
b2=np.zeros(shape=(n_y,1))
parameters={"W1":W1,"b1":b1,"W2":W2,"b2":b2}
return parameters
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)
def compute_cost(A2,Y,parameters):
m=Y.shape[1]
W1=parameters[“W1”]
W2=parameters[“W2”]
logprobs=logprobs=np.multiply(np.log(A2),Y)+np.multiply(((1-Y),np.log(1-A2)))
cost=-np.sum(logprobs)/m
cost=float(np.squeeze(cost))
assert(isinstance(cost,float))
return cost
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.multiply(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)
grads={"dW1":dW1,
"db1":db1,
"dW2":dW2,
"db2":db2}
return grads