深度学习代码怎么读-小白阶段性思路(以手写数字识别应用为例)

简介: 深度学习代码怎么读-小白阶段性思路(以手写数字识别应用为例)

写在最前面

原文发布时间:2023-03-03 11:15:52

由于质量分过低,因此进行完善更新

主要补充:

1、分享一个简单的深度学习代码案例(手写数字识别)分析

2、我是如何阅读深度学习代码的,以及一些小白阶段性的思路。

原文

目前思路

努力上路的小白一枚,麻烦路过的大佬指导一二,同时希望能和大家交流学习~

和学长学姐、实习老师们交流后的目前思路:

  1. 先找到自己研究领域的顶级期刊,connected papers网站上灰色圆圈越大的论文的对应期刊,就是该研究领域的顶刊
  2. 看论文,在paper with code网站上找有源码的论文
  3. 先跑通,配置环境什么的(跑不通就不细看了,赶紧换一个)
  4. 跑通后,看代码大框架,结合论文理解代码各部分代表了什么
    (最开始我尝试注释每行代码,但发现每句话理解了,不代表理解整个代码是什么思路,不好学习借鉴到自己的代码里面去)
  5. 最后如果需要修改这段代码,再细看代码每行的参数代表什么

学习资料

代码看累了,就看《动手学深度学习》文档:基于PyTorch框架,从底层函数实现基础功能,再到框架的高级功能

http://zh.gluon.ai/chapter_preface/preface.html

争取更新学习这个文档的专栏,记录学习过程

20天吃掉那只Pytorch

https://jackiexiao.github.io/eat_pytorch_in_20_days/

这个感觉更浅一点儿,之后复习看吧

读代码工具-chatgpt

量身定做了一套话术hhh,亲身测试还不错

我是一个深度学习代码小白,请你用中文写上注释,能让我能轻松理解下面这段代码。注意包含所有函数、调用和参数的注释。以同样的python代码块样式返回你写的代码给我

# -*- coding: utf-8 -*- 
""" Created on Mon Feb 27 11:23:44 2023
"""

完善更新

深度学习代码初尝试:小白的学习之路

作为一个深度学习领域的小白,我仍然记得当初初次尝试阅读深度学习代码时所面对的挑战。那时,代码看起来晦涩难懂,但随着时间的推移和不断的学习,我逐渐克服了这些困难。

在这篇博客中,我将分享我是如何阅读深度学习代码的,以及一些小白阶段性的思路。

第一步:学习编程语言

我发现大多数深度学习代码都是用Python编写的,所以我决定学习Python。起初,我只掌握了一些基本的Python语法,如变量、条件语句和循环。这使我能够理解和修改简单的代码示例。

第二步:学习基础知识

深度学习是一个复杂的领域,所以我开始了解神经网络、卷积神经网络、循环神经网络等基本概念。这些概念是理解深度学习代码的基础,所以我花了一些时间来阅读教科书、在线教程和学习资料。

第三步:学习深度学习框架

深度学习代码通常使用深度学习框架和库来实现,如TensorFlow、PyTorch等。我选择了PyTorch,因为它有着强大的社区支持和丰富的资源。

我开始学习如何构建神经网络、进行数据预处理和训练模型。这需要不断的实践和尝试,过程可能比想象要更久一点,但是学完了就轻松了。

第四步:阅读示例代码

逐渐熟悉了基本概念和工具后,我开始阅读一些简单的示例代码。

选择了一些经典的任务,如手写数字识别,因为它们有大量的教程和示例代码可供学习。然后我尝试理解代码的结构、数据流和关键步骤。

第五步:调试和实验

深度学习代码的调试是一个常见的挑战。我遇到了很多错误,但每个错误都是一个学习机会。我学会了如何查找错误、尝试不同的解决方法,以及如何进行实验来测试不同的模型和参数设置。这个过程需要耐心和毅力,但我发现它是非常有益的。

