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

d2l的一些图像调用

  • 图像查看与显示
  • %matplotlib
  • set_figsize()
  • d2l.Image.open()
  • show_images()
  • 图像查看与显示

    因为全文都是使用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进行计数。
    这部分的笔记我是结合数据增广那一章来的,所以就是简单进行一些转换吧。

    来源:芝麻。

    物联沃分享整理
    物联沃-IOTWORD物联网 » d2l的一些库解析,用到什么补充什么【深度学习+d2l+torch】

    发表评论