机器学习(十三):矩阵乘法代码

一、神经网络的矢量化实现

此前,神经网络的前向传播可以用以下代码实现。每层使用for循环,计算每个神经元的激活值a^{[l]}_{j}=g(\vec{w}_{j}^{[l]}\cdot \vec{a}^{[l-1]}+b_{j}^{[l]})a_{j}^{[l]}=g(\vec{w}_{1}^{[j]}\cdot \vec{a}^{[l-1]}+b_{j}^{[l]})

可以使用矩阵相乘的方法简化代码,在numpy中,matmul()函数可以实现矩阵相乘:

二、矩阵乘法

本节讲解如何计算矩阵相乘。

1、两个向量相乘

\begin{bmatrix} 1\\2 \end{bmatrix}\cdot \begin{bmatrix} 3\\4 \end{bmatrix}=1*3+2*4

2、向量和矩阵相乘

\vec{a}=\begin{bmatrix} 1\\2 \end{bmatrix}

\vec{a}^{T} = \begin{bmatrix} 1 & 2 \end{bmatrix}

W=\begin{bmatrix} 3 & 5 \\4 &6 \end{bmatrix}=\begin{bmatrix} \vec{w_{1}} & \vec{w_{2}} \end{bmatrix}

\vec{a}^{T}\cdot W=\begin{bmatrix} \vec{a}^{T}\vec{w_{1}} & \vec{a}^{T}\vec{w_{2}} \end{bmatrix} =\begin{bmatrix} (1*3)+(2*4) & (1*5)+(2*6) \end{bmatrix} =\begin{bmatrix} 11 & 17 \end{bmatrix}

3、矩阵相乘

A = \begin{bmatrix} 1 & -1 & 0.1\\ 2 & -2 & 0.2 \end{bmatrix}

A^{T} = \begin{bmatrix} 1 & 2\\ -1 & -2\\ 0.1 & 0.2 \end{bmatrix}

W=\begin{bmatrix} 3 & 4 \\5 &6 \end{bmatrix}

A^{T}和W可以转换成由向量构成的矩阵:

A^{T}W=\begin{bmatrix} \vec{a}_{1}^{T}\vec{w}_{1} & \vec{a}_{1}^{T}\vec{w}_{2} & \vec{a}_{1}^{T}\vec{w}_{3} & \vec{a}_{1}^{T}\vec{w}_{4}\\ \vec{a}_{2}^{T}\vec{w}_{1} & \vec{a}_{2}^{T}\vec{w}_{2} & \vec{a}_{2}^{T}\vec{w}_{3} & \vec{a}_{2}^{T}\vec{w}_{4} \\ \vec{a}_{3}^{T}\vec{w}_{1} & \vec{a}_{3}^{T}\vec{w}_{2} & \vec{a}_{3}^{T}\vec{w}_{3} & \vec{a}_{3}^{T}\vec{w}_{4} \end{bmatrix}

最终计算结果为:

A^{T}W=\begin{bmatrix} 11 & 17 & 23 & 9\\ -11 & -17 & -23 & -9\\ 1.1 & 1.7 & 2.3 & 0.9 \end{bmatrix}

矩阵相乘时,第一个矩阵的列数要等于第二个矩阵的行数

三、矩阵在代码中的实现

AT是A的转置矩阵,在代码中,可以用A.T得到AT

矩阵相乘可以使用以下两种语法:

在神经网络中,把输入值、激活值和参数W写成矩阵形式:

在代码中实现如下:

学习来源:吴恩达机器学习,P55-P58

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值