上海备案证查询网站查询网站查询,帮你做海报网站,商城类网站能做响应式设计吗,win主机安装wordpress计算机如何解析图片#xff1f;
在计算机的眼中#xff0c;一张灰度图片#xff0c;就是许多个数字组成的二维矩阵#xff0c;每个数字就是此点的像素值#xff08;图-1#xff09;。在存储时#xff0c;像素值通常位于[0, 255]区间#xff0c;在深度学习中#xff0…计算机如何解析图片
在计算机的眼中一张灰度图片就是许多个数字组成的二维矩阵每个数字就是此点的像素值图-1。在存储时像素值通常位于[0, 255]区间在深度学习中像素值通常位于[0, 1]区间。 图-1 一张彩色图片是使用三张图片叠加而成即RGBred green blue)图-2。 图-2 什么是卷积
标准的神经网络是全连接的方式全连接会获取更多的信息但同时也包含着巨大的算力需求。在以前算力完全不足以支撑如此巨大的计算量但是又要进行处理因此当时的人们联想到了人类观察事物的过程即结合人眼观察事物的角度——先观察吸引我们的点忽略不吸引我们的点这称为局部相关性Receptive Field。应用到神经网络中就出现了卷积的概念。
卷积操作就是先仅仅观察一部分然后移动视野观察下一部分这就称为卷积操作图-3。 图-3 表现在神经网络中就相当于只连接局部相关性的属性假设红色的线都是相关的其它的都断开当然红色的线都是我自己瞎画的如图-4所示 图-4 表现在实例上就是图-5的情况 图-5 卷积的数学表示设x(t)为输入的数据h(t)为遍历使用的矩阵y(t)为经过卷积计算得到的矩阵将x(t)和h(t)进行点乘运算将每次点成的结果进行累加得到y(t)对应元素的值公式-1。 公式-1 宏观效果图-6 图-6 实例
以不同的 h(t) 进行卷积操作会获取到不同的特征
锐化图-7 图-7 模糊处理图-8 图-8 边缘检测图-9 图-9 卷积神经网络 图-3 是以1个Kernel_channel进行卷积运算。以多个Kernel_channels进行卷积运算图-10 图-10 假设原来的图像是一个28*28的灰度图像即[1, 28, 28]。使用3*3的特征矩阵以7个角度来观察这副图像最后得到的卷积层是[7, 26, 26]。
称呼声明
Input_channels :输入的图像的通道彩色图像就是3灰度图像就是1
Kernel_channels: 以多少个视角来观察图像
Kernel_size : 特征矩阵的size
Stride: 每次向下/左移动的步长
Padding: 空白的数量补0
实例图-11注意右下角的标注每个圈中的值必须相等。将同一视角不同通道得出来的矩阵进行叠加最后会得到一个高维的特性。卷积的过程叫做特征提取。 图-11 输出图像的大小计算公式-2 公式-2 代码示例
# 1、
xtorch.rand(1,1,28,28) #[b,c,h,w]
layernn.Conv2d(1,3,kernel_size3,stride1,padding0) # weight [3,1,3,3],不补零
outlayer.forward(x)
print(out.shape)
#torch.Size([1, 3, 26, 26])# 2、
layernn.Conv2d(1,3,kernel_size3,stride1,padding1) # weight [3,1,3,3],补零
outlayer.forward(x)
print(out.shape)
#torch.Size([1, 3, 14, 14])# 3、
layernn.Conv2d(1,3,kernel_size3,stride2,padding1) # weight [3,1,3,3],补零
outlayer.forward(x)
print(out.shape)
#torch.Size([1, 3, 14, 14])# 说明
#现在基本不用layer.forward而是用layer
outlayer(x) #推荐使用
print(out.shape)
#torch.Size([1, 3, 14, 14])###### inner weight $ bias #########
#直接调用
print(layer.weight)
# Parameter containing:
# tensor([[[[-0.1249, -0.3302, -0.1774],
# [-0.1542, 0.0873, 0.0282],
# [-0.0006, -0.1798, -0.1030]]],
#
#
# [[[ 0.1932, 0.3240, 0.1747],
# [-0.2188, -0.1775, -0.0652],
# [-0.1455, -0.1220, 0.0629]]],
#
#
# [[[ 0.2596, 0.3017, 0.2028],
# [-0.2629, -0.0715, 0.3267],
# [ 0.3174, -0.1441, -0.1714]]]], requires_gradTrue)print(layer.weight.shape)
# torch.Size([3, 1, 3, 3])print(layer.bias.shape)
# torch.Size([3])
向上/向下采样
最大采样选取最大的图-12 图-12 代码演示
xout
print(x.shape)
#torch.Size([1, 3, 14, 14])layernn.MaxPool2d(2,stride2) #最大池化2*2的滑动窗口步长为2
outlayer(x) #推荐使用
print(out.shape)
#torch.Size([1, 3, 7, 7])
平均采样选择平均值图-13 图-13 代码演示
xout
print(x.shape)
#torch.Size([1, 3, 14, 14])outF.avg_pool2d(x,2,stride2) #平均池化2*2的滑动窗口步长为2
print(out.shape)
#torch.Size([1, 3, 7, 7])
上采样选取最邻近的图-14 扩展到卷积层呢以一个5层的卷积层为例进行分析 代码演示
xout
print(out.shape)
# torch.Size([1, 3, 7, 7])
outF.interpolate(x,scale_factor2,modenearest)# 为放大倍数
print(out.shape)
# torch.Size([1, 3, 14, 14])
outF.interpolate(x,scale_factor3,modenearest)
print(out.shape)
# torch.Size([1, 3, 21, 21]) 扩展到卷积层 图-16 1、输入是一个32*32的灰度图像[1, 32, 32]使用一个3*3的特征矩阵进行卷积分别从6个角度进行卷积步长为1会得到一个[6,1,28,28]的图像 2、上采样-》[6,1,14,14] 3、卷积-》[16,1,10,10] 4、上采样-》[16,1,5,5] 5、全连接 6、全连接 7、高斯分布
ReLU 图-17 代码演示
#两种方式一种是nn.ReLU另一种是F.relu
xout
print(x.shape)
#torch.Size([1, 3, 7, 7])layernn.ReLU(inplaceTrue)
outlayer(x)
print(out.shape)
#torch.Size([1, 3, 7, 7])#与上面三行等价
outF.relu(x)
print(out.shape)
#torch.Size([1, 3, 7, 7])#relu激活函数并不改变size大小