摘要:今天我们发布了 fastdownload,这是一个新的库,它能帮助用户轻松下载、验证和解压压缩包。
背景
在 fast.ai,我们致力于让重要的技术主题更易于学习。这意味着我们创建的库会尽可能为用户做好一切,同时不限制其可能性。
fastai 以仅需四行代码即可在视觉、文本、表格或推荐系统数据上获得世界一流的深度学习结果而闻名
= untar_data(URLs.PETS)
path = ImageDataLoaders.from_name_func(path, get_image_files(path/"images"),
dls =Resize(224))
label_func, item_tfms= cnn_learner(dls, resnet34, metrics=error_rate)
learn 1) learn.fine_tune(
关于其中大部分内容已经有很多文章了:Data Block API 的灵活性,cnn_learner
的强大,以及由 fine_tune
提供的最先进的迁移学习。
但 untar_data
又如何呢?这第一行代码,虽然很少被讨论,但实际上是整个拼图的关键部分。它的作用如下:
- 如果需要,将 URL 下载到特殊文件夹(默认是
~/.fastai/archive
)。如果之前已经下载过,则跳过此步骤。 - 检查下载(或缓存)的压缩包的大小和哈希值是否与 fastai 的预期匹配。如果不匹配,则尝试重新下载。
- 如果需要,将下载的文件解压到另一个特殊文件夹(默认是
~/.fastai/archive
)。如果之前已经解压过,则跳过此步骤。 - 返回一个
Path
对象,指向解压后文件的位置。
正因如此,用户无需担心他们的压缩包和数据存储在哪里,是否之前下载过某个 URL,以及下载的文件是否是正确版本。fastai 为用户处理了这一切,让他们可以将更多时间花在实际的模型构建过程上。
fastdownload
今天发布的 fastdownload 让您也可以为您的用户提供同样的便利。它帮助您提供数据集或其他压缩包供用户使用,同时确保它们以最新版本被正确下载。
您的用户只需调用一个方法 FastDownload.get
,传入所需的 URL,该 URL 将被下载并解压到您选择的目录中。解压文件的路径将被返回。如果该 URL 已经下载过,则会自动使用缓存的压缩包或内容。但是,如果压缩包的大小或哈希值与其应有的不同,则会通知用户,并下载一个新版本。
将来,您可能希望更新一个或多个压缩包。当您这样做时,fastdownload 会通过将用户的下载压缩包与您更新后的文件大小和哈希信息进行比对,确保他们使用的是最新版本。
fastdownload 会在您的 Python 模块中添加一个文件 download_checks.py
,其中包含您压缩包的文件大小和哈希值。由于它是一个常规的 python 文件,如果上传到 pypi 或 conda channel,它会自动包含在您的包中。
以下是提供一个功能与 untar_data
完全相同的方法所需的一切:
from fastdownload import FastDownload
def untar_data(url): return FastDownload(base='~/.myapp').get(url)
您可以通过创建配置文件 ~/.myapp/config.ini
来修改文件下载的位置(如果您没有,会自动为您创建)。此文件中的值可以是绝对路径或相对路径(相对路径相对于 ini 文件的位置解析)。
如果您想尝试 fastdownload,请访问文档并 mengikuti 演练。