news 2026/6/15 1:07:13

ADVANCE Day24

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ADVANCE Day24

@浙大疏锦行

📘 Day 24 实战作业:深度学习基石 —— 配置管理与文件系统

1. 作业综述

核心目标
利用元组 (Tuple)管理不可变的模型参数,利用OS 模块编写一个通用的“数据集扫描器”。这是从“写脚本”进阶到“做工程”的必经之路。

作业背景
在深度学习项目中,我们经常面临两个基础问题:

  1. 参数安全性:模型的超参数(如输入尺寸224x224、类别名称)一旦确定,在程序运行期间不应被修改。列表(List)是可变的,容易出意外;而元组(Tuple)是不可变的,非常适合做“配置锁”。
  2. 数据自动化:真实的数据集(如 ImageNet)往往包含成千上万张图片,分布在深层嵌套的文件夹中。我们需要利用os模块编写脚本,自动遍历并获取所有文件路径,而不是手动去复制粘贴。

涉及知识点

  • Tuple: 不可变特性在配置管理中的应用。
  • OS Module:os.walk(递归遍历),os.path.join(路径拼接),os.environ(环境变量)。

步骤 1:利用元组定义“不可变”配置

场景描述
在深度学习中,很多超参数(Hyperparameters)一旦确定就不应被修改,例如输入图片的尺寸(224, 224)或 优化器的参数。
如果使用列表(List),不小心被修改了会导致训练崩溃。因此,元组(Tuple)是最佳选择。

任务

  1. 定义一个元组model_config,包含:模型名称、输入尺寸(H, W)、Batch Size。
  2. 尝试修改其中的元素(验证不可变性)。
  3. 模拟 Pipeline 结构:创建一个包含多个(步骤名, 对象)元组的列表,并遍历打印。
# --- 1. 定义模型配置 (元组) ---# 格式: (ModelName, InputShape, BatchSize, LearningRate)model_config=("ResNet50",(224,224),32,0.001)print(f"当前模型配置:{model_config}")print(f"输入高度:{model_config[1][0]}")# --- 2. 验证不可变性 (防呆设计) ---try:# 尝试修改 Batch Size (这应该会报错)print("尝试修改配置...")model_config[2]=64exceptTypeErrorase:print(f"⚠️ 修改失败 (符合预期):{e}")print("元组保护了配置不被意外篡改。")# --- 3. 模拟 Pipeline 结构 (列表 + 元组) ---# 在 sklearn 和 PyTorch 中,Pipeline 通常这样定义pipeline_steps=[('scaler','StandardScaler Object'),('selector','SelectKBest Object'),('model','RandomForest Object')]print("\n--- 遍历 Pipeline 步骤 ---")forstep_name,step_objinpipeline_steps:print(f"步骤名称:{step_name:<10}| 执行对象:{step_obj}")
当前模型配置: ('ResNet50', (224, 224), 32, 0.001) 输入高度: 224 尝试修改配置... ⚠️ 修改失败 (符合预期): 'tuple' object does not support item assignment 元组保护了配置不被意外篡改。 --- 遍历 Pipeline 步骤 --- 步骤名称: scaler | 执行对象: StandardScaler Object 步骤名称: selector | 执行对象: SelectKBest Object 步骤名称: model | 执行对象: RandomForest Object

步骤 2:OS 模块 —— 编写数据集扫描器

场景描述
在做 CV(计算机视觉)或 NLP 任务时,数据通常以文件夹形式存储。我们需要编写脚本自动遍历这些文件夹,找到所有的数据文件。
os.walk是处理目录树的神器,而os.path.join能保证路径在 Windows/Mac/Linux 上都能通用。

任务

  1. (代码自动完成) 创建一个模拟的dummy_dataset目录结构。
  2. 使用os.walk遍历该目录。
  3. 统计其中.jpg图片文件的数量,并生成完整路径列表。
importos# --- 1. 准备环境:自动创建一个模拟数据集 (无需手动操作) ---base_dir="dummy_dataset"sub_dirs=["train/cats","train/dogs","test/cats","test/dogs"]print(f"正在创建模拟数据集:{base_dir}...")forsubinsub_dirs:# 拼接完整路径dir_path=os.path.join(base_dir,sub)os.makedirs(dir_path,exist_ok=True)# 在每个文件夹里创建几个假图片文件foriinrange(3):fname=f"image_{i}.jpg"withopen(os.path.join(dir_path,fname),'w')asf:f.write("fake image data")# 创建一个干扰文件 (不是 jpg)withopen(os.path.join(base_dir,"readme.txt"),'w')asf:f.write("read me")print("✅ 模拟数据集创建完毕!\n")# --- 2. 核心任务:编写扫描器 ---print(f"--- 开始扫描{base_dir}---")image_paths=[]# 存储找到的图片路径file_count=0# os.walk 会递归遍历所有子目录forroot,dirs,filesinos.walk(base_dir):print(f"正在扫描目录:{root}")forfileinfiles:# 筛选 .jpg 结尾的文件iffile.endswith(".jpg"):# 关键:使用 os.path.join 拼接路径 (兼容 Windows/Linux)full_path=os.path.join(root,file)image_paths.append(full_path)file_count+=1print("\n--- 扫描结果 ---")print(f"共发现{file_count}张图片。")print("前 5 张图片路径示例:")forpinimage_paths[:5]:print(f" -{p}")
正在创建模拟数据集: dummy_dataset ... ✅ 模拟数据集创建完毕! --- 开始扫描 dummy_dataset --- 正在扫描目录: dummy_dataset 正在扫描目录: dummy_dataset\test 正在扫描目录: dummy_dataset\test\cats 正在扫描目录: dummy_dataset\test\dogs 正在扫描目录: dummy_dataset\train 正在扫描目录: dummy_dataset\train\cats 正在扫描目录: dummy_dataset\train\dogs --- 扫描结果 --- 共发现 12 张图片。 前 5 张图片路径示例: - dummy_dataset\test\cats\image_0.jpg - dummy_dataset\test\cats\image_1.jpg - dummy_dataset\test\cats\image_2.jpg - dummy_dataset\test\dogs\image_0.jpg - dummy_dataset\test\dogs\image_1.jpg

