矩阵的卷积操作——卷积神经网络的基础

矩阵的卷积操作——卷积神经网络的基础

看似高大上的神经网络算法,基础算法其实相当简单!谁都能学会,帮助你理解卷积神经网络!!

  • 背景了解

    1.卷积指的是两个变量在范围内相乘然后求和的结果。

    2.对矩阵进行卷积则是两个矩阵点乘后加和的结果。

  • 卷积神经网络

    1 . 顾名思义就是加入卷积层的神经网络算法(除此以外还有一个池化层,后续会继续讲解)

    2.卷积神经网络的好处在于参数共享,自动提取特征以及平移不变性,保留了矩阵中各参数的空间关系。同时与全连接神经网络相比,权值少,可以实现降维操作。

  • 代码实现
    卷积神经网络的基础就是对矩阵的卷积运算,其代码实现实则出乎意料的简单。

import numpy as np
# 首先通过numpy包构建一个5*5,数值从0-24的矩阵,-1表示根据行为5可以自动推算出列为5。
a = np.arange(0, 25) .reshape(5, -1)

# 构建一个3*3,数值全为1的矩阵。在实际应用中,a通常就是一幅图片的矩阵表示,b是我们自己构建的卷积盒(即用来进行卷积操作的一个矩阵),里面的数值可以由我们自己设定。
b = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])

# 构建一个5*5,数值全为0的矩阵。这样的一个空矩阵是用来填入卷积结果的。
c = np.zeros(25) .reshape(5, -1)

#在a矩阵外补一圈0,形成一个7*7的矩阵。也可以不补齐。这边是为了结果好看,当然也是一种卷积方式。
d = np.zeros(49) .reshape(7, -1)
d[1:6, 1:6] = a
print(d)

#设置一个权值,可以理解为线性方程中z=wx+b里b的角色,赋予这个模型更高的复杂度。
weight = 2

# 双重遍历完成矩阵卷积操作
for i in range(5): #i从0变到4
    for j in range(5): #j同理
        c[i, j] = sum(sum(b*d[i:i+3, j:j+3])) + weight #c中的每一个0都会被卷积结果替换,这里用sum(sum())是因为,单次矩阵求和是列求和,所以要两次才能求出总和。
print(c)

怎么样,是不是很简单。如果有什么问题可以在评论里留言。下一节我会介绍池化层的实现方法。这里是最简单的实现方法,当然还可以定义函数来实现卷积。

你可能感兴趣的:(python,python,卷积神经网络,算法,大数据)