- 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)