下面是子类化nn.Module
来定义复杂神经网络的方法,省略了自写部分,其神经网络的固定结构部分如下:
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
...省略 #这里按数据流向的顺序定义各各层
def forward(self, x): #覆盖基类的forward方法,该方法在类被实例化后并传参调用后会自动执行
...省略 #这里定义数据流的处理步骤
return x #返回最终结果
下面是神经网张的定义和使用的实际示例:
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim #用于定义优化器
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5) #定义第一个卷积层
self.pool = nn.MaxPool2d(2, 2) #定义一个池化层
self.conv2 = nn.Conv2d(6, 16, 5) #定义第二个卷积层
#定义三个全链接层
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(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
net = Net() #实例化网络
criterion = nn.CrossEntropyLoss() #定义一个损失函数
#定义一个优化器,优化器的作用是根据损失函数的结果来更新模型的权重参数
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
#使用样本和标签训练网络
...略
#使用测试数据测试网络
...略