第六步:查阅文档和资源

在学习深度学习代码的过程中,文档和资源是非常重要的。

我开始查阅PyTorch官方文档、在线教程和博客文章,以解决问题和理解代码。这帮助我更好地理解框架的功能和用法。

第七步:参与社区和讨论

深度学习领域有着庞大的社区,充满了热情的从业者。我加入了很多社群潜水,观望大佬们的交流,我发现社群成员愿意分享知识和帮助新手,这对我来说是一种巨大的鼓舞。

参与了CSDN的博客笔记记录,与其他人互动和分享自己的进展,对我来说是学习的一种很好的方式。

一个简单的深度学习代码案例(手写数字识别)分析

这是一个简单的深度学习代码示例,它包括了数据加载、数据预处理、模型构建、模型编译、训练和评估等步骤。通过逐行分析代码,可以更好地理解深度学习代码的结构和逻辑。当熟悉这些基本步骤后,可以尝试更复杂的任务和模型。

当学习深度学习代码时,逐行分析代码是非常有帮助的。下面是一个PyTorch示例(手写数字识别),我将逐行进行分析:

数据加载和预处理

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
  • 这部分代码导入了PyTorch和相关的库。PyTorch是一个用于深度学习的开源框架,它提供了各种工具和模块来构建和训练神经网络。在这里,我们导入了PyTorch库,以及用于数据处理的transforms模块和一些视觉数据集(torchvision)。
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
  • 这行代码创建了一个数据转换(transform)对象。transforms.Compose允许将多个数据转换操作组合在一起。在这里,我们定义了两个转换操作,分别是将图像转换为张量(transforms.ToTensor())和将像素值进行标准化(transforms.Normalize)。
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
  • 这行代码从torchvision.datasets中加载MNIST数据集。root参数指定了数据集的本地保存路径,train=True表示加载训练数据集,download=True表示如果数据集不存在则下载它,最后,transform参数指定了我们之前定义的数据转换。
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
  • 这段代码创建了一个数据加载器(data loader)。数据加载器用于将训练数据集划分为小批次,以便进行批量训练。batch_size参数指定了每个批次包含的样本数,shuffle=True表示在每个周期(epoch)开始时对数据进行洗牌,以随机排列样本。

以上是代码的前半部分,它主要涉及数据加载和预处理。接下来,我们将继续分析代码的后半部分。

神经网络模型的定义和损失函数、优化器的设置

# 步骤2:定义神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init()
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 4 * 4, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)
    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 4 * 4)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x
net = Net()
  • 这部分代码定义了神经网络模型。我们创建了一个名为Net的类,它继承自nn.Module,这是PyTorch中构建模型的常用方式。在构造函数中,我们定义了模型的各层(卷积层、池化层、全连接层)以及它们的参数。这个模型是一个卷积神经网络(CNN),用于手写数字识别。
  • forward方法定义了数据在模型中的前向传播流程。它描述了数据如何从一层传递到下一层,包括卷积操作、激活函数(ReLU)、池化操作和全连接层。
  • 最后,我们创建了一个net实例,这是我们的神经网络模型的一个具体实例化对象。
# 步骤3:定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
  • 这部分代码定义了损失函数和优化器。我们使用了交叉熵损失(nn.CrossEntropyLoss)作为损失函数,这是常用于分类问题的损失函数。
  • 优化器使用了随机梯度下降(SGD),并通过lr参数指定了学习率,通过momentum参数指定了动量。

这就完成了神经网络模型的定义和损失函数、优化器的设置。接下来,我们将继续分析代码的训练和评估部分。

训练和评估部分

让我们继续分析PyTorch示例代码的训练和评估部分:

