龙空技术网

96.人工智能——卷积的作用与运算

UNET 290

前言:

如今你们对“卷积的用处”大体比较讲究,小伙伴们都需要学习一些“卷积的用处”的相关资讯。那么小编在网上网罗了一些对于“卷积的用处””的相关文章,希望朋友们能喜欢,小伙伴们快快来了解一下吧!

卷积神经网络(Convolutional Neural Network,CNN)是受生物学上感受野机制的启发而提出的。

目前的卷积神经网络一般是由卷积层、汇聚层和全连接层交叉堆叠而成的前馈神经网络,有三个结构上的特性:局部连接、权重共享以及汇聚。这些特性使得卷积神经网络具有一定程度上的平移、缩放和旋转不变性。

卷积神经网络主要应用在图像和视频分析的任务上,其准确率一般也远远超出了其他的神经网络模型。

卷积是分析数学中的一种重要运算,常用于信号处理或图像处理任务。本文主要通过实践来理解卷积作用和运算过程。

二维卷积的运算

先看一下卷积计算的示例

卷积计算过程

经过卷积运算后,最终输出矩阵大小则为(M-U+1,N-V+1)

二维卷积算子

算子继承paddle.nn.Layer,并使用支持反向传播的飞桨API进行实现,这样我们就可以不用手工写backword()的代码实现。

#二维卷积算子import paddle import paddle.nn as nnclass Conv2D(nn.Layer):    def __init__(self,                 kernel_size,                 weight_attr=paddle.ParamAttr(                     initializer=nn.initializer.Assign(value=[[0.0,1.0],[2.0,3.0]]))):        super(Conv2D,self).__init__()        #使用'paddle.create_parameter'创建卷积核        #使用'paddle.ParamAttr'进行参数初始化        self.weight=paddle.create_parameter(shape=[kernel_size,kernel_size],dtype='float32',attr=weight_attr)            def forward(self,x):        """        输入:            - X:输入矩阵,shape=[B, M, N],B为样本数量        输出:            - output:输出矩阵        """        u,v=self.weight.shape        output=paddle.zeros([x.shape[0],x.shape[1]-u+1,x.shape[2]-v+1])        for i in range(output.shape[1]):            for j in range(output.shape[2]):                output[:,i,j]=paddle.sum(x[:,i:i+u,j:j+v]*self.weight,axis=[1,2])        return output        
#运行结果:输入矩阵:Tensor(shape=[1, 3, 3], dtype=float32, place=CPUPlace, stop_gradient=True,       [[[1., 2., 3.],         [4., 5., 6.],         [7., 8., 9.]]]),输出矩阵:Tensor(shape=[1, 2, 2], dtype=float32, place=CPUPlace, stop_gradient=False,       [[[25., 31.],         [43., 49.]]])

标签: #卷积的用处