欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!
对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tsaiedu,并注明消息来源,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。
作者简介:
鲁伟:一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行。
个人公众号:数据科学家养成记 (微信ID:louwill12)
配套学习视频教程: 手把手教你用Python 实践深度学习
在笔记 1 和 2 里笔者使用 numpy
手动搭建了感知机单元与一个单隐层的神经网络,理解了神经网络的基本架构和传播原理,掌握了如何从零开始手写一个神经网络。但以上仅是神经网络和深度学习的基础内容,深度学习的一大特征就在于隐藏层之深。因而,我们就这前面的思路,继续利用 numpy
工具,手动搭建一个 DNN 深度神经网络。
再次回顾一下之前我们在搭建神经网络时所秉持的思路和步骤:
定义网络结构
初始化模型参数
循环计算:前向传播/计算当前损失/反向传播/权值更新
神经网络的计算流程
初始化模型参数
对于一个包含L层的隐藏层深度神经网络,我们在初始化其模型参数的时候需要更灵活一点。我们可以将网络结构作为参数传入初始化函数里面:
def initialize_parameters_deep(layer_dims):
np.random.seed(3)
parameters = {}
# number of layers in the network
L = len(layer_dims)
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((layer_dims[l], 1))
assert(parameters['W' + str(l)].shape == (layer_dims[l], layer_dims[l-1]))
assert(parameters['b' + str(l)].shape == (layer_dims[l], 1))
return parameters
以上代码中,我们将参数 `layer_dims` 定义为一个包含网络各层维数的 `list` ,使用随机数和归零操作来初始化权重 `W` 和偏置 `b` 。
比如说我们指定一个输入层大小为 5 ,隐藏层大小为 4 ,输出层大小为 3 的神经网络,调用上述参数初始化函数效果如下:
parameters = initialize_parameters_deep([5,4,3])
print("W1 = " + str(parameters["W1"]))
print("b1 = " + str(parameters["b1"]))
print("W2 = " + str(parameters["W2"]))
print("b2 = " + str(parameters[