步骤 3:环境侦察兵 (os.environ)

任务
深度学习经常需要配置环境变量(如CUDA_VISIBLE_DEVICES控制显卡)。
利用os.environ查看当前系统的一个关键信息(例如 PATH 或 当前用户名)。

importosprint("--- 系统环境信息 ---")# 获取当前工作目录print(f"当前工作目录 (getcwd):{os.getcwd()}")# 尝试获取一些常见的环境变量# 使用 .get() 方法更安全,如果不存在不会报错,而是返回 None 或 默认值username=os.environ.get('USERNAME')oros.environ.get('USER')# Windows用USERNAME, Mac/Linux用USERpath_env=os.environ.get('PATH')print(f"当前用户:{username}")# 打印 PATH 的前 100 个字符避免刷屏print(f"系统路径 (PATH) 前100字符:{path_env[:100]}...")
--- 系统环境信息 --- 当前工作目录 (getcwd): f:\Training_camp\test 当前用户: ADVANCE 系统路径 (PATH) 前100字符: e:\Anaconda\envs\test;E:\Anaconda\envs\test;E:\Anaconda\envs\test\Library\mingw-w64\bin;E:\Anaconda\...

🎓 Day 24 总结:为大项目做准备

今天我们没有跑模型,但学到了工程化最重要的两个技能:

  1. 数据安全 (Tuples):学会了用元组保护关键配置(Input Shape, Class Names),防止在代码运行中被意外修改。
  2. 数据读取 (OS Module):掌握了os.walkos.path.join
    • 以后当你下载了 50GB 的 ImageNet 数据集时,你不再需要手动点击文件夹,而是直接用今天的代码,一秒钟就能生成所有图片的文件列表。

Next Level: 掌握了文件操作,下一阶段我们就可以正式开始处理**非结构化数据(图像/文本)**了!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 14:04:11

基于51单片机的卧室灯语音控制系统设计与实现

第一章 系统设计背景与目标 随着智能家居技术的快速发展&#xff0c;卧室作为家庭生活中的核心休憩空间&#xff0c;其智能化升级需求日益凸显。传统卧室灯多依赖手动开关控制&#xff0c;在夜间起夜、双手忙碌等场景下存在操作不便的问题&#xff0c;而语音控制凭借无需接触、…

作者头像 李华
网站建设 2026/6/14 18:00:37

工商业光储项目躺赢?iSolarBP让收益测算、设计落地快人一步

做工商业分布式光伏或光储项目的朋友&#xff0c;大概率都踩过这些坑&#xff1a;人工测算收益偏差超10%&#xff0c;屋顶踏勘爬梯担风险&#xff0c;组件排布浪费空间&#xff0c;可研报告改到崩溃…… 直到接触了iSolarBP分布式智能评估设计软件&#xff0c;才发现原来光储项…

作者头像 李华
网站建设 2026/6/14 1:59:35

传感器数据聚合函数避坑手册(90%新手都忽略的关键细节)

第一章&#xff1a;传感器数据聚合函数的核心概念在物联网和实时监控系统中&#xff0c;传感器持续产生海量时序数据。为了从这些数据中提取有价值的信息&#xff0c;必须对原始信号进行汇总与分析。传感器数据聚合函数正是用于将多个数据点合并为更高级别统计量的数学工具&…

作者头像 李华
网站建设 2026/6/15 15:12:53

揭秘PHP医疗数据脱敏漏洞:5大新规你必须立即掌握

第一章&#xff1a;PHP医疗数据脱敏新规背景与合规挑战近年来&#xff0c;随着《个人信息保护法》和《数据安全法》的全面实施&#xff0c;医疗行业成为数据合规监管的重点领域。医疗信息系统中广泛使用PHP作为后端开发语言&#xff0c;其处理的患者姓名、身份证号、病历记录等…

作者头像 李华
网站建设 2026/6/15 6:17:55

完爆ChatGPT!谷歌这招太狠:连你的「阴阳怪气」都能神还原

谷歌发布Gemini 2.5 Flash原生音频模型&#xff0c;不仅能保留语调进行实时语音翻译&#xff0c;更让AI在复杂指令和连续对话中像真人一样自然流畅。这一更新标志着AI从简单的「文本转语音」跨越到了真正的「拟人化交互」时代。想象这样一个场景&#xff1a;你戴着耳机走在印度…

作者头像 李华
网站建设 2026/6/15 0:38:33

立煌AUO15寸友达液晶屏幕G150XTN03.4工业液晶模组参数查询

在工业设备、医疗终端和自动化控制等领域&#xff0c;显示模组不仅仅是“输出信息”的窗口&#xff0c;更是系统交互与监测的关键组件。友达光电&#xff08;AUO&#xff09;推出的 G150XTN03.4 正是一款针对 工业控制、机械仪表及信息显示终端 打造的高可靠性液晶屏。它在 亮度…

作者头像 李华