本文作业是在jupyter notebook上一步一步做的,带有一些过程中查找的资料等(出处已标明)并翻译成了中文,如有错误,欢迎指正!

欢迎来到第四周作业(第二部分的第一部分)!您之前已经训练了一个两层的神经网络(只有一个隐藏层)。这周,你将构建一个深度神经网络,你想要多少层就有多少层!

•在本笔记本中,您将实现构建深度神经网络所需的所有功能(函数)。
•在下一个作业中,你将使用这些函数来建立一个用于图像分类深度神经网络。

完成这项任务后,您将能够:

•使用非线性单元,比如ReLU来改进你的模型
•构建更深层次的神经网络(隐含层超过1层)
•实现一个易于使用的神经网络类

符号:

吴恩达深度学习 第一课第四周课后编程作业 assignment4_1

 

 

就是上标的【l】代表第l层,上标的【i】代表第i个样本,下标的 i 代表第 i 个条目

 

1 - Packages 包

让我们首先导入在此任务中需要的所有包。

·numpy是使用Python进行科学计算的主要包。
·matplotlib是一个用Python绘制图形的库。
·dnn_utils为本笔记本提供了一些必要的函数。
·testCases提供了一些测试用例来评估函数的正确性
·seed(1)用于保持所有随机函数调用的一致性。它将帮助我们批改你的作业。请不要换种子。

import numpy as np
import h5py #h5py是Python语言用来操作HDF5的模块。
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)

https://blog.csdn.net/csdn15698845876/article/details/73278120

软件的扩展和模块。autoreload 意思是自动重新装入。它后面可带参数。参数意思你要查你自己的版本帮助文件。一般说:
无参:装入所有模块。
0:不执行 装入命令。
1: 只装入所有 %aimport 要装模块
2:装入所有 %aimport 不包含的模块。  

2 - Outline of the Assignment(作业大纲)

要构建神经网络,您将实现几个“辅助函数”。这些辅助函数将用于下一个任务,以建立一个两层神经网络一个L层神经网络。您将实现的每个小助手函数都有详细的说明,这些说明将指导您完成必要的步骤。这是这个作业的大纲,你会:

•初始化一个二层网络和一个L层神经网络的参数
•实现转发模块(下图中用紫色显示)。

  ◾完成一层的线性部分的向前传播步骤(得到Z [l]

  ◾我们给你激活函数(relu /sigmoid)

  ◾将前两步骤组合成一个新的函数【线性- >激活转发】

  ◾堆栈(线性- > RELU)提出时间 L - 1 函数(通过L - 1层1)并添加一个(线性- >sigmoid),最后(最后一层L)。这将为您提供一个新的L_model_forward函数。

•计算损失。

•实现反向传播模块(下图中用红色表示)。

  ◾完成一层的向后传播的线性部分的步骤。

  ◾我们给你激活函数的梯度(relu_backward / sigmoid_backward)

  ◾将前两步骤组合成一个新的线性- >激活 反向功能。

  ◾堆栈(线性- > RELU)向后  并添加l - 1倍(线性- >乙状结肠)向后一个新的L_model_backward函数

•最后更新参数。

吴恩达深度学习 第一课第四周课后编程作业 assignment4_1

 

 

 **Figure 1**

 

注意,对于每个前向函数,都有一个对应的后向函数。这就是为什么在向前(前向)模块的每一步都要在缓存中存储一些值。缓存的值对于计算梯度很有用。在反向传播模块中,您将使用缓存计算梯度。这个作业将确切地告诉你如何执行这些步骤中的每一步。

 

 

3 - Initialization 初始化

您将编写两个帮助函数初始化模型的参数。第一个函数将用于初始化一个两层模型的参数。第二种方法将这个初始化过程推广到L层。

3.1 - 2-layer Neural Network(2层神经网络)

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

说明:

•模型结构为:LINEAR -> RELU -> LINEAR -> SIGMOID。
•对权重矩阵使用随机初始化。使用np.random.randn(shape)*0.01表示正确的形状。
•对偏差使用零初始化。使用np.zeros(形状)。

 1 # GRADED FUNCTION: initialize_parameters
 2 
 3 def initialize_parameters(n_x, n_h, n_y):
 4     """
 5     Argument:
 6     n_x -- size of the input layer
 7     n_h -- size of the hidden layer
 8     n_y -- size of the output layer
 9     
10     Returns:
11     parameters -- python dictionary containing your parameters:
12                     W1 -- weight matrix of shape (n_h, n_x)
13                     b1 -- bias vector of shape (n_h, 1)
14                     W2 -- weight matrix of shape (n_y, n_h)
15                     b2 -- bias vector of shape (n_y, 1)
16     """
17     
18     np.random.seed(1)
19     
20     ### START CODE HERE ### (≈ 4 lines of code)
21     W1 = np.random.randn(n_h, n_x)*0.01
22     b1 = np.zeros((n_h, 1))
23     W2 = np.random.randn(n_y, n_h)*0.01
24     b2 = np.zeros((n_y, 1))
25     ### END CODE HERE ###
26     
27     assert(W1.shape == (n_h, n_x))
28     assert(b1.shape == (n_h, 1))
29     assert(W2.shape == (n_y, n_h))
30     assert(b2.shape == (n_y, 1))
31     
32     parameters = {"W1": W1,
33                   "b1": b1,
34                   "W2": W2,
35                   "b2": b2}
36     
37     return parameters    
# GRADED FUNCTION: initialize_parameters

相关文章:

  • 2021-11-20
  • 2022-12-23
  • 2022-12-23
  • 2021-04-04
  • 2021-05-28
  • 2022-12-23
  • 2021-05-22
  • 2021-07-17
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-12
  • 2021-10-05
  • 2021-07-18
  • 2022-12-23
  • 2021-12-19
相关资源
相似解决方案