Jupyter Notebook的使用技巧,充分发挥它的强大之处!

本文最后更新于:2022年8月30日 晚上

Jupyter Notebook的使用技巧,充分发挥它的强大之处!

Notebook与命令行

数据的交互

可能大家刚入门就知道notebook里想要执行命令就是在命令前加上感叹号!,但是你知道notebook里的变量既可以接受命令的输出,又可以作为命令的输入吗?

在notebook中用变量赋值就能获取命令的输出,而命令的输出是被保存在一个比较像list的数据结构(假如需要了解更多可以查阅IPython文档的IPython.utils.text.SList)。而在使用命令的时候,用一个大括号把变量括起来就能传值了。

1
2
3
4
5
6
7
[1] content = !ls

[2] content
['sample_data']

[3] !echo {content}
[sample_data]

持续生效的命令

假如想改变notebook的工作目录,使用!cd是不起作用的,因为!本质是在一个subshell中执行,要持续生效,使用百分号%。比如cd命令和load_ext命令。

1
2
3
[1] %cd yolov5

[2] %load_ext myextension

多媒体输出!IPython.display!

IPython.display中定义了许多展示用的类,还有在jupyter中专用的display函数,无论是音频、视频还是动画,用display()就能显示在notebook里。

详情见Module: display — IPython 8.4.0 documentation

模块 作用
Audio 展示音频,可以是numpy数组、文件和URL
FileLink
FileLinks
在notebook中提供一个本地文件的下载链接(在Kaggle里挺实用的)
GeoJSON 显示地图(虽然我没在colab里尝试成功过)
Image 显示图片~应该是最常用了的吧
Video
VimeoVideo
YouTubeVideo
显示视频,对Vimeo和YouTube有特殊照顾

统计代码执行速度

Built-in magic commands — IPython 8.4.0 documentation

%timeit魔法命令可以统计你的python代码的执行速度,一个百分号是单行模式,两个百分号是一个cell的多行模式。在多行模式下,和%%同一行的代码属于setup,不会统计时间。

执行python文件

当然可以!python main.py,然而也可以用魔法命令:%run main,使用魔法命令可以把变量放到notebook里来。

Notebook中使用Tensorboard

在一台机器上训练时想要看tensorboard,一般是开启另一个terminal运行,而仅仅使用一个notebook也可以使用tensorboard(比如在Colab里面)!

而且,可以在训练之前就开启tensorboard,这个cell是不会卡住的,那样训练过程中就能动态查看了。

1
2
3
# Load the TensorBoard notebook extension
%load_ext tensorboard
%tensorboard --logdir logs

更多信息可以查看Using TensorBoard in Notebooks | TensorFlow

Colab中强大的控件

假如使用Colab,那么还可以使用里面的有趣的控件!一行代码导入:

1
from google.colab import widgets

详细文档见Widgets.ipynb - Colaboratory (google.com)

Colab的额外控件支持

  • 表格(grid)

    1
    2
    3
    grid = widgets.Grid(2, 2)  # 初始化表格
    with grid.output_to(1, 1): # 使用上下文管理器在表格中填写数据
    print("Bye grid")

    看上去长这样,但是表格也可以显示图片等多媒体!

    image-20220613174014489

  • 标签页(Tabbar)

    可以点击切换tab,不用担心图片太多输出一堆啦

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    tb = widgets.TabBar(['a', 'b'], location='start')
    with tb.output_to('a'): # 同样使用上下文管理器来填充数据
    pylab.figure(figsize=(3, 3))
    pylab.plot([1, 2, 3])
    # Note you can access tab by its name (if they are unique), or
    # by its index.
    with tb.output_to(1):
    pylab.figure(figsize=(3, 3))
    pylab.plot([3, 2, 3])
    pylab.show()

Colab中的表单交互

Forms - Colaboratory (google.com)

在colab中可以通过表单来填写一些东西而不是修改代码:

如图,只要在右边修改了值,左边的代码就会自动更新,这样就能构建一个更好的交互,而且,双击右边可以把代码都隐藏了:

image-20220613175906938

那么这个是怎么弄出来的呢,选中一个代码cell,然后按照下图就能添加表单字段,很方便。

Colab数据交互

虽然在浏览器左边的“文件”就能上传下载数据,但是colab还提供了其他的方式:

  1. files模块

    1
    2
    3
    4
    5
    from google.colab import files
    # 上传(会提供一个GUI)
    uploaded = files.upload()
    # 下载(准备好后会自动调用浏览器下载)
    files.download('best.pt')
  2. Google Drive

    可以挂载谷歌网盘,没啥好说的,跟着GUI走

    1
    2
    from google.colab import drive
    drive.mount('/content/drive')
  3. 从kaggle上下载

    假如恰好你的数据在kaggle上,还可以使用kaggle的api下载

    1
    2
    # 先安装kaggle包
    !pip install kaggle

    然后上kaggle的account里创建API Token,会得到一个kaggle.json文件,把这个文件传到colab上

    然后在colab上更改配置文件目录到你kaggle.json的目录:

    1
    2
    import os
    os.environ['KAGGLE_CONFIG_DIR'] = 'kaggle.json存在的目录'

    然后找到你想要的数据集,复制API command就可以下载了

    1
    !kaggle datasets download -d ifigotin/imagenetmini-1000

一些辅助资源

Filesamples:当在colab或者kaggle上想获得一些文件例子,又不方便上传下载时,可以用命令从这个网站上下载。比如!curl -O https://filesamples.com/samples/video/mp4/sample_3840x2160.mp4

参考文献:

IPython extensions — IPython 8.4.0 documentation

IPython Documentation — IPython 8.4.0 documentation