MindSpore:mindspore.dataset中的split功能

本文讨论了MindSpore中NumpySlicesDataset的split函数使用时的注意事项。问题一指出,每个epoch前的shuffle会导致不同epoch数据顺序变化。问题二通过实例展示了split功能可能存在的误解,并解释在最新代码中已修复此问题。建议在r1.2版本发布后尝试或手动预处理数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

【功能模块】

mindspore.dataset

split函数

https://www.mindspore.cn/doc/api_python/zh-CN/r1.1/mindspore/dataset/mindspore.dataset.NumpySlicesDataset.html?highlight=split#mindspore.dataset.NumpySlicesDataset.split

【操作步骤&问题现象】

问题一:

文档建议split前不要shuffle,否则每个epoch可能拿到不一样的训练集,是不是可以理解为每个epoch会进行一次split?

mindspore.dataset.NumpySlicesDataset — MindSpore r1.1 documentation

问题二:

我尝试用官网提供的NumPy数据格式代码测试split功能,但看不出切分效果,train和test不应该被分成3笔数据和1笔数据吗?为什么还都是4笔?

https://www.mindspore.cn/doc/programming_guide/zh-CN/r1.1/dataset_loading.html#numpy

【截图信息】

【日志信息】(可选,上传日志内容或者附件)

 

解决方案:

问题1:是因为每个epoch开始时,会对数据集index进行shuffle,那么按batch输出数据时,epoch1, epoch2, epoch3... 输出的数据顺序就不一样了。

问题2:我本地基于03/26 mindspore master的代码目前看是正确的。

你用的是r1.1版本?应该是我们在master中修复了这个bug,在mindspore r1.2版本发布后会是正确的。

故:现在给你的建议是,1) 先自己手动把数据集切分成两个NumpySlicesDataset,再使用。 2) 3月底 r1.2版本发布后,你再试下新版本。

 

