53、实战 - 手写一个全连接算法
全连接算法在一定程度上和矩阵乘法算法等价,因此如果我们想实现一个全连接。的算法,只需要实现一个矩阵乘法就可以。。
矩阵乘法是线性代数运算,用于将两个矩阵相乘得到一个新的矩阵。要执行矩阵乘法,需要确保第一个矩阵的列数与第二个矩阵的行数相等。
比如第一个矩阵的维度为 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
原文地址:https://blog.csdn.net/dongtuoc/article/details/135397454
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!