首先,搭建一个如下图所示的神经网络:
分析图片,inputs输入图片的inchannels=3,尺寸是32*32,经过kernel_size=5的卷积操作后out_channels=32,尺寸32*32,套用下方公式可算出padding=2(默认dilation=1,stride=1):
self.conv1=Conv2d(3,32,5,padding=2)
之后再进行池化操作Max-pooling,kernel_size=2:
self.maxpool1=MaxPool2d(kernel_size=2)
再依此类推,相关代码如下:
from fsspec.registry import s3_msg
from sympy.tensor.array.arrayop import Flatten
from torch import nn
from torch.nn import Conv2d, MaxPool2d
class Aaxxx(nn.Module):
def __init__(self): #self 代表了类 Aaxxx 的当前实例,使得该实例能够存储和使用定义在类中的各种属性和方法。
super(Aaxxx,self).__init__()
self.conv1=Conv2d(3,32,5,padding=2)
self.maxpool1=MaxPool2d(kernel_size=2)
self.conv2=Conv2d(32,32,5,padding=2)
self.maxpool2=MaxPool2d(2)
self.conv3=Conv2d(32,64,5,padding=2)
self.maxpool3=MaxPool2d(2)
self.flatten=nn.Flatten()
self.linear1=nn.Linear(1024,64)
self.linear2=nn.Linear(64,10)
def forward(self,x):
x=self.conv1(x)
x=self.maxpool1(x)
x=self.conv2(x)
x=self.maxpool2(x)
x=self.conv3(x)
x=self.maxpool3(x)
x=self.flatten(x)
x=self.linear1(x)
x=self.linear2(x)
return x
aa=Aaxxx()
若是使用Sequential之后,代码便可以封装起来,更加简洁:
from fsspec.registry import s3_msg
from sympy.tensor.array.arrayop import Flatten
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Sequential
class Aaxxx(nn.Module):
def __init__(self): #self 代表了类 Aaxxx 的当前实例,使得该实例能够存储和使用定义在类中的各种属性和方法。
super(Aaxxx,self).__init__()
self.model=Sequential(
Conv2d(3, 32, 5, padding=2),
MaxPool2d(kernel_size=2),
Conv2d(32, 32, 5, padding=2),
MaxPool2d(2),
Conv2d(32, 64, 5, padding=2),
MaxPool2d(2),
nn.Flatten(),
nn.Linear(1024, 64),
nn.Linear(64, 10)
)
def forward(self,x):
x=self.model(x)
return x
aa=Aaxxx()
print(aa)
模型输出结果为:
再使用Tensorboard查看
writer.add_graph(aa,torch.ones(64,3,32,32))
再点击模型的矩形框,可以放大展开,并详细查看各种参数:
学习内容来自b站小土堆,仅用作记录学习,切勿商用 。
标签:nn,--,32,self,MaxPool2d,Pytorch,Sequential,import,Conv2d From: https://blog.csdn.net/aaaax__/article/details/142640615