d2l的一些库解析,用到什么补充什么【深度学习+d2l+torch】

本文介绍了d2l库中关于图像查看与显示的set_figsize()和Image.open()函数,以及show_images()方法的用法,重点讲解了如何批量显示图片并演示了plt.subplots和subplot的区别。
摘要由CSDN通过智能技术生成

图像查看与显示

因为全文都是使用jupyter打开的,所以会使用一下%matplotlib inline
所以先简单解释一下%matplotlib inline

%matplotlib

使用%matplotlib命令可以将matplotlib的图表直接嵌入到Notebook之中,或者使用指定的界面库显示图表,它有一个参数指定matplotlib图表的显示方式。inline表示将图表嵌入到Notebook中。
python提供了很多%magic行命令,可以用%magic查看都有哪些命令,在命令后添加?可以查看命令具体作用
在这里插入图片描述在这里插入图片描述
当然,这里需要提一下的是,这些内置magic在pycharm里是不支持的,所以是不能在pycharm中使用

这个说完了,接下来进入正题

set_figsize()

首先我们来看李沐老师的d2l包

def set_figsize(figsize=(3.5, 2.5)):
    """Set the figure size for matplotlib.

    Defined in :numref:`sec_calculus`"""
    use_svg_display()
    d2l.plt.rcParams['figure.figsize'] = figsize

这里调用了一个方法,分别是use_svg_display(),对一个字典进行了赋值
d2l的定义如下:

import sys
d2l = sys.modules[__name__]

其实就是一个参数存储与传递的作用
然后use_svg_display()就在这个函数上当,简单来说就是进行一下设置,

from matplotlib_inline import backend_inline

def use_svg_display():
    """Use the svg format to display a plot in Jupyter.

    Defined in :numref:`sec_calculus`"""
    backend_inline.set_matplotlib_formats('svg')

全部的作用也就是设置成矢量图罢了
就是设置matplotlib的formats

d2l.Image.open()

Image.open()大家用的比较多的是PIL的Image.open,实际上也是一个意思,他只是吧Image导入进来了,也就是说其实去掉d2l也能正常运行,只是要import一下PIL包而已,同样的是plt.show(),李沐老师所作的只是帮我们进行了一下import。
在这里插入图片描述
在这里插入图片描述
所以运行结果是一样的

之后我们解析一下show_images()方法:

show_images()

批量显示图片是plt一个比较常用的功能了,掌握一下也是挺好的,这种偏向于功能和基础向的东西李沐老师一般是不喜欢说的

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):
    """Plot a list of images.

    Defined in :numref:`sec_utils`"""
    figsize = (num_cols * scale, num_rows * scale)
    _, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)
    axes = axes.flatten()
    for i, (ax, img) in enumerate(zip(axes, imgs)):
        try:
            img = d2l.numpy(img)
        except:
            pass
        ax.imshow(img)
        ax.axes.get_xaxis().set_visible(False)
        ax.axes.get_yaxis().set_visible(False)
        if titles:
            ax.set_title(titles[i])
    return axes

参数需要五个,两个含有默认值
imgs是图片的输入list,然后就是高宽个数
然后解释一下plt.subplot的作用以及用法
简单来说,这个函数就是把figure分为row*cols个子图,写法也比较多样。
比如

plt.subplot(232)
plt.subplot(2,3,2)
#这两者作用是相同的,简单来说就是把figure分为2*3,同时选择展平之后的第2个位置
matpltlib.pyplot.figure(
num = None,               # 设定figure名称。系统默认按数字升序命名的figure_num(透视表输出窗口)e.g. “figure1”。可自行设定figure名称,名称或是INT,或是str类型;
figsize=None,             # 设定figure尺寸。系统默认命令是rcParams["figure.fig.size"] = [6.4, 4.8],即figure长宽为6.4 * 4.8;
dpi=None,                 # 设定figure像素密度。系统默命令是rcParams["sigure.dpi"] = 100;
facecolor=None,           # 设定figure背景色。系统默认命令是rcParams["figure.facecolor"] = 'w',即白色white;
edgecolor=None, frameon=True,    # 设定要不要绘制轮廓&轮廓颜色。系统默认绘制轮廓,轮廓染色rcParams["figure.edgecolor"]='w',即白色white;
FigureClass=<class 'matplotlib.figure.Figure'>,   # 设定使不使用一个figure模板。系统默认不使用;
clear=False,                     # 设定当同名figure存在时,是否替换它。系统默认False,即不替换。
**kwargs)

那么plt.subplots呢?
很简单,就是一次性得到所有层和画布
有两个返回值,一个是就是画布fig,第二个就是ax,也就是块
所以就很容易理解了,李沐老师通过一个循环进行了每个块的赋值,zip合并,然后增加个enumerate只是为了多产生一个i进行计数。
这部分的笔记我是结合数据增广那一章来的,所以就是简单进行一些转换吧。

  • 27
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
d2l(动手学深度学习)是一种用于学习深度学习Python,它提供了许多实用的工具和示例代码,帮助用户更轻松地理解深度学习的概念和实现方式。 以下是使用d2l的一些基本步骤: 1. 安装d2l 使用以下命令安装d2l: ``` !pip install d2l ``` 2. 导入d2l 使用以下命令导入d2l: ```python import d2l ``` 3. 使用d2l中的函数和类 d2l中包含了许多有用的函数和类,例如: - 数据处理函数:load_data_fashion_mnist、load_data_mnist等; - 模型定义函数:Sequential、Dense、Conv2D等; - 训练函数:train_ch3、train_ch5等; - 可视化函数:set_figsize、show_images等。 通过调用这些函数和类,可以更容易地实现深度学习模型的训练和可视化。 例如,使用以下代码加载Fashion-MNIST数据集并显示其中一些样本图像: ```python batch_size = 256 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size) # 显示数据集中的一些样本图像 X, y = iter(train_iter).next() d2l.show_images(X.reshape(256, 28, 28), 10, 10, titles=d2l.get_fashion_mnist_labels(y)) ``` 4. 学习d2l中的示例代码 d2l中包含了许多示例代码,涵盖了深度学习的各个方面,例如卷积神经网络、循环神经网络、生成对抗网络等。学习这些示例代码可以帮助用户更深入地理解深度学习的概念和实现方式。 例如,使用以下代码实现一个简单的卷积神经网络: ```python import torch from torch import nn from d2l import torch as d2l net = nn.Sequential( nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Flatten(), nn.Linear(16*5*5, 120), nn.Sigmoid(), nn.Linear(120, 84), nn.Sigmoid(), nn.Linear(84, 10) ) # 训练模型 lr, num_epochs = 0.9, 10 optimizer = torch.optim.SGD(net.parameters(), lr=lr) d2l.train_ch5(net, train_iter, test_iter, batch_size, optimizer, device, num_epochs) # 使用训练好的模型进行预测 X, y = iter(test_iter).next() true_labels = d2l.get_fashion_mnist_labels(y.cpu().numpy()) pred_labels = d2l.get_fashion_mnist_labels(net(X.to(device)).argmax(dim=1).cpu().numpy()) titles = [true + '\n' + pred for true, pred in zip(true_labels, pred_labels)] d2l.show_images(X[0:9].reshape(9, 28, 28), 3, 3, titles=titles[0:9]) ``` 更多示例代码可以在d2l的GitHub仓中找到:https://github.com/d2l-ai/d2l-zh
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值