![Python深度学习:基于TensorFlow(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/658/48593658/b_48593658.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.3 NumPy的算术运算
机器学习和深度学习中涉及大量的数组或矩阵运算,本节我们将重点介绍两种常用的运算。一种是对应元素相乘,又称为逐元乘法,运算符为np.multiply()或*。另一种是点积或内积运算,运算符为np.dot()。
1.3.1 对应元素相乘
对应元素相乘是计算两个矩阵中对应元素的乘积。np.multiply函数用于数组或矩阵对应元素相乘,输出与相乘数组或矩阵的大小一致,格式如下:
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/25_01.jpg?sign=1738884682-1mo0Im1H5r8Qu9XiQMDkfWFkV8RK8PiO-0-ec6ac57d34570ed5bc0f1f72801f450f)
其中x1、x2之间的对应元素相乘遵守广播规则,NumPy的广播规则将在1.6节介绍。下面我们通过一些示例来进一步说明。
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/25_02.jpg?sign=1738884682-cQbEirpKyA2SS2pmpM1kzgxb5jYvdPuj-0-09acaeceb23416dcef42c3bb5a42486f)
矩阵A和B的对应元素相乘,可以直观地用图1-5表示。
NumPy数组不仅可以与数组进行对应元素相乘,还可以与单一数值(或称为标量)进行运算。运算时,NumPy数组的每个元素与标量进行运算,其间会用到广播机制。例如:
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/25_03.jpg?sign=1738884682-expM8Kbqogd4IuHkvXow8wnjygU4SivT-0-31e5e851c642496a58ed145c27e33f9b)
图1-5 对应元素相乘示意图
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/25_04.jpg?sign=1738884682-N4hzgGDbWfzHbOTNYChuUKBtdI3yO84Y-0-09ac24defae5eeafba93c88d7e261676)
运行结果如下:
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/25_05.jpg?sign=1738884682-ow9akgeubnYtRoRCMBBBPWrMBJrHjvG4-0-5ab1bdab82a787c7af0b2c82a8db7a95)
由此可见,数组通过一些激活函数的运算后,输出与输入形状一致。
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/25_06.jpg?sign=1738884682-7T9WbwDSc0rSLovc6RXRZMtBbZcaCWCc-0-6402692a329bffdbb323e09fa54bf961)
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/26_01.jpg?sign=1738884682-aPzcmeYS07t3kmUShbxRCEE701fZr4VP-0-5ec8dae3fe60129e747b453eeedf6d4d)
运行结果如下:
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/26_02.jpg?sign=1738884682-H9HCNchCAMoLqlMKuYYqnkgBMQmCZ3sz-0-5fab695ea6603d63828d587121743c89)
1.3.2 点积运算
点积运算又称为内积,在NumPy中用np.dot表示,其一般格式为:
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/26_03.jpg?sign=1738884682-ZvuiAmv30FHeAgxyj3wCcyaLgRxe85BX-0-6cec920f753abf297a64812a818c3e75)
以下通过一个示例来说明点积运算的具体使用方法及注意事项。
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/26_04.jpg?sign=1738884682-YlDg14NoDgCVDFIzq6KNkW0S7U7At0aa-0-ba294732b10e960394d18a6190e58e71)
运行结果如下:
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/26_05.jpg?sign=1738884682-L710W1O1tvpcb15kuqHbVC5gcqbShP5W-0-12c50850e67b6d969d5d4e22641f232f)
以上运算可以用图1-6表示。
如图1-6所示,矩阵X1与矩阵X2进行点积运算,其中X1和X2对应维度(即X1的第2个维度与X2的第1个维度)的元素个数必须保持一致。此外,矩阵X3的形状是由矩阵X1的行数与矩阵X2的列数确定的。
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/26_06.jpg?sign=1738884682-gBj5Z7h8EJZgcp4GJPWUCr8weCn4cmCB-0-431a39ac3a4914e7cc1cc7667095b6c0)
图1-6 矩阵的点积运算示意图,对应维度的元素个数需要保持一致
点积运算在神经网络中的使用非常频繁,如图1-7所示的神经网络,其输入I与权重矩阵W之间的运算就是点积运算。
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/27_01.jpg?sign=1738884682-Aeq5K3L1OXas9RNrRnqr4qKHyO0lcuki-0-79a6a7b740b45aa021d2e9a59d9e33be)
图1-7 点积运算可视化示意图