深入分析Pytorch核心要点,CNN解密!

哈喽,我是小壮!

初学者对于创建卷积神经网络(CNN)可能不太熟悉,下面我们以一个完整的案例来进行说明。

CNN是一种广泛应用于图像分类、目标检测、图像生成等任务的深度学习模型。它通过卷积层和池化层自动提取图像的特征,并通过全连接层进行分类。这种模型的关键在于利用卷积和池化的操作,有效地捕捉图像中的局部特征,并通过多层网络进行组合,从而实现对图像的高级特征提取和分类。

原理

1.卷积层(Convolutional Layer):

卷积层通过卷积操作来提取输入图像中的特征。这个操作涉及一个可学习的卷积核,它在输入图像上滑动并计算滑动窗口下的点积。这个过程有助于提取局部特征,从而增强网络对平移不变性的感知能力。

公式:

其中,x是输入,w是卷积核,b是偏置。

2.池化层(Pooling Layer):

池化层是一种常用的降维技术,其作用是减小数据的空间维度,从而降低计算量,并提取出最显著的特征。其中,最大池化是一种常见的池化方式,它会在每个窗口中选择最大的值作为代表。通过最大池化,我们可以在保留重要信息的同时,减少数据的复杂度,提高模型的计算效率。

公式(最大池化):

3.全连接层(Fully Connected Layer):

全连接层在神经网络中扮演着重要的角色,它将卷积和池化层提取的特征映射连接到输出类别。全连接层的每个神经元都与前一层的所有神经元相连,这样可以实现特征的综合和分类。

实战步骤和详解

1.步骤

  • 导入必要的库和模块。
  • 定义网络结构:使用nn.Module定义一个继承自它的自定义神经网络类,定义卷积层、激活函数、池化层和全连接层。
  • 定义损失函数和优化器。
  • 加载和预处理数据。
  • 训练网络:使用训练数据迭代训练网络参数。
  • 测试网络:使用测试数据评估模型性能。

2.代码实现

import torchimport torch.nn as nnimport torch.optim as optimfrom torchvision import datasets, transforms# 定义卷积神经网络类class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()# 卷积层1self.conv1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=3, stride=1, padding=1)self.relu = nn.ReLU()self.pool = nn.MaxPool2d(kernel_size=2, stride=2)# 卷积层2self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, stride=1, padding=1)# 全连接层self.fc1 = nn.Linear(32 * 7 * 7, 10)# 输入大小根据数据调整def forward(self, x):x = self.conv1(x)x = self.relu(x)x = self.pool(x)x = self.conv2(x)x = self.relu(x)x = self.pool(x)x = x.view(-1, 32 * 7 * 7)x = self.fc1(x)return x# 定义损失函数和优化器net = SimpleCNN()criterion = nn.CrossEntropyLoss()optimizer = optim.Adam(net.parameters(), lr=0.001)# 加载和预处理数据transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)# 训练网络num_epochs = 5for epoch in range(num_epochs):for i, (images, labels) in enumerate(train_loader):optimizer.zero_grad()outputs = net(images)loss = criterion(outputs, labels)loss.backward()optimizer.step()if (i+1) % 100 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item()}')# 测试网络net.eval()with torch.no_grad():correct = 0total = 0for images, labels in test_loader:outputs = net(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()accuracy = correct / totalprint('Accuracy on the test set: {}%'.format(100 * accuracy))

这个示例展示了一个简单的CNN模型,使用MNIST数据集进行训练和测试。

接下来,咱们添加可视化步骤,更直观地了解模型的性能和训练过程。

可视化

1.导入matplotlib

import matplotlib.pyplot as plt

2.在训练过程中记录损失和准确率:

在训练循环中,记录每个epoch的损失和准确率。

# 在训练循环中添加以下代码train_loss_list = []accuracy_list = []for epoch in range(num_epochs):running_loss = 0.0correct = 0total = 0for i, (images, labels) in enumerate(train_loader):optimizer.zero_grad()outputs = net(images)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()if (i+1) % 100 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item()}')epoch_loss = running_loss / len(train_loader)accuracy = correct / totaltrain_loss_list.append(epoch_loss)accuracy_list.append(accuracy)

3.可视化损失和准确率:

# 在训练循环后,添加以下代码plt.figure(figsize=(12, 4))# 可视化损失plt.subplot(1, 2, 1)plt.plot(range(1, num_epochs + 1), train_loss_list, label='Training Loss')plt.title('Training Loss')plt.xlabel('Epochs')plt.ylabel('Loss')plt.legend()# 可视化准确率plt.subplot(1, 2, 2)plt.plot(range(1, num_epochs + 1), accuracy_list, label='Accuracy')plt.title('Accuracy')plt.xlabel('Epochs')plt.ylabel('Accuracy')plt.legend()plt.tight_layout()plt.show()

这样,咱们就可以在训练过程结束后看到训练损失和准确率的变化。

