前言:
如今你们对“卷积的用处”大体比较讲究,小伙伴们都需要学习一些“卷积的用处”的相关资讯。那么小编在网上网罗了一些对于“卷积的用处””的相关文章,希望朋友们能喜欢,小伙伴们快快来了解一下吧!卷积神经网络(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.]]])
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #卷积的用处