深度学习入门:基于 Python 的理论与实现 (14):神经网络 3.3.3

阅读数:24 2019 年 11 月 13 日 15:07

深度学习入门:基于Python的理论与实现(14):神经网络 3.3.3

内容简介
本书是深度学习真正意义上的入门书,深入浅出地剖析了深度学习的原理和相关技术。书中使用 Python3,尽量不依赖外部库或工具,从基本的数学知识出发,带领读者从零创建一个经典的深度学习网络,使读者在此过程中逐步理解深度学习。书中不仅介绍了深度学习和神经网络的概念、特征等基础知识,对误差反向传播法、卷积神经网络等也有深入讲解,此外还介绍了深度学习相关的实用技巧,自动驾驶、图像生成、强化学习等方面的应用,以及为什么加深层可以提高识别精度等疑难的问题。
本书适合深度学习初学者阅读,也可作为高校教材使用。

(神经网络的内积)

下面我们使用 NumPy 矩阵来实现神经网络。这里我们以图 3-14 中的简单神经网络为对象。这个神经网络省略了偏置和激活函数,只有权重。

图 3-14 通过矩阵的乘积进行神经网络的运算

实现该神经网络时,要注意 $\boldsymbol{X}$、$\boldsymbol{W}$、$\boldsymbol{Y}$ 的形状,特别是 $\boldsymbol{X}$ 和 $\boldsymbol{W}$ 的对应维度的元素个数是否一致,这一点很重要。

>>> X = np.array([1, 2])
>>> X.shape
(2,)
>>> W = np.array([[1, 3, 5], [2, 4, 6]])
>>> print(W)
[[1 3 5]
 [2 4 6]]
>>> W.shape
(2, 3)
>>> Y = np.dot(X, W)
>>> print(Y)
[ 5  11  17]

如上所示,使用 np.dot(多维数组的点积),可以一次性计算出 $\boldsymbol{Y}$ 的结果。这意味着,即便 $\boldsymbol{Y}$ 的元素个数为 1001000,也可以通过一次运算就计算出结果!如果不使用 np.dot,就必须单独计算 $\boldsymbol{Y}$ 的每一个元素(或者说必须使用 for 语句),非常麻烦。因此,通过矩阵的乘积一次性完成计算的技巧,在实现的层面上可以说是非常重要的。

评论

发布