导入代码后,大家可以根据需要调整可视化的内容和格式。

以上就是深入分析Pytorch核心要点,CNN解密!的详细内容,更多请关注昆居客【www.kunjuke.com】AI人工智能频道。

相关推荐:

初期投资 550 亿美元,马斯克 Terafab 芯片项目迎首位核心高管 Gary Jiang

感谢网友 不一样的体验 的线索投递! 7 月 1 日消息,科技媒体 Wccftech 昨日(6 月 30 日)发布博文,报道称特斯拉芯片制造项目 Terafab 迎来首位核心高管,在英特尔工作近 18 年的盖瑞 · 江(Gary Jiang)将出任总监(Director Tera Fab)。查询领英(LinkedIn)页面资料,他于 2026 年 6 月出任特斯拉 Tera Fab 总监一职,工作...

月相计划胡迪尼核心玩法介绍

月相计划胡迪尼怎么玩,今天给大家介绍全瑟瑞恩最会变戏法的天才魔术师特工 —— 胡迪尼。不管是想靠魔术变换天胡开局、玩省心的科学召唤流,还是走金币爆发路线,他都能满足你。 月相计划胡迪尼核心玩法介绍: 一、基础档案 胡迪尼以近景魔术闻名,扑克牌在他手中随心变幻,现场观众可以近距离观看、触摸,甚至直接参与魔术表演。每个人都目不转睛地盯着他的每一步操作,却依然参不透其中奥妙。 二、核心异能:混乱魔法 这...

三国:天下归心典韦核心队伍搭配

三国:天下归心典韦怎么配队,今天为大家带来一套以典韦为核心的队伍搭配,该队伍由典韦、夏侯惇、刘备组成,典韦和夏侯惇在S2赛季都得到了加强,不仅提升了反击概率,还提升了反击伤害倍率。 三国:天下归心典韦核心队伍搭配: 一、阵容介绍 阵法推荐:锥形阵。 英雄站位:刘备站夏侯惇的追击格,夏侯惇站典韦的追击格,典韦和夏侯惇同时站刘备的追击格。 兵种站位:在第三列放置3名五斗米祭。 天赋解读: 典韦天赋【折...

神将传说叠伤流核心武将养成攻略

神将传说叠伤流搭配哪些武将,本期攻略将为您带来“铁三角”的终极配置方案,从战法、宝石、配饰到战马、阵法、副将,全方位解析如何将许褚、张辽、于禁打造成无坚不摧的战场利刃,让叠伤效果发挥到极致。 神将传说叠伤流核心武将养成攻略: 一、战法技能推荐 将印本身就自带两个战法技能,装配两个枭雄金印将印本身就自带两个战法技能,装配两个枭雄金印。再领悟三个战法,通过战法的提升也能给武将本体带来不小的收益。 许诸...

神将传说双赵云阵容核心战法推荐

神将传说双赵云阵容战法怎么选,魔·赵云:属于半肉半输出型的武将,在战法搭配上有两个思路,本篇将深入解析这两位核心武将的战法选择思路,并进一步阐明该阵容的战术逻辑与后期潜力,助您从“能用”到“精通”。 神将传说双赵云阵容核心战法推荐: 魔·赵云:属于半肉半输出型的武将,在战法搭配上有两个思路。 1、提高坦度: 可以选择[初级守护]为队友附加护盾,或【初级自守】提高生命。 初级守护:战斗开始,以自身血...

OPPO R11s 核心参数全面评测:现在还值得入手吗?

OPPO R11s二手220–230元,骁龙660+Android 9可流畅运行微信8.0.58等旧版App,但不支持2025年后新版微信10.x和抖音30.x;需刷入ColorOS 6.1才具备64位环境;屏幕紫边、续航<4小时20分、充电异常均提示老化。 想花两百多元买一台能刷微信、看视频、接电话不卡顿的手机,OPPO R11s目前在二手平台9成新售价约220元至230元,它搭载高通骁龙660...

Notion AI怎样自动整理会议纪要_录音转文字与要点提炼全流程【方案】

Notion AI可通过五种方法自动生成结构化会议纪要:一、原生/meet实时转录+AI提炼;二、导入外部音频触发AI转写与结构化;三、粘贴第三方转写稿+定制提示词;四、基于数据库模板反向填充;五、分议题切片逐块处理。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您在会议结束后需要快速将录音转化为结构清晰的会议纪要,但面临转写不准、要...

iPhone 17有哪些黑科技 iPhone 17核心卖点详细汇总

iPhone 17标准版实现系统性突破:全系标配1–120Hz ProMotion高刷屏、A19芯片、4800万融合双摄、256GB起步存储及多项Pro级影像与AI能力,真正实现旗舰技术下放。 iPhone 17不是小修小补,而是从底层到体验的系统性突破。它把过去只在Pro系列或专业设备上出现的技术,下放到了标准版,真正做到了“旗舰能力全民化”。 120Hz ProMotion全系标配,屏幕体验彻...