组织机器学习代码

news2025/1/25 4:42:20

组织机器学习代码

从note本转移到 Python 脚本时组织代码。

Intuition

有组织的代码就是有可读的、可重现的、健壮的代码。您的团队、经理,最重要的是,您未来的自己,将感谢您为组织工作付出的最初努力。在本课中,将讨论如何将代码从note本迁移和组织到 Python 脚本。

Editor

在开始编码之前,需要一个空间来完成它。代码编辑器有多种选择,例如VSCode、Atom、Sublime、PyCharm、Vim等,它们都提供独特的功能,同时提供代码编辑和执行的基本操作。由于 VSCode 的简单性、多语言支持、附加组件和不断增长的行业采用,将使用 VSCode 来编辑和执行代码。

欢迎您使用任何编辑器,但将使用一些可能特定于 VSCode 的附加组件。

  1. 从源代码为您的系统安装 VSCode: https ://code.visualstudio.com/
  2. 打开命令面板(在 mac F1上是Cmd++ Shift) P→ 输入“首选项:打开设置(UI)”→ 点击Enter
  3. 调整您想要的任何相关设置(间距、字体大小等)
  4. 安装 VSCode 扩展(使用编辑器左侧面板上的乐高积木图标)

推荐的 VSCode 扩展

我建议安装这些扩展,你可以通过复制/粘贴这个命令:

code --install-extension 74th.monokai-charcoal-high-contrast
code --install-extension alefragnani.project-manager
code --install-extension bierner.markdown-preview-github-styles
code --install-extension bradgashler.htmltagwrap
code --install-extension christian-kohler.path-intellisense
code --install-extension euskadi31.json-pretty-printer
code --install-extension formulahendry.auto-close-tag
code --install-extension formulahendry.auto-rename-tag
code --install-extension kamikillerto.vscode-colorize
code --install-extension mechatroner.rainbow-csv
code --install-extension mikestead.dotenv
code --install-extension mohsen1.prettify-json
code --install-extension ms-azuretools.vscode-docker
code --install-extension ms-python.python
code --install-extension ms-python.vscode-pylance
code --install-extension ms-vscode.sublime-keybindings
code --install-extension njpwerner.autodocstring
code --install-extension PKief.material-icon-theme
code --install-extension redhat.vscode-yaml
code --install-extension ritwickdey.live-sass
code --install-extension ritwickdey.LiveServer
code --install-extension shardulm94.trailing-spaces
code --install-extension streetsidesoftware.code-spell-checker
code --install-extension zhuangtongfa.material-theme
如果您添加自己的扩展并希望与他人共享,只需运行此命令即可生成命令列表:

一旦设置好 VSCode,就可以开始创建项目目录,将使用它来组织所有的脚本。启动项目的方式有很多种,但推荐以下方式:

  1. 使用终端创建目录 ( mkdir <PROJECT_NAME>)。

  2. 切换到您刚刚创建的项目目录 ( cd <PROJECT_NAME>)。

  3. 通过键入从此目录启动 VSCodecode .

    要使用命令直接从终端打开 VSCode ,请打开命令面板(或在 mac 上为+ + )→ 输入“Shell 命令:在 PATH 中安装‘代码’命令”→点击→重新启动终端。code $PATH``F1CmdShiftPEnter

  4. 在 VSCode ( ViewTerminal) 中打开一个终端,以根据需要继续创建脚本 ( touch <FILE_NAME>) 或其他子目录 ( mkdir <SUBDIR>)。

代码
代码

设置

自述文件

将从一个README.md文件开始组织,该文件将提供有关目录中的文件的信息、执行操作的说明等。将不断更新此文件,以便可以为将来的信息编目。

touch README.md

让从添加用于创建虚拟环境的说明开始:

# Inside README.md
python3 -m venv venv
source venv/bin/activate
python3 -m pip install pip setuptools wheel
python3 -m pip install -e .

如果您按下位于编辑器右上角的预览按钮(下图中红色圆圈中的按钮),您可以看到README.md当为git推送到远程主机时会是什么样子。

自述文件
自述文件

配置

接下来,将创建一个名为的配置目录config,可以在其中存储应用程序所需的组件。在此目录中,将创建一个config.py和一个args.json.

mkdir config
touch config/main.py config/args.json
config/
├── args.json       - arguments
└── config.py       - configuration setup

