从零学习pytorch 第5课 PyTorch模型搭建三要素

课程目录(在更新,喜欢加个关注点个赞呗):
从零学习pytorch 第1课 搭建一个超简单的网络
从零学习pytorch 第1.5课 训练集、验证集和测试集的作用
从零学习pytorch 第2课 Dataset类
从零学习pytorch 第3课 DataLoader类运行过程
从零学习pytorch 第4课 初见transforms
从零学习pytorch 第5课 PyTorch模型搭建三要素
从零学习pytorch 第5.5课 Resnet34为例学习nn.Sequential和模型定义
从零学习PyTorch 第6课 权值初始化
从零学习PyTorch 第7课 模型Finetune与预训练模型
从零学习PyTorch 第8课 PyTorch优化器基类Optimier
三要素其实很简单

  1. 必须要继承nn.Module这个类,要让PyTorch知道这个类是一个Module
  2. 在__init__(self)中设置好需要的组件,比如conv,pooling,Linear,BatchNorm等等
  3. 最后在forward(self,x)中用定义好的组件进行组装,就像搭积木,把网络结构搭建出来,这样一个模型就定义好了

我们来看一个例子:
先看__init__(self)函数

def __init__(self):
	super(Net,self).__init__()
	self.conv1 = nn.Conv2d(3,6,5)
	self.pool1 = nn.MaxPool2d(2,2)
	self.conv2 = nn.Conv2d(6,16,5)
	self.pool2 = nn.MaxPool2d(2,2)
	self.fc1 = nn.Linear(16*5*5,120)
	self.fc2 = nn.Linear(120,84)
	self.fc3 = nn.Linear(84,10)

第一行是初始化,往后定义了一系列组件。这里不详细讲了,你可以直接上网百度函数,也可以查看官方文档。都不难

定义完这些定义forward函数

def forward(self,x):
	x = self.pool1(F.relu(self.conv1(x)))
	x = self.pool2(F.relu(self.conv2(x)))
	x = x.view(-1,16*5*5)
	x = F.relu(self.fc1(x))
	x = F.relu(self.fc2(x))
	x = self.fc3(x)
	return x

x为模型的输入,第一行表示x经过conv1,然后经过激活函数relu,然后经过pool1操作
第三行表示对x进行reshape,为后面的全连接层做准备

至此,对一个模型的定义完毕,如何使用呢?

例如:

net = Net()
outputs = net(inputs)

下一节课 会举一个具体的例子(残差网络ResNet34)来分析这个模型是如何搭建了

发布了78 篇原创文章 · 获赞 14 · 访问量 9734

猜你喜欢

转载自blog.csdn.net/qq_34107425/article/details/104101800