第二周作业注意事项
numpy的常用函数
numpy
的四则运算有广播功能,这里不多做说明,下面的函数是我们numpy常用到几个函数及其注意要点
- dot:内积点乘
- outer:外积
- multiply: 对应元素乘积
- squeeze:压缩指定的维度
在一些 numpy
函数中会有以下的一些参数
- axis:一般用于指定操作的维度,比如axis=0,计算第一个维度
推荐《理解Numpy》https://blog.csdn.net/qq_40723809/article/details/87886240
数据的标准化
数据的标准化和规范化http://www.aiseminar.com/bbs/forum.php?mod=viewthread&tid=214
错误集合
- 'c' argument has 1 elements, which is not acceptable for use with 'x' with s
出现以上错误可以使用下面的代码,并将 出现 c 和 Y 的地方替换为最后一句
import operator
from functools import reduce
c=reduce(operator.add, Y)#用这句替换
- RuntimeWarning: divide by zero encountered in log
上面的错误是因为除0了,推荐查阅博客https://blog.csdn.net/qq_34439215/article/details/89520018
注意事项
这里列出笔者在做作业过程中遇到的需要注意的地方和比较难理解的代码
深度神经网络流程
笔者在作业过程中有种 忘了之前的函数是什么了 的感觉,所以干脆记下了一个小步骤的函数,逐个整理出来作为一个流程,最后就比较清晰明了了
#1. 参数初始化
parameters = def initialize_parameters(n_x, n_h, n_y)
parameters = def initialize_parameters_deep(layer_dims)
parameters = {
[WL]
[BL]
}# 这个是参数的数据结构
#2. 前向函数计算并记录下中间变量cache
A, linear_activation_cache = linear_activation_forward(A_prev, W, b, activation = "relu")
A, linear_activation_cache = linear_activation_forward(A_prev,
W,
b,
activation = "sigmoid")
## 中间变量的格式如下
activation_cache = (Z)
linear_cache = (A, W, b)
linear_activation_cache = (linear_cache, activation_cache)
#3. 进行模型前向计算并记录下最后的AL输出和中间变量,用于多层神经网络
AL, caches = L_model_forward(X, parameters)
## caches是所有的中间变量的列表
caches = [linear_activation_cache]
# 4.利用前向计算中间变量后向函数计算
dA_prev, dW, db = linear_backward(dZ, linear_cache)
dA_prev, dW, db = linear_activation_backward(AL,
linear_activation_cache,
activation = "relu")
dA_prev, dW, db = linear_activation_backward(AL,
linear_activation_cache,
activation = "sigmoid")
#5. 进行模型后向计算并返回梯度,用于多层神经网络。梯度是一个字典,直接通过key来寻址
grads = L_model_backward(AL, Y_assess, caches)
#6. 利用梯度更新参数
parameters = update_parameters(parameters, grads, 0.1)
函数L_model_backward的注意点
在 L_model_backward
函数中有如下代码
for l in reversed(range(L - 1)):
dA_prev_temp, dW_temp, db_temp = linear_activation_backward(grads["dA" + str(l+2)], current_cache,
activation = "relu")
grads["dA" + str(l + 1)] = dA_prev_temp
grads["dW" + str(l + 1)] = dW_temp
grads["db" + str(l + 1)] = db_temp
注意到 grads["dA" + str(l+2),这里的 l + 2
是为什么呢?
这是一个循环,且循环是从 0 到 L-1 ,也就是第 1 层其实对应的下标是 0 ,那么这里我们就需要加 1 。假设我们计算 第 l 层的 dA
,那么我们需要下一层,即 l+1 层的 dA
,所以这里又需要加 1,这就是为什么是加 2 了
网友评论