在 内部config.py,将添加代码来定义关键目录位置(将在以后的课程中根据需要添加更多配置):

# config.py
from pathlib import Path

# Directories
BASE_DIR = Path(__file__).parent.parent.absolute()
CONFIG_DIR = Path(BASE_DIR, "config")

在里面args.json,将添加与数据处理和模型训练相关的参数。

{
    "shuffle"true,
    "subset": null,
    "min_freq": 75,
    "lower"true,
    "stem"false,
    "analyzer""char",
    "ngram_max_range": 7,
    "alpha": 1e-4,
    "learning_rate": 1e-1,
    "power_t": 0.1
}

操作

将从tagifai在项目目录 ( mlops) 中创建包目录 ( ) 开始。在这个包目录中,将创建一个main.py文件来定义希望能够执行的核心操作。

mkdir tagifai
touch tagifai/main.py
tagifai/
└── main.py       - training/optimization pipelines
`

当将代码从note本移动到下面main.py适当的脚本时,将在内部定义这些核心操作:

  • elt_data:提取、加载和转换数据。
  • optimize:调整超参数以针对目标进行优化。
  • train_model:使用优化研究中的最佳参数训练模型。
  • load_artifacts:从给定的运行中加载经过训练的工件。
  • predict_tag:预测给定输入的标签。

Utilities

在开始从note本中移动代码之前,应该有意识地了解如何将功能移动到脚本中。note本内有临时进程是很常见的,因为只要note本在运行,它就会保持状态。例如,可以像这样在note本中设置种子:

# Set seeds
np.random.seed(seed)
random.seed(seed)

但在脚本中,应该将此功能包装为一个干净、可重用的函数,并带有适当的参数:

def set_seeds(seed=42):
    """Set seeds for reproducibility."""
    np.random.seed(seed)
    random.seed(seed)

可以将所有这些存储在包目录中的一个utils.py文件中。tagifai

touch tagifai/utils.py

tagifai/
├── main.py       - training/optimization pipelines
└── utils.py      - supplementary utilities

项目

在将代码从note本迁移到脚本时,最好根据实用程序进行组织。例如,可以为数据处理、训练、评估、预测等 ML 开发的各个阶段创建脚本:

将创建不同的 python 文件来包装数据和 ML 功能:

cd tagifai
touch data.py train.py evaluate.py predict.py

tagifai/
├── data.py       - data processing utilities
├── evaluate.py   - evaluation components
├── main.py       - training/optimization pipelines
├── predict.py    - inference utilities
├── train.py      - training utilities
└── utils.py      - supplementary utilities

可能在其他项目中有其他脚本,因为它们是必要的。例如,通常有一个models.py脚本,在 Pytorch、Tensorflow 等中定义显式模型架构。

以这种方式组织代码库也使更容易理解(或修改)代码库。本可以将所有代码放入一个main.py脚本中,但随着项目的增长,将很难在一个整体文件中导航。另一方面,可以通过分解data.pysplit.pypreprocess.py等来假设更细粒度的立场。如果有多种拆分、预处理等方式(例如 ML 操作库),这可能更有意义,但是对于任务,在这个更高级别的组织中就足够了。

原则

通过下面的迁移过程,将反复使用几个核心软件工程原则。

将功能包装到函数中

如何决定何时将特定代码行包装为一个单独的函数?函数应该是原子的,因为它们每个都有单一的职责,这样就可以轻松地测试它们。如果不是,需要将它们拆分成更细粒度的单元。例如,可以用这些行替换项目中的标签:

oos_tags = [item for item in df.tag.unique() if item not in tags_dict.keys()]
df.tag = df.tag.apply(lambda x: "other" if x in oos_tags else x)

────相比────

def replace_oos_tags(df, tags_dict):
    """Replace out of scope (oos) tags."""
    oos_tags = [item for item in df.tag.unique() if item not in tags_dict.keys()]
    df.tag = df.tag.apply(lambda x: "other" if x in oos_tags else x)
    return df

最好将它们包装为一个单独的函数,因为可能想要:

  • 在项目的其他部分或其他项目中重复此功能。
  • 测试这些标签实际上是否被正确替换。

组合广义函数

Specific
def replace_oos_tags(df, tags_dict):
    """Replace out of scope (oos) tags."""
    oos_tags = [item for item in df.tag.unique() if item not in tags_dict.keys()]
    df.tag = df.tag.apply(lambda x: "other" if x in oos_tags else x)
    return df

────相比────

Generalized
def replace_oos_labels(df, labels, label_col, oos_label="other"):
    """Replace out of scope (oos) labels."""
    oos_tags = [item for item in df[label_col].unique() if item not in labels]
    df[label_col] = df[label_col].apply(lambda x: oos_label if x in oos_tags else x)
    return df

这样当列的名称发生变化或者想用不同的标签替换时,很容易调整代码。这还包括在函数中使用通用名称,例如label而不是特定标签列的名称(例如tag)。它还允许其他人在他们的用例中重用此功能。

但是,重要的是不要强行泛化,如果它涉及大量的努力。如果看到类似的功能再次出现,可以稍后再花时间

本文主体源自以下链接:

@article{madewithml, author = {Goku Mohandas}, title = { Made With ML }, howpublished = {\url{https://madewithml.com/}}, year = {2022} }

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytest测试框架入门1

pytest单元测试框架 单元测试是指在软件开发当中&#xff0c;针对软件的最小单位&#xff08;函数&#xff0c;方法&#xff09;进行正确性的检查测试 单元测试框架主要做什么 测试发现&#xff1a;从多个文件里面找到我们的测试用例测试执行&#xff1a;按照一定的顺序和规则…

初学者指南: 使用NumPy数组进行图像处理

这里写自定义目录标题初学者指南: 使用NumPy数组进行图像处理1、加载图像2、裁剪图像3、分离颜色4、转换5、灰度转换6、图像分割结语初学者指南: 使用NumPy数组进行图像处理 由于图像也可以被视为由数组组成&#xff0c;因此我们也可以使用NumPy执行不同的图像处理任务。在本文…

【Lilishop商城】No2-6.确定软件架构搭建五(本篇包括定时任务xxl-job)

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇只介绍重点架构逻辑&#xff0c;具体编写看源代码就行&#xff0c;读起来也不复杂~ 谨慎&#xf…

如何配置一台适合oc渲染器的电脑?

众所周知&#xff0c;Octane 是最流行的渲染引擎之一。此外&#xff0c;Octane 是一个 GPU 渲染引擎&#xff0c;它使用一种计算最终生成的图片的方法&#xff0c;试图达到照片般的真实感。Octane 是一种利用 GPU 技术的无偏渲染引擎&#xff0c;非常接近物理精度。一台好的 PC…

计算机组成原理习题课第三章-2(唐朔飞)

计算机组成原理习题课第三章-2&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

天宇优配|平台助企“抱团出海” “小而美”中觅“先机”

天津华图轿车物流有限公司一批二手新能源车从连云港装船发往阿联酋迪拜。&#xff08;采访方针供图&#xff09; 最近&#xff0c;一笔100.8万美元的出口信誉稳妥保单融资借款&#xff0c;被划到了天津华图轿车物流有限公司的账户上。正值客户“下单”高峰期&#xff0c;这笔及…

Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)

Three.js实例详解___旋转的精灵女孩(附完整代码和资源)&#xff08;一&#xff09; 本文目录&#xff1a; 一、【旋转的精灵女孩】案例运行效果 二、Three.js简介 三、Three.js代码正常运行显示条件 &#xff08;1&#xff09;不载入任何纹理贴图的网页 &#xff08;2&…

双十二蓝牙耳机啥牌子好?2022年度热销蓝牙耳机排名

这期双十二数码好物分享&#xff0c;工作室打算来跟大家说说蓝牙耳机这个话题&#xff0c;它已经成为出行必带的装备&#xff0c;上班族、学生党、游戏党都离不开蓝牙耳机。今年我们测评过数十款型号了&#xff0c;本期我们盘点了今年热销的蓝牙耳机排名&#xff0c;让大家直观…

【学习笔记】《Python深度学习》第五章:深度学习用于计算机视觉

文章目录1 卷积神经网络简介1.1 卷积运算1.2 最大池化运算2 在小型数据集上从头开始训练一个卷积神经网络2.1 下载数据2.2 构建网络2.3 数据预处理2.4 数据增强3 使用预训练的卷积神经网络3.1 特征提取3.2 微调模型3.3 小结4 卷积神经网络的可视化4.1 可视化中间激活4.2 可视化…

新手想开一个传奇该如何操作?开一个传奇必须掌握哪些知识要点

对于这个问题&#xff0c;近期问的人比较多&#xff0c;相比这也是热爱传奇这个游戏的朋友会问到的一个问题&#xff0c;因为喜欢玩这个游戏&#xff0c;也想要自己去开一个 经营一个 不管是电脑端也好 还是手机端也好&#xff0c;但是对于一些新手确实不知道该如何开始操作 从…

H3C opsf/rip/ftp/telent/nat/acl综合

实验拓扑 拓扑下载 https://sharewh2.xuexi365.com/share/84b85b32-acb7-4f62-a389-6188680a19f3?t3 图 1-1 注&#xff1a;如无特别说明&#xff0c;描述中的 R1 或 SW1 对应拓扑中设备名称末尾数字为 1 的设备&#xff0c;R2 或 SW2 对应拓扑中设备名称末尾数字为 2 的设备…

三天入门Redis【快速浏览版】

文章目录第一天1.1 Redis基础1.1.1 NoSql引入1.1.2 NoSql特点1.1.3 NoSql数据库1.1.4 Redis概述1.1.5 Redis文件的作用1.1.6 Redis相关介绍1.2 常用的五大类型及操作⭐️1.2.1 Redis键&#xff08;key&#xff09;1.2.2 库的一些操作1.2.3 Redis字符串1.2.4 Redis列表&#xff…

MATLAB数据导入

MATLAB数据导入 在编写一个程序时&#xff0c;经常需要从外部读入数据。MATLAB使用多种格式打开数据。本章将要介绍MATLAB中数据的导入。 MATLAB中导入数据的方式有两种&#xff0c;分别是在命令行通过代码把数据导进去和通过MATLAB的数据导入向导导入数据。本节将为大家介绍第…

ASCHIP_ISP Tool 工具 使用与更新

系列文章目录 ASCHIP-ISP Tool 版本1 2022 11 26ASCHIP-ISP Tool 版本1 使用说明 2022 11 26 软件介绍 对窗体进行初步配置&#xff0c;配置其大小与显示 一&#xff1a;软件介绍 ASCHIP_ISP Tool 工具是用于具有 ISP 功能型号类型的单片机进行 ISP 更新程序开发实验的配套上位…

Lint-staged自动修复格式错误及小结

文章目录一、背景二、Lint-staged2.1 简介2.2 修改package.json2.3 修改pre-commit2.4 测试三、小结3.1 代码格式规范3.2 Git提交规范一、背景 通过前面几节的介绍&#xff0c;目前想要提交代码&#xff0c;就要保证代码格式规范和提交信息格式规范&#xff0c;特别是pre-subm…

vue设置页面背景及背景图片

本地静态图片 <template><view class"max"><image src"../../static/bg.png" mode""></image></view> </template><script>export default {data() {return {}},methods: {}} </script><st…

JavaEE之Cookie 和 Session 的工作流程

文章目录前言Cookie 和 Session 的核心方法Cookie 和 Session 的工作流程总结前言 HTTP涉及到的键值对: query string请求/响应的headerCookie里的内容form表单提交的bofyjson格式的body服务器存储若干个sessionId和HttpSession对象每个HttpSession对象本身里面又可以保存多个…

前景一片蓝海,Android音视频开发必备基础知识汇总

转瞬间&#xff0c;2022 已慢慢步入深冬&#xff0c;回首过去一年&#xff0c;音视频技术在经历一番风浪的侵袭过后&#xff0c;变得逐渐相对平静下来。 “内卷”之外&#xff0c;大家似乎更多了一份“理性”指导我们去做一些正确的事&#xff0c;追求技术在商业中的更高价值。…

数商云B2B商城系统订货功能为新能源汽车行业赋能,打造高质量发展生态圈

近年来&#xff0c;随着传统的汽车销售模式的信息不对称、价格不透明等问题日益凸显&#xff0c;汽车电商以其低成本的优势与高速的信息流通效率迅速发展。所谓汽车电商&#xff0c;即卖家与买家通过互联网的技术和手段&#xff0c;完成汽车售后各项服务的交易流程。根据数据显…

3.Linux文件管理命令-----ls显示文件名

14天学习训练营导师课程&#xff1a; 互联网老辛《 符合学习规律的超详细linux实战快速入门》 作用&#xff1a;ls 命令用于显示目录内容&#xff0c;类似于 DOS 下的 dir 命令&#xff0c;它的使用权限是所有用户。 用法&#xff1a; ls [选项]...[文件]...1.LS应用实例如下…