# 步骤4:训练模型
for epoch in range(5):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / (i + 1))
print('Finished Training')
  • 这部分代码进行了模型的训练。它使用一个外层循环遍历5个训练周期(epochs),每个周期中使用一个内层循环遍历训练数据集中的小批次(batch)。
  • 在每个批次中,首先调用optimizer.zero_grad()来清除之前批次的梯度信息。然后,将输入数据(inputs)传递给模型,模型产生输出(outputs)。接着,计算损失(loss)并使用loss.backward()进行反向传播计算梯度。最后,通过optimizer.step()来更新模型的参数,以减小损失。
  • 我们还计算了每个周期的平均损失,并在每个周期结束后打印出来,以监视训练的进展。
# 步骤5:评估模型
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False)
correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
print('Accuracy on test images: %.2f %%' % (100 * correct / total))
  • 这部分代码用于评估模型的性能。我们加载了测试数据集,并使用testloader来将测试数据划分成小批次。
  • with torch.no_grad()块中,我们遍历每个批次,计算模型的预测结果,并统计模型在测试数据集上的准确度。
  • 最后,我们打印出测试准确度,这是模型在测试数据上正确分类的比例。

这就完成了整个示例代码的分析。通过逐行分析代码,可以更好地理解PyTorch中的深度学习训练和评估过程。

希望这个示例对你理解深度学习代码的工作方式有所帮助。

总结

阅读深度学习代码对于小白来说可能是一个挑战,但通过坚持学习和不断实践,我渐渐克服了这个困难。不要害怕犯错,不要害怕提问,因为深度学习是一个充满机会和创新的领域。通过逐步学习和积累经验,可以慢慢地读懂深度学习代码,为这个领域做出自己的贡献。

目录
相关文章
|
2天前
|
机器学习/深度学习 算法 计算机视觉
基于深度学习的停车位关键点检测系统(代码+原理)
基于深度学习的停车位关键点检测系统(代码+原理)
|
2天前
|
机器学习/深度学习 数据采集 PyTorch
图像分类保姆级教程-深度学习入门教程(附全部代码)
图像分类保姆级教程-深度学习入门教程(附全部代码)
26 1
|
2天前
|
机器学习/深度学习 编解码 API
深度学习+不良身体姿势检测+警报系统+代码+部署(姿态识别矫正系统)
深度学习+不良身体姿势检测+警报系统+代码+部署(姿态识别矫正系统)
20 0
|
2天前
|
机器学习/深度学习 算法 数据可视化
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)-2
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
27 0
|
2天前
|
机器学习/深度学习 Ubuntu Linux
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)-1
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
24 1
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在自然语言处理中的应用与挑战
【2月更文挑战第10天】 随着人工智能技术的不断发展,深度学习在自然语言处理领域的应用日益广泛。本文将探讨深度学习在自然语言处理中的重要性、现状和未来挑战,以及我个人对于该领域的一些思考和见解。
|
2天前
|
机器学习/深度学习 JSON 自然语言处理
python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
11 0
|
3天前
|
机器学习/深度学习 算法 算法框架/工具
基于深度学习的交通标志检测和识别(从原理到环境配置/代码运行)
基于深度学习的交通标志检测和识别(从原理到环境配置/代码运行)
19 0
|
4天前
|
机器学习/深度学习 人工智能 数据安全/隐私保护
深度学习在医学影像诊断中的应用与挑战
【2月更文挑战第6天】随着人工智能技术的不断发展,深度学习在医学影像诊断领域扮演着越来越重要的角色。本文将探讨深度学习在医学影像诊断中的现状、应用及面临的挑战,旨在帮助读者更好地了解这一技术在医学领域的潜力与前景。
13 0
|
7天前
|
机器学习/深度学习 算法 搜索推荐
《深度学习在医学影像识别中的应用与前景》
【2月更文挑战第4天】 医学影像识别是近年来深度学习技术的一个热门应用领域。本文将介绍深度学习在医学影像识别中的应用现状,探讨其在医学诊断、治疗以及医疗大数据分析等方面的潜在前景,并对未来发展进行展望。
11 4

相关产品