要想使用pytorch中的神经网络,则首先需要编写一个类去继承nn.Module
然后重写其中的init
以及forward
方法,forward方法就是一个使input变成output的函数,下面有个简单的例子
class tuDui(nn.Module):
def __init__(self):
super().__init__()
def forward(self,input):
output = input + 1
return output
tudui = tuDui()
x = torch.tensor(1.0)
output = tudui(x)
print(output)
这是一个战损版的神经网络,后续会讲解池化、非线性等操作。
卷积的基本概念就不介绍了,默认大家都知道什么是卷积,其本质就是通过一个滤波器对数组进行内积运算,直接来看在pytorch中如何对一张张图片进行卷积操作
首先我们先创建CIFAR10数据集
dataset = torchvision.datasets.CIFAR10("../dataset",train=False,transform=torchvision.transforms.ToTensor(),
download=True)
在这里我们已经通过transform把它转成了一个tensor数据类型,接着我们用dataloader来加载这个数据集
dataloader = DataLoader(dataset,batch_size=64)
创建我们自己的神经网络类
class TuDui(nn.Module):
def __init__(self):
super(TuDui, self).__init__()
self.conv1 = Conv2d(3,6,kernel_size=3,stride=1,padding=0)
def forward(self,x):
x = self.conv1(x)
return x
我们的卷积操作主要通过init方法中的Conv2d函数来实现,其中参数为输入的通道数、输出的通道数(这里指定为6)、卷积核的大小(这里为3代表一个3*3的矩阵)、每次移动的步长以及在数组外填充的宽度(这里为0代表不填充)
接着我们来使用tensorboard来加载这些图片
writer = SummaryWriter("../logs")
step = 0
for data in dataloader:
imgs,targets = data
output = tudui(imgs)
print(imgs.shape) #torch.Size([64, 3, 32, 32])
print(output.shape) #torch.Size([64, 6, 30, 30])
writer.add_images("input",imgs,step)
#因为彩色图像需要是3个通道才能显示,此时output为6通道,无法显示,因此要先进行转换,当维度设
#为-1时,其会根据其他指定的维度自行计算维度
output = torch.reshape(output,(-1,3,30,30))
writer.add_images("output",output,step)
step = step + 1
writer.close()
看完整代码
import torchvision
import torch
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):
def __init__(self):
super(TuDui, self).__init__()
self.conv1 = Conv2d(3,6,kernel_size=3,stride=1,padding=0)
def forward(self,x):
x = self.conv1(x)
return x
tudui = TuDui()
writer = SummaryWriter("../logs")
step = 0
for data in dataloader:
imgs,targets = data
output = tudui(imgs)
print(imgs.shape) #torch.Size([64, 3, 32, 32])
print(output.shape) #torch.Size([64, 6, 30, 30])
writer.add_images("input",imgs,step)
#因为彩色图像需要是3个通道才能显示,此时output为6通道,无法显示,因此要先进行转换,当维度设为-1时,其会根据
#其他指定的维度自行计算维度
output = torch.reshape(output,(-1,3,30,30))
writer.add_images("output",output,step)
step = step + 1
writer.close()