深入分析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解密!的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本站10月22日消息,今年第三季度,科大讯飞实现净利润2579万元,同比下降81.86%;前三季度净利润9936万元,同比下降76.36%。科大讯飞副总裁江涛在Q3业绩说明会上透露,讯飞已于2023年初与华为升腾启动专项攻关,与华为联合研发高性能算子库,合力打造我国通用人工智能新底座,让国产大模型架构在自主创新的软硬件基础之上。他指出,目前华为升腾910B能力已经基本做到可对标英伟达A100。在即将举行的科大讯飞1024全球开发者节上,讯飞和华为在人工智能算力底座上将有进一步联合发布。他还提到,

在自然语言生成任务中,采样方法是从生成模型中获得文本输出的一种技术。这篇文章将讨论5种常用方法,并使用PyTorch进行实现。1、GreedyDecoding在贪婪解码中,生成模型根据输入序列逐个时间步地预测输出序列的单词。在每个时间步,模型会计算每个单词的条件概率分布,然后选择具有最高条件概率的单词作为当前时间步的输出。这个单词成为下一个时间步的输入,生成过程会持续直到满足某种终止条件,比如生成了指定长度的序列或者生成了特殊的结束标记。GreedyDecoding的特点是每次选择当前条件概率最

PyCharm是一款强大的集成开发环境(IDE),而PyTorch是深度学习领域备受欢迎的开源框架。在机器学习和深度学习领域,使用PyCharm和PyTorch进行开发可以极大地提高开发效率和代码质量。本文将详细介绍如何在PyCharm中安装配置PyTorch,并附上具体的代码示例,帮助读者更好地利用这两者的强大功能。第一步:安装PyCharm和Python

在详细了解去噪扩散概率模型(DDPM)的工作原理之前,我们先来了解一下生成式人工智能的一些发展情况,这也是DDPM的基础研究之一。 VAEVAE使用编码器、概率潜在空间和解码器。在训练过程中,编码器预测每个图像的均值和方差,并从高斯分布中对这些值进行采样。采样的结果传递到解码器中,解码器将输入图像转换为与输出图像相似的形式。 KL散度用于计算损失。 VAE的一个显着优势是其能够生成多样化的图像。在采样阶段,可以直接从高斯分布中采样,并通过解码器生成新的图像。 GAN在变分自编码器(VAEs)的短短一年之

PyTorch作为一款功能强大的深度学习框架,被广泛应用于各类机器学习项目中。PyCharm作为一款强大的Python集成开发环境,在实现深度学习任务时也能提供很好的支持。本文将详细介绍如何在PyCharm中安装PyTorch,并提供具体的代码示例,帮助读者快速上手使用PyTorch进行深度学习任务。第一步:安装PyCharm首先,我们需要确保已经在计算机上

深度学习是人工智能领域的一个重要分支,近年来受到了越来越多人的关注和重视。为了能够进行深度学习的研究和应用,往往需要使用到一些深度学习框架来帮助实现。在本文中,我们将介绍如何使用PHP和PyTorch进行深度学习。一、什么是PyTorchPyTorch是一个由Facebook开发的开源机器学习框架,它可以帮助我们快速地创建深度学习模型并进行训练。PyTorc

大家好,我是风筝两年前,将音视频文件转换为文字内容的需求难以实现,但是如今只需几分钟便可轻松解决。据说一些公司为了获取训练数据,已经对抖音、快手等短视频平台上的视频进行了全面爬取,然后将视频中的音频提取出来转换成文本形式,用作大数据模型的训练语料。如果您需要将视频或音频文件转换为文字,可以尝试今天提供的这个开源解决方案。例如,可以搜索影视节目的对话出现的具体时间点。话不多说,进入正题。Whisper这个方案就是OpenAI开源的Whisper,当然是用Python写的了,只需要简单安装几个包,然

安装步骤:1、打开PyCharm并创建一个新的Python项目;2、在PyCharm的底部状态栏中,点击“Terminal”图标,打开终端窗口;3、在终端窗口中,使用pip命令安装PyTorch,根据系统和需求,可以选择不同的安装方式;4、安装完成后,即可在PyCharm中编写代码并导入PyTorch库来使用它。
