董董灿是个攻城狮

董董灿是个攻城狮

全连接算法在一定程度上和矩阵乘法算法等价,因此如果我们想实现一个全连接。的算法,只需要实现一个矩阵乘法就可以。。

矩阵乘法是线性代数运算,用于将两个矩阵相乘得到一个新的矩阵。要执行矩阵乘法,需要确保第一个矩阵的列数与第二个矩阵的行数相等。

比如第一个矩阵的维度为 m×k,第二个矩阵的维度为 k×n,则相乘得到的新矩阵的维度为 m×n。

通过上面的描述,我们可以看到矩阵乘法的乘累加维度,实际上是 k 那一维度,他通过将k 那一维的所有数据进行逐元素相乘,并且累加成一个值来完成特征的融合。

在 resnet50 神经网络中,最后一层全连接层的第一个矩阵的输入维度是:1 x 2048,第二个矩阵的输入维度是: 2048 x 1000,这样两个矩阵相乘的结果,输出维度变成了1×1000。

而这 1000 便代表了 ImageNet 数据集中的 1000 个分类。

矩阵乘法的实现

为了实现一个矩阵乘法,我们可以简单的采用堆叠循环的方式来完成。

实现思路大致为:在最外层分别循环 m 次和 n 次,最内层对 k 维度循环 k 次并进行乘累加操作。利用Python代码实现如下。

def FullyConnect(img, weight, bias):
  '''
  fc compute [2048] * [1000, 2048] = [1000]
  img : [1, 1, 2048] from last layer
  weight: need reshpe to [1000, 2048]
  bias: [1000]
  '''
  img_new = img.reshape(2048)
  weight_new = np.array(weight).reshape([1
01-10 05:42