什么是卷积?(含如何实现卷积源码)

什么是卷积:

        在卷积神经网络中,卷积核(Kernel)也称为滤波器(Filter)或权重(Weight),是一种用于特征提取和特征映射的重要组件。卷积核是由学习算法自动学习得到的,可以看作是一种特征检测器,用于检测输入数据中的某些特定特征。

        卷积核通常是一个二维的矩阵,其大小可以根据输入数据的大小和特征需求进行调整。卷积核可以有一个或多个通道,每个通道对应着输入数据的不同特征维度。在卷积操作中,卷积核通过对输入数据进行卷积运算,将输入数据中的每个特征映射到输出数据的相应特征中。

        卷积核的权重值是在训练过程中自动学习得到的,学习算法的目标是通过不断调整卷积核的权重,使得网络能够更好地提取输入数据中的特征信息。在卷积神经网络中,卷积核的数量和大小可以根据网络的复杂度和任务需求进行调整。通常情况下,随着卷积核数量的增加和卷积层数的加深,网络的特征提取能力和分类准确率也会相应提高。

        在卷积神经网络的训练过程中,学习算法通常采用反向传播算法来更新卷积核的权重。反向传播算法可以根据损失函数的梯度信息,计算出每个卷积核的权重更新值,从而不断优化网络的性能。

        除了在卷积层中使用卷积核,卷积核还可以用于池化层和全连接层中,用于特征提取和降维等操作。

        在池化层中,卷积核通常是一个正方形矩阵,其大小和步长可以根据网络的设计需求进行调整,常见的卷积核大小为2x2或3x3,步长为2。池化层中的卷积核通过对输入数据进行卷积运算,将输入数据中的一定区域进行池化操作,从而得到一个新的特征图。

        在全连接层中,卷积核通常是一个一维向量,其大小和数量可以根据网络的设计需求进行调整。全连接层中的卷积核通过对输入数据进行卷积运算,将输入数据映射到输出数据的相应维度上,从而实现特征提取和降维操作。

        总的来说,卷积核是卷积神经网络中的核心组件之一,它可以应用于卷积层、池化层和全连接层中,用于特征提取、特征映射、降维等操作。卷积核的大小、数量和步长等参数可以根据网络的设计需求进行调整,从而提高网络的性能和效果。


卷积实现源码:


import numpy as np

def Conv(x,kernel):
    hx,wx = x.shape# Hx为待处理矩阵的高(行),Wx为待处理矩阵的宽(列)
    hk,wk = kernel.shape# Hk为卷积核的高(行),Wk为卷积的宽(列)

    out = np.zeros((hx - hk + 1,wx - wk + 1)) #0矩阵
    for i in range(hx - wk + 1):
        for j in range(wx - wk + 1):
            out[i][j] = np.sum(np.multiply(kernel,x[i:i+hk,j:j+wk]))
    return out



def main():
    x = np.array([[3, 0, 1, 2, 7, 4],
                [1, 5, 8, 9, 3, 1],
                [2, 7, 2, 5, 1, 3],
                [0, 1, 3, 1, 7, 8],
                [4, 2, 1, 6, 2, 8],
                [2, 4, 5, 2, 3, 9]])
    kernel = np.array([[1,0,-1],
                       [1,0,-1],
                       [1,0,-1]])
    output = Conv(x,kernel)
    print(output)
    pass


if __name__ == '__main__':
    main()

运行效果:

什么是卷积?(含如何实现卷积源码)_第1张图片

你可能感兴趣的:(深度学习,神经网络,cnn,python)