numpy实现深度学习

@``TOC

使用numpy实现深度学习

使用numpy实现深度学习算法预测,包括模型定义、初始化(he)、训练以及预测以及一系列梯度优化算法

代码块

def initialize_parameters(layer_dims):
    parameters = {
   }
    L = len(layer_dims) 
    for l in range(1, L):
        parameters['W' + str(l)] = np.random.randn(layer_dims[l], layer_dims[l-1])*  np.sqrt(2 / layer_dims[l-1]) #he初始化
        parameters['b' + str(l)] = np.zeros((layer_dims[l], 1))
        
    return parameters

def forward_propagation_with_dropout(X, parameters, keep_prob = 1):
    W1 = parameters["W1"]
    b1 = parameters["b1"]
    W2 = parameters["W2"]
    b2 = parameters["b2"]
    W3 = parameters["W3"]
    b3 = parameters["b3"]
    W4 = parameters["W4"]
    b4 = parameters["b4"]
    Z1 = np.dot(W1, X) + b1
    A1 = relu(Z1)
   
    D1 = np.random.rand(A1.shape[0],A1.shape[1])                                      
    D1 = (D1 <  keep_prob)                                      
    A1 = A1 * D1                                     
    A1 = A1 / keep_prob                                      
    Z2 = np.dot(W2, A1) + b2
    A2 = relu(Z2)
    D2 = np.random.rand(A2.shape[0],A2.shape[1])                                      
    D2 = (D2 < keep_prob )                                       
    A2 = A2 * D2                                        
    A2 = A2 / keep_prob                                    
    Z3 = np.dot(W3, A2) + b3
    A3 = relu(Z3)
    D3 = np.random.rand(A3.shape[0],A3.shape[1])                                      
    D3 = (D3 < keep_prob )                                        
    A3 = A3 * D3                                     
    A3 = A3 / keep_prob
    
    Z4 = np.dot(W4, A3) + b4
    A4 = sigmoid(Z4)
    
    cache = (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, D3, A3, W3, b3,Z4, A4, W4, b4)
    
    return A4, cache

def compute_cost(a4, Y):
    m = Y.shape[1]
    logprobs = np.multiply(-np.log(a4),Y) + np.multiply(-np.log(1 - a4), 1 - Y)
    cost = 1./m * np.sum(logprobs)
    
    return cost

def backward_propagation_with_dropout(X, Y, cache, keep_prob):
    m = X.shape[1]
    (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, D3, A3, W3, b3, Z4, A4, W4, b4)=cache
    dZ4 = A4 - Y
    dW4 = 1./m * np.dot(dZ4, A3.T)
    db4 = 1./m * np.sum(dZ4, axis=1, keepdims = True)
    dA3 = np.dot(W4.T, dZ4)
    dA3 = dA3 * D3           
    dA3 = dA3 / keep_prob             
    dZ3 = np.multiply(dA3, np.int64(A3 > 0))
    dW3 = 1./m * np.dot(dZ3, A2.T)
    db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)
    
    dA2 = np.dot(W3.T, dZ3)
    dA2 = dA2 * D2             
    dA2 = dA2 / keep_prob             
    dZ2 = np.multiply(dA2, np.int64(A2 > 0))
    dW2 = 1./m * np.dot(dZ2, A1.T)
    db2 = 1./m * np.sum(dZ2, axis=1, keepdims 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值