个人网站域名怎么取,设计深圳网站制作,广西建设执业资格注册中心网站,影视类网站建设卷积#xff1a;
就是有一个卷积核#xff0c;还有一个x*x的图片#xff0c;卷积核大小是y*y的话#xff0c;对图像做卷积就是将图片中和卷积核大小一样的部分进行运算#xff0c;也就是相乘求和#xff0c;有点类似算法中的滑动窗口#xff0c;只不过这里是二维滑动窗…卷积
就是有一个卷积核还有一个x*x的图片卷积核大小是y*y的话对图像做卷积就是将图片中和卷积核大小一样的部分进行运算也就是相乘求和有点类似算法中的滑动窗口只不过这里是二维滑动窗口比如说
[1,1,1,0,0
0,1,1,1,0
0,0,1,1,1
0,0,1,1,1
0,0,1,1,0
0,1,1,0,0]一个5*5的卷积核是[[1,0,1],[0,1,1],[1,0,1]]那么如果对A33做卷积那么就是对应位置相乘然后求和也就是4然后卷积后的大小等于(x-y/步长s)1所以写代码的时候经常会看到stride步长参数但是这样也能看出卷积后大小会急速缩小所以有时候为了让卷积后大小和输入一样会在周围加上填充0可以理解为补上n圈的0代码中参数叫paddingpadding1就是补一圈这样图片变成7*7卷积后还是5*5步长通常为1的情况下
代码中常看见Conv2d这就是卷积层里面参数像filter是通道数kernel_size就是卷积核大小strides步长padding填充卷积过程也可以看出可以提取并增强特征 池化
和卷积类似也会给一个池化核不过不像卷积核那样有个值是个空的运行过程和卷积一样也是依次移动。池化规则又最大值池化平均值池化等所以代码中常常见到Maxpooling2d里面参数也有pool_sizestridespadding池化也可以降维提取特征
卷积池化在图片识别中很重要主要是这三个特性平移、旋转、尺度不变性也就是说不管特征怎么平移旋转或者放缩最后都能把特征提取出来。比如mnist识别数字是站着还是躺着都能识别
相比于都用全连接层比如MLPCNN模型有俩特点局部连接和权重共享啥意思呢这里没太懂个人理解就是每次运算因为卷积核覆盖部分很多都是一样的所以可以节省很多算力资源 看个训练mnist的cnn模型代码
class Net(torch.nn.Module):def __init__(self):super(Net, self).__init__()#两个卷积层self.conv1 torch.nn.Conv2d(1, 10, kernel_size5) #1为in_channels 10为out_channelsself.conv2 torch.nn.Conv2d(10, 20, kernel_size5)#池化层self.pooling torch.nn.MaxPool2d(2) #2为分组大小2*2#全连接层 320 20 * 4 * 4self.fc torch.nn.Linear(320, 10)def forward(self, x):batch_size x.size(0)x F.relu(self.pooling(self.conv1(x)))x F.relu(self.pooling(self.conv2(x)))x x.view(batch_size, -1) #将数据展开为输入全连接层做准备x self.fc(x)return xconv1就是输入通道为1输出10通道这里10通道数代表输出十张特征图卷积核5*5然后池化后经过激活函数也可以先relu后池化能更好实现非线性特征学习然后再池化减少尺寸两层conv后经过个全连接层得出结果这里320个神经元的由来第一层卷积把28*28变成28-5/1124然后池化层变成24-2/2112层然后第二层卷积12-5/118层然后第二次池化8-2/214层由于最后输出通道数有20所以一共就是4*4的有20张总特征数就是4*4*20320注意relu或sigmod这种激活函数层不会改变图片大小