机器学习项目的通用文件夹结构。

2025-06-09

机器学习项目的通用文件夹结构。

机器学习项目结构清晰,易于理解和修改。此外,在多个项目中采用一致的结构可以最大限度地减少混乱。由于没有万能的解决方案,我们将介绍三种方法来建立机器学习项目结构:手动创建文件夹和文件、自定义template.py文件以及使用Cookiecutter包。

...人类的双手翩翩起舞,人类的思想协调一致,我们踏上了一段没有自动化的旅程。

简而言之,手动执行

1. 项目根目录:这是包含整个机器学习项目的主文件夹。

2. 数据:此文件夹用于存储您的数据集和任何相关数据文件。它可以进一步划分为以下子文件夹:

  • 原始:包含原始的、未处理的数据文件。
  • 已处理:包含经过清理、转换和特征工程的预处理数据。
  • 外部:存储您用于项目的任何外部数据源。

3. Notebooks:此文件夹用于存放 Jupyter Notebook 或用于实验、分析和模型开发的任何其他交互式 Notebook。您可以使用以下子文件夹来组织它:

  • 探索性:用于数据探索和可视化的笔记本。
  • 建模:用于模型开发、训练和评估的笔记本。
  • 推理:用于部署和使用训练模型进行预测的笔记本。

4. Scripts:此文件夹包含您在项目中使用的可重用代码脚本或模块。它可能包括:

  • 预处理:用于数据清理、转换和特征工程的脚本。
  • 模型:用于定义和训练机器学习模型的脚本。
  • 评估:模型评估、指标计算和验证的脚本。
  • 实用程序:通用实用程序脚本或辅助函数。
  • 模型:此文件夹专用于存储已训练的模型或模型检查点。它可以根据不同的实验、版本或架构进一步组织成子文件夹。

文档:包括任何与项目相关的文档,例如 README 文件、数据字典或项目规范。

结果:存储由模型或实验生成的输出文件、报告或可视化内容。

配置:存储项目中使用的配置文件或参数,例如超参数、模型配置或实验设置。

环境:包含与项目环境相关的文件,例如requirements.txtenvironment.yml,指定运行项目所需的依赖项和包。

测试:如果您的代码有单元测试或集成测试,您可以创建一个文件夹来存储它们。

日志:存储训练或推理过程中产生的日志文件或输出日志。

已保存的对象:如果您的项目涉及保存中间对象或序列化数据,例如腌制文件或序列化模型,您可以创建一个文件夹来存储它们。

...在机器指挥和算法决定的地方,我们进入了一个没有人类干预的领域。

模板.py

template.py文件是机器学习项目中 Python 代码开发的基础蓝图或起点。它通常包含一组预定义的结构、函数和占位符,您可以自定义和扩展它们以构建特定的功能。
下面是一个我常用的示例。复制代码,将其保存为 template.py,然后运行它。

import os
from pathlib import Path
import logging

logging.basicConfig(level=logging.INFO, format='[%(asctime)s]: %(message)s:')


project_name = "textSummarizer"

list_of_files = [
    ".github/workflows/.gitkeep",
    f"src/{project_name}/__init__.py",
    f"src/{project_name}/conponents/__init__.py",
    f"src/{project_name}/utils/__init__.py",
    f"src/{project_name}/utils/common.py",
    f"src/{project_name}/logging/__init__.py",
    f"src/{project_name}/config/__init__.py",
    f"src/{project_name}/config/configuration.py",
    f"src/{project_name}/pipeline/__init__.py",
    f"src/{project_name}/entity/__init__.py",
    f"src/{project_name}/constants/__init__.py",
    "config/config.yaml",
    "params.yaml",
    "app.py",
    "main.py",
    "Dockerfile",
    "requirements.txt",
    "setup.py",
    "research/trials.ipynb",

]


for filepath in list_of_files:
    filepath = Path(filepath)
    filedir, filename = os.path.split(filepath)

    if filedir != "":
        os.makedirs(filedir, exist_ok=True)
        logging.info(f"Creating directory:{filedir} for the file {filename}")


    if (not os.path.exists(filepath)) or (os.path.getsize(filepath) == 0):
        with open(filepath,'w') as f:
            pass
            logging.info(f"Creating empty file: {filepath}")



    else:
        logging.info(f"{filename} is already exists")
Enter fullscreen mode Exit fullscreen mode

你的文件夹结构应该类似于这个👇

template.py 结构

千篇一律

  1. 确保您的环境中安装了最新的 python 和 pip。
  2. 安装 cookiecutter
pip install cookiecutter
Enter fullscreen mode Exit fullscreen mode

3:在 github.com 上创建示例存储库(例如 my-test)

注意:创建存储库时,不要选中“使用以下方式初始化此存储库:”下的任何选项。

4:创建项目结构

转到您想要在本地系统中设置项目的文件夹并运行以下命令:

cookiecutter -c v1 https://github.com/drivendata/cookiecutter-data-science
Enter fullscreen mode Exit fullscreen mode

运行上述命令,它会询问您以下内容:

You've downloaded \.cookiecutters\cookiecutter-data-science before. Is it okay to delete and re-download it? [yes]:yes

它会询问以下选项:

project_name [project_name]: my-testrepo_name [my-test]: my-testauthor_name [Your name (or your organization/company/team)]: Your namedescription [A short description of the project.]: This is a test projSelect open_source_license:
1 - MIT
2 - BSD-3-Clause
3 - No license file
Choose from 1, 2, 3 [1]: 1s3_bucket [[OPTIONAL] your-bucket-for-syncing-data (do not include 's3://')]:aws_profile [default]:Select python_interpreter:
1 - python3
2 - python
Choose from 1, 2 [1]: 1

您可以忽略“s3_bucket”和“aws_profile”选项。

  1. 将项目添加到 git 存储库

cd my-test// Initialize the git
git init// Add all the files and folder
git add .// Commit the files
git commit -m "Initialized the repo with cookiecutter data science structure"// Set the remote repo URL
git remote add origin https://github.com/your_user_id/my-test.git
git remote -v// Push to changes from local repo to github
git push origin master

最终结构应如下所示:

曲奇切刀温度

数据文件夹将位于您的本地文件夹中,不会出现在 GitHub 中。这是因为它将位于.gitignore文件中。

请记住,这些只是建议的结构,您可以根据自己的具体需求和偏好进行修改。关键在于保持逻辑性和条理性的布局,以便于浏览和理解您的项目。

封面图片来自ccjk.com

鏂囩珷鏉ユ簮锛�https://dev.to/luxdevhq/generic-folder-struct-for-your-machine-learning-projects-4coe
PREV
工程师如何在求职者中脱颖而出
NEXT
高级 Javascript 函数