最近在学土堆老师的pytorch入门系列教程,学到了卷积层书写部分,在这里做个小笔记
一、前言
这篇关于卷积层书写的文章是基于我前几天写的系列文章展开的。在这一部分要注意卷积层的输入通道和输出通道的变化。记得要reshape哟!
二、代码及注释理解
1.代码样例
代码如下(示例):
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
dataset=torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),download =True) #数据集
dataloader=DataLoader(dataset,batch_size= 64) #数据加载
class Tudui(nn.Module): #构建Tudui这个类
def __init__(self): #初始化
super(Tudui,self).__init__()
self.conv1=Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)
#定义好要用的卷积
def forward(self,x): #前项通道如何行使卷积操作
x=self.conv1(x)
return x
tudui=Tudui() #调用Tudui这个类
writer=SummaryWriter("p1") #可视化,保存在p1文件夹中
step=0
for data in dataloader: #从数据加载中取出一张张图片
imgs,targets=data
output=tudui(imgs)
print(imgs.shape)
print(output.shape)
writer.add_images("input",imgs,step) #将输入图片进行可视化
writer.add_images("output",output,step) #将输出图片进行可视化
step=step+1
writer.close()
2.成果展示
运行时会报错,原因是通道数不对,大概样子如下所示。
所以我需要进行改进,于是将输入通道数和输出通道数进行了变换,即reshape
代码如下:
import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
dataset=torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),download =True) #数据集
dataloader=DataLoader(dataset,batch_size= 64) #数据加载
class Tudui(nn.Module): #构建Tudui这个类
def __init__(self): #初始化
super(Tudui,self).__init__()
self.conv1=Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)
#定义好要用的卷积
def forward(self,x): #前项通道如何行使卷积操作
x=self.conv1(x)
return x
tudui=Tudui() #调用Tudui这个类
writer=SummaryWriter("p1") #可视化,保存在p1文件夹中
step=0
for data in dataloader: #从数据加载中取出一张张图片
imgs,targets=data
output=tudui(imgs)
print(imgs.shape)
print(output.shape)
writer.add_images("input",imgs,step) #将输入图片进行可视化
#torch.Size([64, 3, 32, 32])->[64, 6, 30, 30]
output=torch.reshape(output,(-1,3,30,30)) #进行reshape,因为不能确定第一位数,所以就将第一位数赋值为-1
writer.add_images("output",output,step) #将输出图片进行可视化
step=step+1
writer.close()
这时,可以正常输出输入通道和输出通道。如下所示。
在tensorboard中input和output展示如下所示:
三、总结
以上所学内容是根据土堆老师视频做的笔记。神经网络-卷积层_哔哩哔哩_bilibili