搭建网络模型基本上也有两种基本方法,一种是直接调用pyTorch里现成的经典训练模型,另一种方法是自己撰写网络模型。
pyTorch为我们提供了很多经典的训练模型,本章主要写分类的神经网络,有
下面列写如何使用现成的网络模型:
form torchvision。models import Alexnet
model = Alexnet() 这里面需要填入 需要分的类型数量 和 随机失活比例(dropout)
在torchvision.models中,以alexnut为例,分为Alexnet 以类的形式存在,和alexnet以函数的形式存在。两者在使用上的区别我还不太清楚,先暂且用Alexnet搭建。
这是最简单的调用网络的方法。除此之外,对于网络的操作还有很多,比如网络的追加、删改,本文只为搭建最简单的框架,这里不再过多介绍。
写一个神经网络的类,包含__init__、super、forward.
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
class Tudui(nn.Module):
def __init__(self):
super(Tudui, self).__init__()
# self.conv1 = Conv2d(in_channels=3,out_channels=32,kernel_size=5,padding=2,stride=1)#输入是32*32图像,输出也是32*32,故需要边缘补两圈零(padding)
# self.maxpool1 = MaxPool2d(2)
# self.conv2 = Conv2d(32,32,kernel_size=5,padding=2)
# self.maxpool2 = MaxPool2d(2)
# self.conv3 = Conv2d(in_channels=32,out_channels=64,kernel_size=5,padding=2)
# self.maxpool3 = MaxPool2d(2)
# self.flatten = Flatten() #就是数据展平的功能,64通道4*4的图像共1024个像素点,所以展成1024的长条。
# self.linear1 = Linear(1024,64) #1024的长条缩到64。
# self.linear2 = Linear(64,10) #64缩到10
#用Sequential体现DRY原则
self.model1 = Sequential(
Conv2d(3,32,5,padding=2),
MaxPool2d(2),
Conv2d(32,32,5,padding=2),
MaxPool2d(2),
Conv2d(32,64,5,padding=2),
MaxPool2d(2),
Flatten(),
Linear(1024,64),
Linear(64,10)
)
def forward(self,x):
x = self.model1(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
tudui = Tudui() #实例化模型