Pytorch 学习笔记(四)卷积网络基础篇

上一节回顾

在介绍本篇之前,先就上一节的部分代码进行简要说明,在上一讲中我们利用torchvision模块中的datasets调用了MINST数据集,利用了如下图所示的结构进行如下的处理,线性层利用torch.nn.Linear(),Relu层利用torch.nn.functional as F进行调用,而view()函数则可以来改变x的自身形状。
在这里插入图片描述


卷积网络工作流程

在这里插入图片描述

卷积网络结构如图所示,图像输入进来后,先进行特征提取 ,在进行分类操作,经过卷积处理后,数据维度下降但能有保留原有数据的关键数据,图中所示的操作为卷积与下采样交替进行,缩小特征尺度,减少计算量,当然,这种结构不是一成不变,也可以将图片输入进来后,先进行上采样 ,再进行卷积与下采样,只要保证最终输出的特征维度下降即可,在分类操作中,我们可以将最终输出层输出的数据沿着三个维度展开成一个一维向量,将每个数据均按照这种方式都展开,并最终保存到一个向量中,此时特征提取的过程结束,将向量传给全连接层,后续则进行分类操作。

一、什么是卷积

在这里插入图片描述

图像是有RGB三个通道组成的,即red,green,blue,每个通道可以理解为一个平面模板,都有着各自的不同权值(0~255),图中图片的尺寸大小为,input channel * width * hight,input channel,这里暂且将这个三个数成为,厚度、宽、长,实际上为,RGB三个通道,而卷积操作最重要的部分是卷积核,卷积核的尺寸大小为input channel,patch,其中厚度相同保证了卷积完后输出一个厚度为1的特征空间,而卷积核的个数决定卷积操作后的最终输出的厚度。
在这里插入图片描述
图中展示常规的卷积操作。
在这里插入图片描述
值得注意是,一个卷积核最终只能输出一个厚度为1的特征空间,但是其实现过程其实照片各个通道与卷积各个通道的卷积核进行卷积后,在进行相加得到的。
在这里插入图片描述
在这里插入图片描述

二、使用步骤

1.简单例子

代码如下(示例):

import torch

batch_size = 1
cov_size = 3
input_channel = 5
output_channel = 10
weight,height = 100,100

input=torch.randn(batch_size,input_channel,weight,height)                 # 输入数据X[10,16,30,32],其分别代表:10组数据,通道数为16,高度为30,宽为32

cov = torch.nn.Conv2d(input_channel,output_channel,cov_size)              # in_channel: 输入数据的通道数,例RGB图片通道数为3;out_channel: 输出数据的通道数,这个根据模型调整;

output = cov(input)

print(input.shape)
print(output.shape)
print(cov.weight.shape)																#output的通道数,input的通道数,宽度,高度

torch.Size([1, 5, 100, 100])
torch.Size([1, 10, 98, 98])
torch.Size([10, 5, 3, 3])

2.在上述的例子中,如果想要实现0填充操作,可以利用torch.nn.Conv2d(padding=1)来实现填充操作。

import torch
input = [3,4,6,5,7, 2,4,6,8,2, 1,6,7,8,4, 9,7,4,6,2, 3,7,5,4,1]
input = torch.Tensor(input).view(1, 1, 5, 5)
conv_layer = torch.nn.Conv2d(1, 1, kernel_size=3, padding=1, bias=False)         #padding=1为填充操作,bias=False表示不进行没有偏移量,如果想要设置步长,设置stride = 即可 
kernel = torch.Tensor([1,2,3,4,5,6,7,8,9]).view(1, 1, 3, 3)
conv_layer.weight.data = kernel.data											 #自己定义的卷积核 
output = conv_layer(input)
print(output)

3.Max Pooling层

import torch

input2=[1,1,2,3,
        2,4,5,6,
        4,4,7,56,
        4,4,8,5]
input2 = torch.Tensor(input2).view(1,1,4,4)
Max_pool = torch.nn.MaxPool2d(2)

output = Max_pool(input2)
print(output)








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值