You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HPNeural参数调优:寻求可变隐藏层数的优雅SAS宏实现方案

优化SAS宏生成多层隐藏层语句的简洁方案

你之前实现的%copy_lines宏虽然能完成需求,但硬编码层数判断的写法不够灵活,也不够优雅。我们可以用动态循环宏来实现更简洁的多层隐藏层语句生成,不管是1到5层还是更多层,都能轻松适配。

优化后的动态隐藏层生成宏

%macro generate_hidden_layers(num_layers, neurons_per_layer);
    %do i = 1 %to &num_layers.;
        hidden &neurons_per_layer.;
    %end;
%mend generate_hidden_layers;

这个宏的逻辑非常直观:通过%do循环从1遍历到指定的层数num_layers,每次循环输出一条hidden &neurons_per_layer.;语句,完全不需要硬编码每一层的情况,扩展性拉满。

整合到神经网络训练流程中

接下来把这个宏整合到你原有的模型训练宏里,添加外层循环遍历1到5层隐藏层,同时保留原有的神经元数量循环,还做了几个细节优化:

%macro build_predictions();
data validations_scores;
set validation;
keep Make Model MSRP;
run;

/* 外层循环:遍历1-5层隐藏层 */
%do num_layers = 1 %to 5;
    /* 内层循环:遍历1-10个神经元 */
    %do neurons = 1 %to 10;
        proc hpneural data=train;
            input Make -- Horsepower / level=nom;
            target MSRP / level=int;
            /* 调用宏生成对应层数和神经元数的hidden语句 */
            %generate_hidden_layers(&num_layers., &neurons.)
            /* 给模型命名加上层数和神经元数,避免覆盖 */
            train outmodel=model_neural_network_&num_layers._&neurons. maxiter=1000;
        run;

        proc hpneural data=validation;
            score model=model_neural_network_&num_layers._&neurons. out=scored_test_data;
        run;

        data scored_test_data;
            set scored_test_data(keep=P_MSRP);
            P_MSRP = ceil(P_MSRP);
            /* 预测列名同时体现层数和神经元数,方便后续区分 */
            rename P_MSRP = Forecast_layers&num_layers._neurons&neurons.;
        run;

        data validations_scores;
            set validations_scores;
            set scored_test_data;
        run;
    %end;
%end;
%mend;

%build_predictions;

关键优化点:

  • 模型命名新增&num_layers._&neurons.后缀,避免不同参数组合的模型互相覆盖
  • 预测列名新增层数标识,后续查看验证结果时能快速区分不同模型的表现
  • 生成隐藏层的宏完全动态,后续如果需要支持更多层数(比如到10层),只需要修改外层循环的上限即可,不需要改动宏本身

单独调用测试

如果想单独验证宏的效果,比如生成3层各5个神经元的语句,直接这样调用即可:

proc hpneural data=train;
    input Make -- Horsepower / level=nom;
    target MSRP / level=int;
    %generate_hidden_layers(3,5)
    train outmodel=model_neural_network maxiter=1000;
run;

这会生成和你手动写3条hidden 5;完全一致的代码。

内容的提问来源于stack exchange,提问作者Mateusz Konopelski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:35:02