# pygcbs: # app_name: 'APP1' # master: '192.168.0.123' # port: 6789 # level: 'DEBUG' # interval: 1 # checklist: [ "System","CPU", "GPU","Mem","NPU", ] # save_path: "./" # docker: # pygcbs_image: nvidia-pygcbs:v1.0 # worker_image: nvidia-mindspore1.8.1:v1.0 # python_path: /opt/miniconda/bin/python # workers: # - '192.168.0.123:1' # socket_ifname: # - enp4s0 # tasks: #--------------------wide_deep--------------------------------- # - application_domain: "推荐" # task_framework: "Mindspore" # task_type: "推理" # task_name: "wide_deep_infer" # scenario: "SingleStream" # is_run_infer: True # project_path: '/home/gcbs/infer/wide_deep_infer' # main_path: "main.py" # dataset_path: '/home/gcbs/Dataset/wide_deep_data/' # times: 1 # 重试次数 #distribute do_eval: True is_distributed: False is_mhost: False exp_value: 0.501 #model log name: "wide_deep" Metrics: "AUC" request_auc: 0.74 dataset_name: "Criteo 1TB Click Logs Dataset" application: "推荐" standard_time: 3600 python_version: 3.8 mindspore_version: 1.8.1 # Builtin Configurations(DO NOT CHANGE THESE CONFIGURATIONS unless you know exactly what you are doing) enable_modelarts: False data_url: "" train_url: "" checkpoint_url: "" data_path: "./data" dataset_path: "/home/gcbs/Dataset/wide_deep_data/" output_path: "/cache/train" load_path: "/cache/checkpoint_path" device_target: GPU enable_profiling: False data_format: 1 total_size: 10000000 performance_count: 10 # argparse_init 'WideDeep' epochs: 15 full_batch: False batch_size: 16000 eval_batch_size: 16000 test_batch_size: 16000 field_size: 39 vocab_size: 200000 vocab_cache_size: 0 emb_dim: 80 deep_layer_dim: [1024, 512, 256, 128] deep_layer_act: 'relu' keep_prob: 1.0 dropout_flag: False ckpt_path: "./check_points" stra_ckpt: "./check_points" eval_file_name: "./output/eval.log" loss_file_name: "./output/loss.log" host_device_mix: 0 dataset_type: "mindrecord" parameter_server: 0 field_slice: False sparse: False use_sp: True deep_table_slice_mode: "column_slice" #star_logen config mlperf_conf: './test.conf' user_conf: './user.conf' output: '/tmp/code/' scenario: 'Offline' max_batchsize: 16000 threads: 4 model_path: "./check_points/widedeep_train-12_123328.ckpt" is_accuracy: False find_peak_performance: False duration: False target_qps: False count_queries: False samples_per_query_multistream: False max_latency: False samples_per_query_offline: 500 # WideDeepConfig #data_path: "./test_raw_data/" #vocab_cache_size: 100000 #stra_ckpt: './checkpoints/strategy.ckpt' weight_bias_init: ['normal', 'normal'] emb_init: 'normal' init_args: [-0.01, 0.01] l2_coef: 0.00008 # 8e-5 manual_shape: None # wide_and_deep export device_id: 1 ckpt_file: "./check_points/widedeep_train-12_123328.ckpt" file_name: "wide_and_deep" file_format: "MINDIR" # src/process_data.py "Get and Process datasets" raw_data_path: "./raw_data" # src/preprocess_data.py "Recommendation dataset" dense_dim: 13 slot_dim: 26 threshold: 100 train_line_count: 45840617 skip_id_convert: 0 # src/generate_synthetic_data.py 'Generate Synthetic Data' output_file: "./train.txt" label_dim: 2 number_examples: 4000000 vocabulary_size: 400000000 random_slot_values: 0 #get_score threads_count: 4 base_score: 1 accuracy: 0.72 baseline_performance: 1文件中的这些是什么?、
最新发布
06-17
<think>我们正在处理用户关于YAML配置文件的问题,特别是针对宽深模型(WideDeep)和MindSpore框架的应用场景。用户希望解释YAML配置文件中与WideDeep模型相关的各项参数含义,包括pygcbs、docker、tasks、model、日志、内置配置、argparse初始化、数据处理脚本以及性能评估相关部分。虽然用户提供的引用[1][2][3]内容涉及YOLO训练、并行训练配置和Docker节点管理,但这些并非直接相关。我们需要结合MindSpore和WideDeep模型的典型配置结构来回答。在MindSpore框架中,YAML配置文件通常用于定义模型训练、评估和推理的各种参数。对于WideDeep模型(一种结合了线性模型(wide部分)和深度神经网络(deep部分)的推荐系统模型),典型的YAML配置文件可能包含以下部分:1.**模型参数(model)**:定义模型结构相关的参数,如embedding维度、隐藏层大小等。2.**训练参数(train)**:包括学习率、优化器、批大小、训练轮数等。3.**数据参数(data)**:指定数据集路径、预处理方式等。4.**日志和检查点(logging&checkpoint)**:设置日志输出、模型保存策略等。5.**评估参数(eval)**:定义评估指标、评估频率等。6.**其他系统参数**:如并行策略(在分布式训练中)、设备设置等。下面我们将针对用户提到的各个部分(pygcbs、docker、tasks、model、日志、内置配置、argparse初始化、数据处理脚本、性能评估)进行解释。注意:实际参数名称可能因具体实现而异,我们以典型MindSporeWideDeep配置为例。---###1.**YAML配置文件结构解析(以WideDeep为例)**以下是一个简化的MindSporeWideDeep模型YAML配置示例,我们将逐部分解释:```yaml#内置配置和argparse初始化相关config_name:"wide_deep_config"#配置名称,用于标识description:"ConfigurationforWide&DeepmodeltrainingonCriteodataset"#数据处理脚本相关data:dataset_path:"/data/criteo"#数据集路径batch_size:1024#批大小field_size:39#特征字段数feature_size:117581#特征总维度(embedding表大小)split_ratio:0.8#训练集划分比例data_format:"mindrecord"#数据集格式#模型参数model:wide_learning_rate:0.001#wide部分学习率deep_learning_rate:0.001#deep部分学习率embeddings_dim:16#embedding维度hidden_layers:[256,128,64]#deep部分隐藏层结构keep_prob:0.9#dropout保留概率loss_scale:1024.0#损失缩放(混合精度训练)#训练任务参数(tasks)train:epochs:10#训练轮数save_checkpoint_path:"./checkpoints"#模型保存路径save_checkpoint_steps:1000#每多少步保存一次模型#性能评估相关eval:eval_interval:1#每轮评估一次metrics:["auc","logloss"]#评估指标(AUC和LogLoss)#日志配置logging:log_dir:"./logs"#日志目录log_level:"INFO"#日志级别#分布式训练相关(如pygcbs、docker环境配置)parallel:device_num:8#设备数量parameter_broadcast:True#参数广播(用于数据并行)```---###2.**关键配置项详解**####a)**数据处理脚本相关(`data`部分)**-`dataset_path`:数据集存储路径,支持MindRecord、TFRecord等格式[^1]。-`batch_size`:每次迭代训练使用的样本数,影响内存占用和收敛速度。-`field_size`:特征字段数量(如Criteo数据集有39个特征列)。-`feature_size`:所有类别特征的总维度(即embedding表大小)。-`split_ratio`:训练集与验证集划分比例(0.8表示80%训练,20%验证)。-`data_format`:数据集格式,MindSpore常用`mindrecord`格式加速读取。####b)**模型参数(`model`部分)**-`wide_learning_rate`和`deep_learning_rate`:宽部分和深部分使用不同的学习率,因为两者结构差异大[^2]。-`embeddings_dim`:类别特征的嵌入维度(通常16-64维)。-`hidden_layers`:Deep部分的MLP层结构,示例中为3层全连接(256→128→64)。-`keep_prob`:Dropout层的保留概率,防止过拟合。-`loss_scale`:混合精度训练中的损失缩放系数,避免梯度下溢。####c)**训练任务参数(`train`部分)**-`epochs`:完整遍历数据集的次数。-`save_checkpoint_path`和`save_checkpoint_steps`:模型保存路径和步频,用于恢复训练或推理。####d)**性能评估(`eval`部分)**-`eval_interval`:每隔多少轮执行一次验证集评估。-`metrics`:推荐系统常用评估指标如AUC(曲线下面积)和LogLoss(对数损失)[^3]。####e)**日志配置(`logging`部分)**-`log_dir`:日志文件输出目录。-`log_level`:控制日志详细程度(DEBUG/INFO/WARNING/ERROR)。####f)**分布式训练(`parallel`部分)**-`device_num`:使用的GPU/NPU数量。-`parameter_broadcast`:在数据并行中,是否将初始参数从设备0广播到其他设备。>**注**:用户提到的`pygcbs`可能是特定系统的并行策略(如华为Atlas的PyGCBS库),在MindSpore中通常通过`context.set_auto_parallel_context`配置,YAML中可能对应:>```yaml>parallel:>context_config:>mode:"auto_parallel"#自动并行模式>search_mode:"dynamic_programming"#策略搜索算法>device_num:8>```>`docker`相关配置通常不在模型YAML中,而是通过容器启动命令传入(如引用[2]中的`devices=4`)。####g)**内置配置与argparse初始化**YAML配置常与Python的`argparse`库结合,实现参数优先级:命令行>YAML>默认值。例如:```pythonimportargparseimportyamlparser=argparse.ArgumentParser()parser.add_argument("--config",type=str,default="config.yaml")args=parser.parse_args()withopen(args.config,'r')asf:config=yaml.safe_load(f)#合并参数:命令行覆盖YAMLconfig.update(vars(args))```---###3.**MindSporeWideDeep典型工作流**1.**加载配置**:解析YAML文件,初始化模型和训练参数。2.**数据加载**:根据配置中的`data`部分构建数据集管道。3.**模型构建**:使用`model`参数实例化`WideDeepModel`。4.**训练循环**:按`train`配置执行训练,定期评估和保存模型。5.**性能评估**:训练结束后用测试集计算最终指标(如AUC)。---###总结YAML配置文件在MindSporeWideDeep模型中集中管理了数据、模型、训练、评估等参数,其优势包括:1.**可读性强**:键值对结构清晰描述配置依赖。2.**解耦代码与配置**:修改超参数无需改动代码。3.**支持复杂结构**:嵌套字段可定义分层参数(如优化器内部参数)。实际项目中,建议参考MindSpore官方示例(如[Criteo数据集训练脚本](https://gitee.com/mindspore/models/tree/master/official/recommend/wide_and_deep))的YAML设计。如果您有具体配置文件需要分析,欢迎提供更多细节!§§相关问题§§1.如何在MindSpore中实现WideDeep模型的数据并行训练?2.WideDeep模型如何处理高维稀疏特征(如嵌入层设计)?3.推荐系统中除了AUC和LogLoss,还有哪些常用评估指标?</think>### YAML 配置文件详解(WideDeep 模型与 MindSpore 框架) 以下是宽深模型(WideDeep)在 MindSpore 框架下的典型 YAML 配置项解析,结合您提到的关键部分: #### 1. **模型核心参数 (`model`)** ```yaml model: type: "WideDeep" # 模型类型[^1] wide_dim: 256 # Wide部分输入维度 deep_dim: 128 # Deep部分输入维度 hidden_layers: [512, 256, 128] # Deep部分隐藏层结构 activation: "relu" # 激活函数 dropout: 0.2 # Dropout比例 ``` - **作用**:定义模型架构参数,控制特征交叉(Wide)和深度特征提取(Deep)的能力平衡。 #### 2. **训练配置 (`train`)** ```yaml train: epochs: 100 # 训练轮数[^1] batch_size: 1024 # 批次大小 learning_rate: 0.001 # 学习率 optimizer: "Adam" # 优化器类型 loss_fn: "binary_crossentropy" # 损失函数 checkpoint_path: "./ckpt" # 模型保存路径 ``` - **作用**:控制训练过程的关键超参数和保存策略。 #### 3. **数据处理 (`data_processing`)** ```yaml data_processing: dataset_path: "/data/criteo" # 数据集路径 feature_map: "feature_map.json" # 特征映射文件 num_buckets: 100000 # 分桶数量(特征离散化) normalize: True # 是否归一化数值特征 transform_script: "preprocess.py" # 预处理脚本[^1] ``` - **作用**:配置特征工程流程,处理高维稀疏特征(常见于推荐系统)。 #### 4. **分布式训练 (`parallel`)** ```yaml parallel: # 参考引用[2] device_num: 8 # 设备总数 tensor_model_parallel_size: 2 # 张量并行维度 pipeline_model_parallel_size: 4 # 流水线并行维度 ``` - **作用**:实现大规模分布式训练,加速模型收敛(需满足 $ \text{device\_num} = \text{tensor} \times \text{pipeline} $)[^2]。 #### 5. **日志与监控 (`logging`)** ```yaml logging: log_dir: "./logs" # 日志目录 level: "INFO" # 日志级别 metrics: ["auc", "loss"] # 监控指标 tensorboard: True # 启用TensorBoard ``` - **作用**:记录训练过程关键指标,支持性能分析和调试。 #### 6. **评估配置 (`evaluation`)** ```yaml evaluation: interval: 1 # 每轮评估一次 metrics: ["auc", "logloss", "accuracy"] # 评估指标[^1] test_data: "/data/test" # 测试集路径 threshold: 0.5 # 分类阈值 ``` - **作用**:定义模型性能评估标准和测试策略。 #### 7. **系统级配置 (`system`)** ```yaml system: docker_image: "mindspore:2.0" # Docker镜像[^2][^3] pygcbs_enabled: True # 是否启用PyGCBS优化库 seed: 42 # 随机种子 device: "Ascend910" # 硬件设备类型 ``` - **作用**:配置运行时环境,确保实验可复现性。`pygcbs` 可能是华为特有的图计算优化库。 #### 8. **参数初始化 (`init`)** ```yaml init: wide_init: "xavier_uniform" # Wide部分初始化 deep_init: "he_normal" # Deep部分初始化 bias_init: "zeros" # 偏置初始化 ``` - **作用**:控制模型参数的初始化方式,影响收敛稳定性。 ### 关键应用场景 1. **推荐系统** 宽深模型通过 `wide_dim` 和 `deep_dim` 的配置平衡记忆(特征交叉)与泛化能力(深度特征) 2. **分布式训练加速** 并行配置(`tensor_model_parallel_size`)实现 $ \text{训练加速比} \propto \sqrt{N_{\text{devices}}} $ [^2] 3. **端到端流水线** `transform_script` + `docker_image` 实现从数据预处理到训练的一体化流程 ### 安全实践建议 1. 使用 `yaml.safe_load()` 解析配置文件 2. 对敏感参数(如路径、密钥)进行环境变量注入 3. 验证数值参数范围(如 $ \text{dropout} \in [0,1) $) > 配置示例完整结构可参考:[MindSpore WideDeep 官方示例](https://gitee.com/mindspore/models/tree/master/official/recommend/wide_and_deep)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值