Python D2L:走进深度学习世界的必备指南

Python Deep Learning(简称D2L)是一本开源的深度学习入门教程,由李沐等数位大佬创建及维护。它不仅仅详细地介绍了深度学习的原理和常用算法,同时也提供了丰富的Python示例代码,方便读者在实战中掌握知识。

一、 目录结构

Python D2L的教程结构清晰,包含14章共76节课,每节课都以具体的实例为主线,辅以阐述深度学习知识的代码和文字,非常易于初学者理解掌握。以下是Python D2L教程的章节目录:

 |-----Preface
 |-----Preliminary
 |  |------Preliminaries
 |  |------Data Manipugation
 |  |------Linear Algebra
 |  |------Probability and Statistics
 |-----Dive into Deep Learning
 |  |------Linear Neural Networks
 |  |------Multilayer Perceptrons
 |  |------Deep Learning Computational Performance
 |  |------Convolutional Neural Networks
 |  |------Modern Convolutional Neural Networks
 |  |------Recurrent Neural Networks
 |  |------Modern Recurrent Neural Networks
 |  |------Attention Mechanisms
 |-----Appendix
 |  |------Appendix-A:
 |  |------Appendix-B:
 |  |------Appendix-C:
 |  |------Appendix-D:

值得一提的是,Python D2L提供了很多工具,让你可以直接在GitHub上打开教程,一边学习一边实践。GitHub上还提供了一些深度学习的实践案例和丰富的 datasets,可以让读者更好地巩固所学知识。

二、字典介绍和应用

在深度学习中,字典是经常使用的数据结构,它用来储存键-值对。Python D2L提供了非常详细的字典介绍和应用示例,让初学者可以很好地理解它的用途。

首先,Python D2L使用字典来记录Token序列的出现次数,如以下示例:

counts = dict()
tokens = ['apple', 'banana', 'apple', 'banana', 'banana']
for token in tokens:
    # 如果字典中已存在此token,计数器+1
    if token in counts:
        counts[token] += 1
    # 如果字典中不存在此token,将其计数器设为1
    else:
        counts[token] = 1
counts
>>>> {'apple': 2, 'banana': 3}

此外,在深度学习中,还常常使用字典来替换标记,如下所示:

d2l.set_figsize()
img = image.imread('catdog.jpg')
d2l.plt.imshow(img.asnumpy())

上述代码中,d2l.set_figsize()可以设置图片大小,而image.imread(‘catdog.jpg’)则是读取本地图片文件。可以看到,img是一个图片类型的序列,我们需要将序列转换为tensor类型进行矩阵操作。这里用到了Python D2L内部的字典d2l.plt来实现,其中plt表示“Plotting”。

三、矩阵操作

在深度学习算法中,矩阵操作是经常使用的操作之一。Python D2L详细介绍了矩阵的基本概念、矩阵的数值计算等等。以下为Python D2L中的矩阵操作代码示例:

import torch
from torch import nn
import torchvision

net = nn.Sequential(nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.ReLU(),
                    nn.MaxPool2d(kernel_size=2, stride=2),
                    nn.Conv2d(6, 16, kernel_size=5), nn.ReLU(),
                    nn.MaxPool2d(kernel_size=2, stride=2), nn.Flatten(),
                    nn.Linear(16 * 5 * 5, 120), nn.ReLU(),
                    nn.Linear(120, 84), nn.ReLU(), nn.Linear(84, 10))

X = torch.randn(size=(1, 1, 28, 28), dtype=torch.float32)
for layer in net:
    X = layer(X)
    print(layer.__class__.__name__, 'Output shape:\t', X.shape)

上述代码实现了一个LeNet,用于在MNIST数据集上进行手写数字识别的训练和测试。

四、实战案例

Python D2L提供了多个实战案例,让读者可以更好的掌握深度学习的知识。以下为Python D2L中的图像分类代码示例:

# 导入类库
import torch
import torchvision
from torch import nn
from torch.nn import functional as F
from torchvision import transforms
from torch.utils.data import DataLoader
  
# 定义模型参数
in_channels, out_channels, kernel_size = 1, 10, 5
batch_size, num_epochs, lr = 256, 10, 0.5
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# 加载数据集
train_dataset = torchvision.datasets.FashionMNIST(root='data/FashionMNIST', train=True, transform=transforms.ToTensor())
test_dataset = torchvision.datasets.FashionMNIST(root='data/FashionMNIST', train=False, transform=transforms.ToTensor())
train_data = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_data = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

# 定义模型
class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size),
                                   nn.ReLU(),
                                  nn.MaxPool2d(2, 2),
                                  nn.Conv2d(out_channels, out_channels * 2, kernel_size),
                                  nn.ReLU(), 
                                  nn.MaxPool2d(2, 2))
        self.fc = nn.Sequential(nn.Linear(out_channels * 2 * 4 * 4, out_channels * 2),
                                 nn.ReLU(),
                                 nn.Linear(out_channels * 2, 10))

    def forward(self, x):
        conv_out = self.conv(x)
        res = self.fc(conv_out.view(conv_out.shape[0], -1))
        return res
      
# 定义损失函数和优化器
net = LeNet()
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=lr)

# 训练模型
for epoch in range(num_epochs):
    for batch_idx, (images, targets) in enumerate(train_data):
        images, targets = images.to(device), targets.to(device)

        outputs = net(images)
        loss = loss_fn(outputs, targets)

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if batch_idx % 200 == 0:
            print('Epoch:{}, batch_index:{}/{}, train_loss:{:.3f}'.format(
                epoch, batch_idx, len(train_data), loss.item()))
            
# 测试模型
net.eval()
with torch.no_grad():
    correct, total = 0, 0
    for images, labels in test_data:
        images, labels = images.to(device), labels.to(device)
        outputs = net(images)
        _, preds = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (preds == labels).sum().item()
    print('Accuracy of the model on the test images: {:.2f}%'.format(100 * correct / total))

上述代码实现了图像识别的训练和测试,在FashionMNIST数据集上获得了不错的测试结果。

五、总结

本文介绍了Python D2L的基本结构、字典介绍和应用、矩阵操作以及实战案例等内容。Python D2L不仅仅是一本Python开源的深度学习教程,还提供了丰富的示例和实践,使初学者可以更好地理解深度学习的相关知识。如果你也想学习深度学习,Python D2L是一个不错的选择。

原创文章,作者:GMEHP,如若转载,请注明出处:https://www.506064.com/n/335061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
GMEHP的头像GMEHP
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:06

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python中new和init的区别

    new和init都是Python中常用的魔法方法,它们分别负责对象的创建和初始化,本文将从多个角度详细阐述它们的区别。 一、创建对象 new方法是用来创建一个对象的,它是一个类级别…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29

发表回复

登录后才能评论