代码练习解析

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,download=False, transform=transform) 

-  torchvision.datasets.CIFAR10  用于加载 CIFAR10 数据集。

-  root='./data'  指定数据集的存储路径。

-  train=True  表示加载训练集数据。

-  download=False  表示不自动下载数据集(假设数据集已经存在)。

-  transform=transform  表示对加载的数据应用之前定义的转换操作。

 trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,shuffle=True, num_workers=2) 

-  torch.utils.data.DataLoader  创建一个数据加载器,用于按批次加载数据。

-  trainset  是要加载的数据集。

-  batch_size=4  指定每个批次包含 4 个样本。

-  shuffle=True  表示在每个 epoch 中打乱数据顺序。

-  num_workers=2  指定使用 2 个子进程来加载数据。

 testset = torchvision.datasets.CIFAR10(root='./data', train=False,download=False, transform=transform) :与加载训练集类似,这里加载的是测试集数据( train=False )。

 testloader = torch.utils.data.DataLoader(testset, batch_size=4,shuffle=False, num_workers=2) :创建测试集的数据加载器, shuffle=False  表示测试集数据不打乱顺序。

 classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse','ship', 'truck') :定义了 CIFAR10 数据集中的 10 个类别名称。

 def __init__(self): 类的构造函数,用于初始化神经网络的层。

 super(CNNNet, self).__init__() :调用父类( nn.Module )的构造函数,这是在自定义神经网络类中必须要做的一步。

self.conv1 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=5, stride=1) 

定义第一个卷积层,输入通道数为 3(通常对应 RGB 图像),输出通道数为 16,卷积核大小为 5x5,步长为 1。

self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2) 

定义第一个最大池化层,池化核大小为 2x2,步长为 2。

self.conv2 = nn.Conv2d(in_channels=16, out_channels=36, kernel_size=3, stride=1) 

定义第二个卷积层,输入通道数为 16,输出通道数为 36,卷积核大小为 3x3,步长为 1。

self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2) 

定义第二个最大池化层,池化核大小为 2x2,步长为 2。

self.fc1 = nn.Linear(1296, 128) :定义第一个全连接层,输入特征数为 1296,输出特征数为 128。

self.fc2 = nn.Linear(128, 10) :定义第二个全连接层,输入特征数为 128,输出特征数为 10(对应 CIFAR10 数据集的 10 个类别)。

def forward(self, x): 定义前向传播函数,描述了数据在神经网络中的流动路径。

x = self.pool1(F.relu(self.conv1(x))) :对输入  x  进行第一次卷积操作,然后应用 ReLU 激活函数,最后进行第一次最大池化操作。

x = self.pool2(F.relu(self.conv2(x))) :对经过第一次卷积和池化后的  x  进行第二次卷积操作,然后应用 ReLU 激活函数,最后进行第二次最大池化操作。

 x = x.view(-1, 36 * 6 * 6) :将二维的特征图展平为一维向量,以便输入到全连接层中。 -1  表示自动计算该维度的大小。

 x = F.relu(self.fc2(F.relu(self.fc1(x)))) 

对展平后的  x  进行第一次全连接操作,应用 ReLU 激活函数,然后进行第二次全连接操作,再应用 ReLU 激活函数。

 return x :返回经过神经网络处理后的输出。

 net = net.to(device) :将神经网络模型移动到之前定义的设备( cuda   cpu )上。

 print("net have {} paramerters in total".format(sum(x.numel() for x in net.parameters()))) 

统计神经网络中所有可训练参数的数量,并打印出来。这里有个拼写错误, paramerters  应该是  parameters 

训练配置中的损失函数和优化器设置

提取前四层

训练模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值