deeplearning.ai——构建深度神经网络做图像处理

这篇博客介绍了如何构建深度神经网络进行图像处理,包括双层和L层神经网络的初始化、前向传播、反向传播以及参数更新。内容涵盖了从导入所需包到实现前向传播模块(线性、线性-激活)、反向传播模块(线性、线性-激活反向),以及在猫数据集上的应用,训练和测试模型,并分析了结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

4.1 Building your Deep Neural Network: Step by Step

1 - Packages

2 - Outline of the Assignment

3 - Initialization

3.1 - 2-layer Neural Network

3.2 - L-layer Neural Network

4 - Forward propagation module

4.1 - Linear Forward

4.2 - Linear-Activation Forward

4.3 - L-Layer Model

5 - Cost function

6 - Backward propagation module

6.1 - Linear backward

6.2 - Linear-Activation backward

6.3 - L-Model Backward

6.4 - Update Parameters

4.2 Deep Neural Network for Image Classification: Application

1 - Packages

2 - Dataset

3 - Architecture of your model

3.1 - 2-layer neural network

3.2 - L-layer deep neural network

3.3 - General methodology

4 - Two-layer neural network

5 - L-layer Neural Network

6 - Results Analysis

7 - Test with your own image (optional/ungraded exercise)


4.1 Building your Deep Neural Network: Step by Step

符号:

  • 上标[l]表示第l层,例如:a^{[L]}是第L层的激活函数,W^{[L]}b^{[L]}是第L层的参数。
  • 上标(i)表示第i个样本,例如:x^{(i)}是第i个训练样本。
  • 下标i表示向量的第i个输入,例如:a_{i}^{[l]}表示第l层激活函数的第i个输入。

 

1 - Packages

首先,运行下面的单元来导入在这个作业中需要的所有包:

  • numpy是使用python进行科学计算的基础包。
  • Matplotlib是一个用于在Python中绘制图形的库。
  • dnn_utils提供了一些必要的函数。
  • testCases提供了一些测试用例来评估函数的正确性。
  • np.random.seed(1)用来保持所有的随机函数调用的一致性。
import numpy as np
import h5py
import matplotlib.pyplot as plt
from testCases_v2 import *
from dnn_utils_v2 import sigmoid, sigmoid_backward, relu, relu_backward

%matplotlib inline
plt.rcParams['figure.figsize'] = (5.0, 4.0) # set default size of plots
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'

%load_ext autoreload
%autoreload 2

np.random.seed(1)

 

2 - Outline of the Assignment

为了构建神经网络,需要实现几个辅助函数。这些辅助函数将在下节作业中用来构造一个双层神经网络和一个L层的神经网络。下面是任务大纲:

1.初始化双层神经网络和L层神经网络的参数

2.实现前向传播模块(紫色部分):

  • 完成一步前向传播的LINEAR部分(得到Z^{[l]}
  • 已有ACTIVATION函数(relu/sigmoid)
  • 合并前两步,得到新的[LINEAR→ACTIVATION]前向函数
  • 堆叠[LINEAR→RELU]前向函数L-1次(从第1层到第L-1层),在最后(最后一层L)加上一个[LINEAR→RELU]。得到新的L_model_forward函数。

3.计算损失

4.实现反向传播模块(红色部分):

  • 完成一步反向传播的LINEAR部分
  • 已有ACTIVATE函数的梯度(relu_backward/sigmoid_backward)
  • 合并前两部,得到新的[LINEAR→ACTIVATION]反向函数
  • 堆叠[LINEAR→RELU]反向函数L-1次,加上[LINEAR→SIGMOID],得到新的L_model_backward函数。

5.最后更新参数

注意:对于每一个前向函数,都有一个对应的反向函数,这就是为什么前向模块的每一步都要存储一些值在一个缓存器中,在反向传播模块你会用到这些缓存值来计算梯度。

 

3 - Initialization

完成两个辅助函数来初始化模型的参数,第一个函数初始化双层神经网络的参数,第二个函数初始化L层神经网络的参数。

3.1 - 2-layer Neural Network

练习:创建并初始化双层神经网络的参数。

说明:

  • 模型的结构是LINEAR→RELU→LINEAR→SIGMOID
  • 对于权重矩阵使用随机初始化,使用正确维度的np.random.randn(shape)*0.01
  • 对于偏置值初始化为零,使用np.zeros(shape)
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))

3.2 - L-layer Neural Network

n^{[l]}是l层的神经元数目,如果输入X的大小是(12288,209),即209个样本数:

练习:实现L层神经网络的初始化。

说明:

  • 模型的结构是[LINEAR→RELU] X (L-1) → LINEAR → SIGMOID,即有L-1层使用RELU激活函数,接着是一个输出层使用sigmoid激活函数。
  • 对于权重矩阵使用随机初始化,使用np.random.randn(shape)*0.01
  • 对于偏置值初始化为零,使用np.zeros(shape)
  • 对于不同层的神经元数目n^{[l]},将其存在变量layer_dims中。例如,在“Planar Data classification model”中,layer_dims就是[2,4,1]:两个输入单元,单隐层有四个隐藏单元,输出层有有一个输出单元。意味着W1的大小是(4,2),b1的大小是(4,1),W2的大小的(1,4),b2的大小是(1,1)。
np.random.seed(3)
parameters = {}
L = len(layer_dims)            # number of layers in the network

for l in range(1, L):

    parameters['W' + str(l)] = np.random.randn(layer_dims[l], layer_dims[l-1]) * 0.01
    parameters['b' + str(l)] = np.zeros(shape=(layer_dims[l], 1))

 

4 - Forward propagation module

4.1 - Linear Forward

首先实现三个函数:

  • LINEAR
  • LINEAR → ACTIVATION,其中ACTIVATION是RELU或sigmoid
  • [LINEAR → RELU] X (L-1) → LINEAR → SIGMOID(整个模型)

线性前向模块计算如下:

Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}

其中,A^{[0]}=X

练习:构建前向传播的线性模块。

Z = np.dot(W, A) + b

4.2 - Linear-Activation Forward

两个激活函数Sigmoid和ReLU,都返回两个值,激活值"a",一个"cache"包含了"Z"(将反馈给相应的反向函数的值)。

练习:实现LINEAR→ACTIVATION层的前向传播,数学表示为A^{[l]}=g(Z^{[l]})=g(W^{[l]}A^{[l-1]}+b^{[l]}),使用linear_forward()和正确的激活函数。

if activation == "sigmoid":
    # Inputs: "A_prev, W, b". Outputs: "A, activation_cache".
    Z, linear_cache = linear_forward(A_prev, W, b)
    A, activation_cache = sigmoid(Z)
    
elif activation == "relu":
    # Inputs: "A_prev, W, b". Outputs: "A, activation_cache".
    Z, linear_cache = linear_forward(A_prev, W, b)
    A, activation_cache = relu(Z)

4.3 - L-Layer Model

为了更方便地实现L层神经网络,需要一个函数来复制上一步(linear_activation_forward和RELU)L-1次,然后紧接着是linear_activation_forward和SIGMOID。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值