新闻中心
深入分析Pytorch核心要点,CNN解密!
哈喽,我是小壮!
初学者对于创建卷积神经网络(CNN)可能不太熟悉,下面我们以一个完整的案例来进行说明。
CNN是一种广泛应用于图像分类、目标检测、图像生成等任务的深度学习模型。它通过卷积层和池
化层自动提取图像的特征,并通过全连接层进行分类。这种模型的关键在于利用卷积和池化的操作,有效地捕捉图像中的局部特征,并通过多层网络进行组合,从而实现对图像的高级特征提取和分类。
原理
1.卷积层(Convolutional Layer):
卷积层通过卷积操作来提取输入图像中的特征。这个操作涉及一个可学习的卷积核,它在输入图像上滑动并计算滑动窗口下的点积。这个过程有助于提取局部特征,从而增强网络对平移不变性的感知能力。
公式:
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜
其中,x是输入,w是卷积核,b是偏置。
2.池化层(Pooling Layer):
池化层是一种常用的降维技术,其作用是减小数据的空间维度,从而降低计算量,并提取出最显著的特征。其中,最大池化是一种常见的池化方式,它会在每个窗口中选择最大的值作为代表。通过最大池化,我们可以在保留重要信息的同时,减少数据的复杂度,提高模型的计算效率。
公式(最大池化):
VALL-E
VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法
134
查看详情

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解密!的详细内容,更多请关注其它相关文章!
# cnn
# 浦城专业seo联系方式
# 我们可以
# 不太
# 加载
# 我是
# 艺术风格
# 机中
# 如何设置
# 有什么
# 多线程
# 是一种
# fig
# pytorch
# 天津市推广专业网站
# 如何优化网站资产加载
# 靖江网站建设服务电话
# 网站推广托管文案范文
# 瑜伽营销推广方案模板app免费
# 江苏邮件营销推广平台
# 12月份营销推广计划
# 成都谷歌网站seo优化
# 精准营销配合推广方案设计
相关栏目:
【
行业资讯67740 】
【
技术百科0 】
【
网络运营39195 】
相关推荐:
按键精灵datediff函数怎么用 如何使用按键精灵中的Datediff函数教程
单片机怎么做组合
access中如何使用常用宏命令
品道音响上的power键是什么意思
电动车eco和power是什么意思
unix时间戳是什么意思
5r是多少钱
单片机蓝牙怎么开启设备
春运抢票最快几天能成功
宝马x5仪表盘上边有power是什么意思
学typescript要求什么
电动车power灯亮红灯是什么意思
360n6锁屏壁纸怎么设置
夸克网盘为什么解析错误
65寸电视长宽多少厘米
j*a数组逆序怎么写
8k是多少钱
固态硬盘如何测试好坏
夸克用的什么服务器
如何用命令连接mysql
反向春运抢票方式
市盈率百分位roe是什么意思
为什么有的夸克带电
如何注释typescript
typescript和es6先学哪个
typescript有什么作用
跑分是什么意思
萝卜快跑的收费标准是什么
每日推荐电声音乐软件有哪些
如何通过dos命令
怎么在爱奇艺中投屏到电视最新方法
如何利用运行命令查看声音启动
如何更新固态硬盘固件
typescript在浏览器里怎么用
内网和外网区别 内网和外网有什么区别
typescript中怎么引用js文件
1tb等于多少mb
openwrt有什么用
折叠屏手机哪个卖得最好
如何区别固态硬盘
喇叭上POWER4欧是什么意思
typescript书籍哪个好
如何创建解压文件命令
typescript能干什么
税负是什么意思
金色cmyk色值是多少
市盈率3.2是什么意思
电脑5G怎么上传手机
电动车仪表盘上的power是什么意思
移动固态硬盘如何使用


2024-01-04
浏览次数:次
返回列表