本文主要分享一些组织管理机器学习项目的实践经验
Python
Python 是机器学习项目开发的主要使用语言之一。它包含了大量的库/包可以用于机器学习:
- numpy:适用于多维数组、数值计算。常用于数据处理。
- pandas:数据分析常用库。pandas dataframes本质上是numpy数组,它用描述性字符串作为行和列标签。数据在pandas dataframes里可以很容易进行排序、过滤、分组、连接等操作,这对数据处理很有用。
- PyTorch:用于构建神经网络。包括许多预训练模型和计算机视觉数据集。Pytorch鼓励使用面向对象的编程,用Pytorch编写代码很快,而且Pytorch默认支持快速执行,因此可以与Python调试器一起使用。
- TensorFlow:在工业上更受欢迎的Pytorch的替代品。Pytorch更适合做研究。如果您想使用TensorFlow,并且想要一个更高级别的接口,那么可以使用Keras。
- scikit-learn:这是一个很好的库,用于回归、支持向量机、k近邻、随机森林、计算混淆矩阵等。
- matplotlib、seaborn:用于数据可视化的常用库之一。
Git
Git版本控制对于机器学习项目的组织管理非常有用。
Git是一种可以用来跟踪对代码所做的所有更改的工具。Git“repository”是一个包含代码文件的目录。Git使用节省存储空间的技术,因此它不存储代码的多个副本,而是存储旧文件和新文件之间的相对更改。Git有助于保持代码文件目录的整洁和组织,因为只有最新版本才显示存在(尽管您可以随时轻松访问代码的任何版本)。使用者可以选择发生的更改,使用“commit”将代码的特定更改与相关的书面描述捆绑在一起。Git存储库也使共享代码和协作变得更加容易。总的来说,比起保存“myscript_v1.py”、“dataprocessing_v56.py”、“utils_73.py”等上百万个不同版本的代码,Git是一个更好的方法来保存旧代码。
Git版本控制可以通过GitHub、GitLab和Bitbucket来实现。我最常使用GitHub。
使用GitHub的方法如下:
- 安装Git:https://git-scm.com/downloads
- 注册一个GitHub账户:www.github.com
- 通过SSH链接个人GitHub账户和个人电脑。以便于随时能够将代码上传并保存在云端。
- 单击概要文件的“Repositories”部分中的绿色“new”按钮,在GitHub上创建一个新的存储库。
- 使个人计算机能够将代码推送到该存储库(以下是示例命令):
echo"# pytorch-computer-vision">>README.mdgitinitgitaddREADME.mdgitcommit-m"first commit"gitbranch-Mmastergitremoteaddoriginhttps://github.com/rachellea/pytorch-computer-vision.gitgitpush-uoriginmaster
假设现在myeditedscript.py
有代码做出了更改,可以通过commit
进行版本管理:
gitaddmyeditedscript.pygitcommit-m'added super useful functionality'gitpushoriginmaster
Anaconda
Anaconda支持创建不同的环境,这些环境可能包含不同的Python版本和不同的包版本。当我们在处理多个具有冲突依赖关系的项目时,Anaconda特别有用。
使用Anaconda很简单:
首先,安装Anaconda: https://docs.anaconda.com/anaconda/install/
然后,创建环境。用所在的项目来命名环境是比较好的。例如,如果该项目是关于使用神经网络进行胸部x光分类的,则该环境可以称为chestxraynn:
condacreate--namechestxraynnpython=3.5
请注意,避免在环境名称周围加引号,否则引号字符本身将是环境名称的一部分。此外,可以选择任何版本的Python。它不一定是python3.5。
一旦环境被创建,就是激活环境的时候了。“激活”仅仅意味着你将被“放入环境中”,这样你就可以使用安装在里面的所有软件。Windows激活命令如下:
activatechestxraynn
Linux/macOS激活命令如下:
sourceactivatechestxraynn
使用“conda install”命令在环境中安装包。以安装matplotlib为例:
condainstall-cconda-forgematplotlib
从技术上讲,在conda环境中,也可以使用pip安装包,但这可能会导致问题,因此应尽量避免。
Anaconda将负责确保环境中所有内容的版本都是兼容的。更多命令见Conda Cheat Sheet。
也可以直接使用别人的命令文件创建conda环境。在GitHub中https://github.com/rachellea/pytorch-computer-vision, 有一个tutorial_environment.yml
文件,此文件指定运行教程代码所需的依赖项。要基于此文件创建conda环境,只需在Anaconda提示符中运行以下命令:
condaenvcreate-ftutorial_environment.yml
代码管理:类和函数
代码管理非常重要。当数千行的代码,没有文件说明,中间到处都是重复的代码块,一些代码块没有解释就注释掉了,还有各种奇怪的变量名,这简直就是一场灾难。
而Pytorch实现中通常看到的所有代码都是有组织的,并且有很好的说明记录。
从长远来看,如果为自己的项目编写高质量的代码,将节省大量时间。高质量代码的一个方面是它在模块中的组织和管理。
代码管理建议:
- 面向对象编程。强烈推荐使用PyTorch机器学习框架,因为它有助于为所有事情使用面向对象的编程。Pytorch中,模型是一个类,数据集也是一个类。
- 使用函数。如果你写的东西不能作为一个类很好地工作,那么把代码组织成函数。函数是可重用的。
代码管理示意图
代码管理:目录
使用多个模块来组织代码,并将这些模块组织到目录中。以一个简单的项目为例:
总体组织如下:
- 一个训练-评估-测试循环模块(src/run_experiment.py)
- 一个用于计算性能指标的模块(src/evaluate.py)
- 一个(或多个)用于数据处理的模块(load_dataset/custom-pascal.py、 load_dataset_custom_tiny.py)
- 一个(或多个)模型模块(models/custom_models_base.py)
代码管理目录图
请注意,虽然在这个存储库中存储了一个数据集(在“train”、“val”和“test”目录中的png图片),但一般来说,将数据集放入存储库并不是一个好主意。此存储库中存在数据集的唯一原因是,它是为演示目的而创建的小型数据集。除非数据非常小,否则不应将其放入存储库中。
导入文件
请注意,需要在每个子目录中都有一个名为init.py的空文件,以便模块可以从这些目录导入文件。
下面是如何根据彼此所在的目录让一个模块awesomecode.py调用名为helpercode.py的模块: