2026/6/27 19:51:23
网站建设
项目流程
10_10_设计公司网站设计,做网站做网站,学校网站模板代码,国内产品网站1688浙大疏锦行
#x1f4d8; Day 24 实战作业#xff1a;深度学习基石 —— 配置管理与文件系统
1. 作业综述
核心目标#xff1a; 利用 元组 (Tuple) 管理不可变的模型参数#xff0c;利用 OS 模块 编写一个通用的“数据集扫描器”。这是从“写脚本”进阶到“做工程”的必…浙大疏锦行 Day 24 实战作业深度学习基石 —— 配置管理与文件系统1. 作业综述核心目标利用元组 (Tuple)管理不可变的模型参数利用OS 模块编写一个通用的“数据集扫描器”。这是从“写脚本”进阶到“做工程”的必经之路。作业背景在深度学习项目中我们经常面临两个基础问题参数安全性模型的超参数如输入尺寸224x224、类别名称一旦确定在程序运行期间不应被修改。列表List是可变的容易出意外而元组Tuple是不可变的非常适合做“配置锁”。数据自动化真实的数据集如 ImageNet往往包含成千上万张图片分布在深层嵌套的文件夹中。我们需要利用os模块编写脚本自动遍历并获取所有文件路径而不是手动去复制粘贴。涉及知识点Tuple: 不可变特性在配置管理中的应用。OS Module:os.walk(递归遍历),os.path.join(路径拼接),os.environ(环境变量)。步骤 1利用元组定义“不可变”配置场景描述在深度学习中很多超参数Hyperparameters一旦确定就不应被修改例如输入图片的尺寸(224, 224)或 优化器的参数。如果使用列表List不小心被修改了会导致训练崩溃。因此元组Tuple是最佳选择。任务定义一个元组model_config包含模型名称、输入尺寸(H, W)、Batch Size。尝试修改其中的元素验证不可变性。模拟 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步骤 2OS 模块 —— 编写数据集扫描器场景描述在做 CV计算机视觉或 NLP 任务时数据通常以文件夹形式存储。我们需要编写脚本自动遍历这些文件夹找到所有的数据文件。os.walk是处理目录树的神器而os.path.join能保证路径在 Windows/Mac/Linux 上都能通用。任务(代码自动完成) 创建一个模拟的dummy_dataset目录结构。使用os.walk遍历该目录。统计其中.jpg图片文件的数量并生成完整路径列表。importos# --- 1. 准备环境自动创建一个模拟数据集 (无需手动操作) ---base_dirdummy_datasetsub_dirs[train/cats,train/dogs,test/cats,test/dogs]print(f正在创建模拟数据集:{base_dir}...)forsubinsub_dirs:# 拼接完整路径dir_pathos.path.join(base_dir,sub)os.makedirs(dir_path,exist_okTrue)# 在每个文件夹里创建几个假图片文件foriinrange(3):fnamefimage_{i}.jpgwithopen(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_count0# os.walk 会递归遍历所有子目录forroot,dirs,filesinos.walk(base_dir):print(f正在扫描目录:{root})forfileinfiles:# 筛选 .jpg 结尾的文件iffile.endswith(.jpg):# 关键使用 os.path.join 拼接路径 (兼容 Windows/Linux)full_pathos.path.join(root,file)image_paths.append(full_path)file_count1print(\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 或 默认值usernameos.environ.get(USERNAME)oros.environ.get(USER)# Windows用USERNAME, Mac/Linux用USERpath_envos.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 总结为大项目做准备今天我们没有跑模型但学到了工程化最重要的两个技能数据安全 (Tuples)学会了用元组保护关键配置Input Shape, Class Names防止在代码运行中被意外修改。数据读取 (OS Module)掌握了os.walk和os.path.join。以后当你下载了 50GB 的 ImageNet 数据集时你不再需要手动点击文件夹而是直接用今天的代码一秒钟就能生成所有图片的文件列表。Next Level: 掌握了文件操作下一阶段我们就可以正式开始处理**非结构化数据图像/文本**了