前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

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

qiguaw 2024-11-20 20:31:22 资源文章 12 ℃ 0 评论

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

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

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

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

先看一下卷积计算的示例


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

二维卷积算子

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

#二维卷积算子
import paddle 
import paddle.nn as nn

class 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.]]])

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表