L层神经网络
import numpy as np
import h5py
import matplotlib.pyplot as plt
def sigmoid(Z):
A = 1/(1+np.exp(-Z))
cache = Z
return A,cache
def relu(Z):
A = np.maximum(0,Z)
cache = Z
return A,cache
def sigmoid_backward(dA,cache):
Z = cache
s = 1/(1+np.exp(-Z))
dZ = dA*s*(1-s)
return dZ
def relu_backward(dA,cache):
Z = cache
dZ = np.array(dA,copy = True)
dZ[Z <= 0] = 0
return dZ
def initialize_parameters_deep(layer_dims):
L = len(layer_dims)
parameters={}
for l in range(1,L):
#如果此处不使用 “/ np.sqrt(layer_dims[l-1])” 会产生梯度消失
parameters['W'+str(l)] = np.random.randn(layer_dims[l],layer_dims[l-1]) / np.sqrt(layer_dims[l-1])
parameters['b'+str(l)] = np.zeros((layer_dims[l],1))
return parameters
def linear_forward(A_prev, W, b):
Z = np.dot(W,A_prev)+b
linear_cache = (A_prev,W,b)
return Z,linear_cache
def linear_activation_forward(A_prev, W, b, activation):
Z,linear_cache = linear_forward(A_prev,W,b)
if activation == 'sigmoid':
A,activation_cache = sigmoid(Z)#return 2 term and activation_cache caches value 'Z'
elif activation == 'relu':
A,activation_cache = relu(Z)
cache = (linear_cache,activation_cache)
return A,cache
def L_model_forward(X,parameters