直接代码
import torch as t
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
# 定义网络
print("===================定义网络=========================")
# 定义网络时,需要继承nn.Module,并实现它的forward方法,把网络中具有可学习参数的层放在构造函数__init__中。
# 如果某一层(如ReLU)不具有可学习的参数,则既可以放在构造函数中,也可以不放,但建议不放在其中,
# 而在forward中使用nn.functional代替。
#只要在nn.Module的子类中定义了forward函数,backward函数就会自动被实现(利用autograd)。
# 在forward 函数中可使用任何tensor支持的函数,还可以使用if、for循环、print、log等Python语法,
# 写法和标准的Python写法一致。
#LeNet的网络结构
class Net(nn.Module):
def __init__(self):
# nn.Module子类的函数必须在构造函数中执行父类的构造函数
# 下式等价于nn.Module.__init__(self)
super(Net, self).__init__()
# 卷积层 '1'表示输入图片为单通道, '6'表示输出通道数,'5'表示卷积核为5*5
#步长默认是1
self.conv1 = nn.Conv2d(1, 6, 5)
# 卷积层
self.conv2 = nn.Conv2d(6, 16, 5)
# 仿射层/全连接层,y = Wx + b
self.fc1