【深度学习】吴恩达-课后作业-搭建多层神经网络以及应用

  • Ng的深度学习,其实前几个月就听完了,课后作业也是大懂不懂的都做了一遍,代码也跟着各种各样的参考敲了一遍,但暑假几个月没怎么学习。。。基本也忘得差不多了,这几周回顾了一下深度学习这门课的笔记,看了别的博主的总结,对CNN,RNN,LSTM,注意力机制等网络结构进行了复盘,虽然感觉自己很心浮气躁,一边也在学集成学习那几个算法和推荐系统相关,这里也告诉自己:贪多嚼不烂,心急吃不了热豆腐,慢慢来,还是要多积累。
  • 打算慢慢把深度学习这些代码都复盘一遍,标上注释,不过感觉这个过程会很慢。

目录

参数初始化

前向传播 

计算前向传播的损失 

反向传播 

参数初始化

import numpy as np
import h5py
import matplotlib.pyplot as plt
import testCases 
from dnn_utils import sigmoid, sigmoid_backward, relu, relu_backward 
import lr_utils 

#两层神经网络参数初始化
np.random.seed(1)#随机种子确保结果相同
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))
    
    #使用断言确保数据格式是正确的
    assert(W1.shape == (n_h, n_x))
    assert(b1.shape == (n_h, 1))
    assert(W2.shape == (n_y, n_h))
    assert(b2.shape == (n_y, 1))
    
    parameters = {"W1": W1,
                  "b1": b1,
                  "W2": W2,
                  "b2": b2}
    
    return parameters  

#多层神经网络参数初始化
'''layers_dims - 包含网络中每个层的节点数量的列表
#比如网络有三层,第一层有5个神经元,第二层有3个神经元,第三层有6个神经元
则layers_dims = [5,3,6],len(layers_dims) = 3'''

def initialize_parameters_deep(layers_dims):
    np.random.seed(3)
    parameters = {}#存放参数的字典
    L = len(layers_dims)#网络的层数
    
    for l in range(1,L):#遍历网络的每一层对参数进行随机初始化
        parameters["W" + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) / np.sqrt(layers_dims[l - 1])
        parameters["b" + str(l)] = np.zeros((layers_dims[l], 1))
        
        #确保数据的格式正确
        assert(parameters["W" + str(l)].shape == (layers_dims[l], layers_dims[l-1]))
        assert(parameters["b" + str(l)].shape == (layers_dims[l], 1))
        
    return parameters

前向传播 

#线性部分
def linear_forward(A,W,b):
    Z = np.dot(W,A) + b
    
    assert(Z.shape == (W.shape[0],A.shape[1]))
    
    cache = (A,W,b)#存储前向传播得到的参数用于反向传播
     
    return Z,cache

#神经网络每一层的带激活函数的线性部分
def linear_activation_forward(A_prev,W,b,activation):
    
    if activation == "sigmoid":
        Z, linear_cache = linear_forward(A_prev, W, b)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值