pytorch官网:torch.nn
module的使用:
import torch from torch import nn class Model(nn.Module): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs)//可以在生成代码中完成 def forward(self,input): output=input+1 return output//前向传播 model=Model() x=torch.tensor(1.0) output=model(x) print(output)
输出为2.
二维卷积操作:
import torch import torch.nn.functional as F input=torch.tensor([[1,2,0,3,1], [0,1,2,3,1], [1,2,1,0,0], [5,2,3,1,1], [2,1,0,1,1]]) kernel=torch.tensor([[1,2,1], [0,1,0], [2,1,0]])//卷积核 input=torch.reshape(input,(1,1,5,5))#1通道数,1batch,5*5数据维度 kernel=torch.reshape(kernel,(1,1,3,3)) print(input.shape) print(kernel.shape) output=F.conv2d(input,kernel,stride=1) print(output) output2=F.conv2d(input,kernel,stride=1,padding=1) print(output2)
执行结果:
torch.Size([1, 1, 5, 5])
torch.Size([1, 1, 3, 3])
tensor([[[[10, 12, 12],
[18, 16, 16],
[13, 9, 3]]]])//stride=1的
tensor([[[[ 1, 3, 4, 10, 8],
[ 5, 10, 12, 12, 6],
[ 7, 18, 16, 16, 8],
[11, 13, 9, 3, 4],
[14, 13, 9, 7, 4]]]])//stride=1的和padding=1的
padding=1即将原矩阵上下左右扩1格。再卷积
小示例:
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)//建立dataset dataloader=DataLoader(dataset,batch_size=64)//64loader class Model(nn.Module): def __init__(self): super(Model,self).__init__() self.conv1=Conv2d(3,6,3,stride=1,padding=0) def forward(self,x): x=self.conv1(x) return x model=Model()//创建神经网络 writer=SummaryWriter("logs") step=0 for data in dataloader: imgs,targets=data output=model(imgs) print(imgs.shape) print(output.shape) writer.add_images("input",imgs,step) output=torch.reshape(output,(-1,3,30,30)) writer.add_images("output",output,step) step+=1