基于灰狼优化算法的CNN超参数自动调优:Matlab实现与工程实践
发布时间:2026/9/3 8:47:33来源:尧图网络
简介本资源是基于卷积神经网络与灰狼优化算法CNN_GWO融合建模的完整Matlab实现方案面向计算机、电子信息工程及数学等专业的本科生适用于课程设计、期末大作业及毕业设计等实践环节。代码兼容Matlab 2014a/2019a/2024a采用参数化编程设计关键超参如卷积核尺寸、GWO迭代次数、种群规模等均集中定义并配有中文注释便于理解算法逻辑与快速调优。压缩包共9个文件主体为Office Open XML格式的Excel工作簿workbook.xml等与文档属性文件app.xml、core.xml用于存储实验配置、训练结果及元数据结构规范、可扩展性强总大小17.96MB。已有48人下载学习配套提供可直接运行的案例数据与清晰目录组织读者可即刻复现CNN特征提取与GWO全局寻优协同训练全过程掌握智能算法与深度学习交叉应用的核心实现路径。1. 项目概述当卷积神经网络遇上灰狼优化器如果你正在用Matlab做深度学习尤其是搞图像分类、故障诊断或者信号识别这类任务那你肯定对CNN卷积神经网络不陌生。这玩意儿好用是好用但调参是真的头疼。学习率设多少卷积核用几个全连接层神经元放多少这些超参数就像一个个隐藏的开关调对了模型性能起飞调错了就原地踏步甚至过拟合。我手头这个项目“CNN_GWO附Matlab代码.rar”核心就是来解决这个痛点的。它把经典的CNN和一种叫灰狼优化算法Grey Wolf Optimizer, GWO的元启发式算法给结合起来了。简单说就是用GWO这个“智能调参师”来自动寻找CNN那一堆超参数的最优组合省去我们手动网格搜索或者凭经验瞎试的麻烦。这尤其适合那些对模型精度有要求但又缺乏大量计算资源去跑超大规模参数搜索的场景比如做科研、课程大作业或者中小型企业的算法原型验证。从网络热词来看大家关心的点很集中CNN的结构、注意力机制、1D/3D CNN的应用以及Matlab使用中遇到的各种安装、报错和具体操作问题。这说明用户群体很可能是在校学生、科研人员或工程技术人员他们需要在Matlab这个相对友好但功能强大的平台上快速实现并验证一个可靠的、可优化的深度学习模型。这个项目正好切中了这个需求——提供一个完整的、可运行的、结合了前沿优化技术的Matlab代码框架。2. 核心思路与方案选型为什么是GWOCNN2.1 传统CNN调参的困境在动手写代码之前我们得先搞清楚为什么要用GWO。传统的CNN超参数优化无非几种方法手动调参试错法凭经验、看文献改一个参数跑一次效率极低且容易陷入局部最优。网格搜索Grid Search把每个参数设定几个候选值然后排列组合全部跑一遍。这种方法虽然全面但计算成本呈指数级增长。假如你有5个超参数每个参数试5个值那就是5^53125次训练在Matlab上哪怕用上GPU这也是一个令人望而却步的数字。随机搜索Random Search在参数空间里随机采样。比网格搜索效率高一些但依然带有很大的盲目性可能需要很多次随机尝试才能碰到好的区域。这些方法共同的缺点是计算代价高、缺乏方向性。我们就像在黑暗的房间里摸开关不知道哪个方向是对的。2.2 元启发式优化算法GWO的优势GWO是模仿灰狼群体狩猎行为而提出的一种优化算法。它的核心思想是将狼群分为α头狼、β、δ次级领导和ω普通狼。在优化问题中α、β、δ代表当前找到的最优的三个解猎物位置ω狼群则围绕这三个领导者的位置进行探索和更新。把它用到CNN超参数优化上优势非常明显全局搜索能力强狼群候选解集的分散性有助于探索参数空间的不同区域避免过早陷入局部最优解。这对于CNN这种非凸、高维的优化问题至关重要。参数少易实现GWO算法本身需要调节的参数很少主要是狼群数量、迭代次数比调CNN本身的参数简单多了。在Matlab里实现起来代码清晰逻辑易懂。平衡探索与开发算法通过一个收敛因子a在迭代前期鼓励狼群广泛探索全局搜索在迭代后期鼓励狼群聚集在最优解附近精细开发局部搜索。这种自适应机制非常智能。适合连续/离散混合空间CNN的超参数有些是连续的如学习率有些是离散的如卷积核数量、层数。GWO可以很自然地处理这种混合编码问题我们可以将连续参数直接编码为实数将离散参数编码为整数或通过映射函数处理。注意GWO不是万能的。对于超多参数例如十几二十个的极端情况任何元启发式算法都可能面临“维数灾难”搜索效率下降。本项目通常针对CNN的5-8个核心超参数进行优化这是一个非常实用的范围。2.3 项目整体架构设计基于以上分析这个项目的整体工作流可以设计如下问题定义确定需要优化的CNN超参数集合如初始学习率、第一层卷积核数量、第二层卷积核数量、全连接层神经元数、Dropout率。GWO初始化设定狼群数量如30、最大迭代次数如50。每只“狼”的位置就是一个超参数组合一个向量。适应度评估这是最耗时的部分。对于每一只“狼”即每一组超参数我们需要 a. 用这组参数构建一个CNN模型。 b. 在训练集上训练这个模型若干轮Epochs为了节省时间可以比最终训练轮数少例如20轮。 c. 在验证集上评估模型性能如分类准确率。这个准确率就是该“狼”的适应度值。适应度越高代表这组参数越好。GWO更新狼群根据适应度值选出α、β、δ三头领导狼。其他ω狼根据公式更新自己的位置即调整自己的超参数组合向领导者靠近。迭代循环重复步骤3和4直到达到最大迭代次数。输出与最终训练GWO结束后输出最优的α狼的位置即最优超参数组合。用这组最优参数重新构建一个CNN模型并在完整的训练集上进行充分训练更多轮次最后在独立的测试集上评估最终性能。这个架构将GWO的全局搜索能力和CNN的学习能力完美结合形成了一个自动化的调参流水线。3. 代码核心模块拆解与实现要点拿到“CNN_GWO附Matlab代码.rar”并解压后你通常会看到几个关键的.m文件。我们来逐一拆解每个文件应该实现什么功能以及里面的关键细节。3.1 主脚本文件 (main.m或CNN_GWO.m)这是整个项目的入口负责串联整个流程。一个结构清晰的主脚本应该包含以下部分%% 1. 清空环境与加载数据 clear; close all; clc; addpath(genpath(./utils)); % 添加工具函数路径 % 加载数据集例如经典的MNIST或CIFAR-10或者是你的自定义数据 % 假设数据已处理为trainImages, trainLabels, valImages, valLabels, testImages, testLabels load(preprocessed_data.mat); %% 2. 设置GWO算法参数 SearchAgents_no 30; % 狼群数量候选解数量 Max_iteration 50; % 最大迭代次数 dim 5; % 优化问题的维度即超参数个数 % 定义每个超参数的上下界 [lb, ub] % 例如param1: 学习率对数范围[1e-4, 1e-1] - 实际搜索log10空间 % param2: 卷积核数量1 [4, 32] % param3: 卷积核数量2 [8, 64] % param4: 全连接层神经元数 [32, 256] % param5: Dropout率 [0.1, 0.7] lb [log10(1e-4), 4, 8, 32, 0.1]; ub [log10(1e-1), 32, 64, 256, 0.7]; %% 3. 调用GWO优化函数 [Best_score, Best_pos, GWO_cg_curve] GWO(SearchAgents_no, Max_iteration, lb, ub, dim, ... (x) fitnessFunction(x, trainImages, trainLabels, valImages, valLabels)); %% 4. 解码最优参数并训练最终模型 % Best_pos是GWO找到的最优位置向量需要解码成实际参数 best_lr 10^Best_pos(1); % 学习率从对数空间转换回来 best_conv1 round(Best_pos(2)); best_conv2 round(Best_pos(3)); best_fc round(Best_pos(4)); best_dropout Best_pos(5); fprintf(最优参数找到学习率%f, Conv1%d, Conv2%d, FC%d, Dropout%f\n, ... best_lr, best_conv1, best_conv2, best_fc, best_dropout); % 使用最优参数构建并训练最终CNN模型 finalModel createCNN(best_lr, best_conv1, best_conv2, best_fc, best_dropout); options trainingOptions(adam, ... InitialLearnRate, best_lr, ... MaxEpochs, 100, ... % 最终训练可以用更多轮次 ValidationData, {valImages, valLabels}, ... Plots, training-progress); [trainedNet, info] trainNetwork(trainImages, trainLabels, finalModel.layers, options); %% 5. 在测试集上评估最终模型 predictedLabels classify(trainedNet, testImages); accuracy sum(predictedLabels testLabels) / numel(testLabels); fprintf(最终测试集准确率%.2f%%\n, accuracy * 100); %% 6. 可视化结果 figure; plot(GWO_cg_curve, LineWidth, 2); xlabel(迭代次数); ylabel(最佳适应度验证集准确率); title(GWO收敛曲线); grid on;关键点解析参数边界lb, ub的设置至关重要。边界设得太宽搜索空间太大收敛慢设得太窄可能错过全局最优。需要基于先验知识或初步实验来设定。适应度函数fitnessFunction是GWO和CNN之间的桥梁也是整个项目的核心我们下面会详细讲。最终训练GWO迭代中的每次训练是为了快速评估参数好坏所以epoch可以设得少。但用找到的最优参数做最终模型时应该用更多的epoch和完整数据充分训练。3.2 适应度函数 (fitnessFunction.m)这个函数是GWO算法评估每只“狼”好坏的唯一标准。它的输入是一个超参数向量X输出是一个标量fitness适应度值这里我们最大化验证集准确率。function fitness fitnessFunction(X, trainImg, trainLbl, valImg, valLbl) % X: 当前狼的位置向量即一组超参数 % 1. 解码参数 learnRate 10^X(1); % 学习率对数空间搜索 numFilters1 round(X(2)); % 第一层卷积核数取整 numFilters2 round(X(3)); % 第二层卷积核数取整 fcUnits round(X(4)); % 全连接层神经元数取整 dropoutProb X(5); % Dropout率 % 2. 根据参数动态构建CNN层 layers [ imageInputLayer([28 28 1]) % 假设是28x28灰度图 convolution2dLayer(3, numFilters1, Padding, same) batchNormalizationLayer reluLayer maxPooling2dLayer(2, Stride, 2) convolution2dLayer(3, numFilters2, Padding, same) batchNormalizationLayer reluLayer maxPooling2dLayer(2, Stride, 2) fullyConnectedLayer(fcUnits) reluLayer dropoutLayer(dropoutProb) fullyConnectedLayer(10) % 假设10分类 softmaxLayer classificationLayer ]; % 3. 设置训练选项快速评估epoch较少 options trainingOptions(adam, ... InitialLearnRate, learnRate, ... MaxEpochs, 20, ... % GWO评估阶段为了速度epoch设少点 MiniBatchSize, 128, ... ValidationData, {valImg, valLbl}, ... ValidationFrequency, 30, ... Verbose, false, ... % 关闭训练过程输出避免刷屏 ExecutionEnvironment, auto); % 自动选择CPU/GPU % 4. 训练网络这里可以加入try-catch防止某些极端参数导致训练崩溃 try net trainNetwork(trainImg, trainLbl, layers, options); % 5. 在验证集上预测并计算准确率作为适应度 predictedLabels classify(net, valImg); fitness sum(predictedLabels valLbl) / numel(valLbl); catch ME % 如果训练出错如内存不足、参数不合理赋予一个很差的适应度 warning(参数组合 [%s] 训练失败: %s, num2str(X), ME.message); fitness 0; % 或一个很小的值如0.001 end end实操心得与避坑指南try-catch的必要性在GWO搜索中某些随机的超参数组合比如学习率极大、卷积核数量为0可能导致trainNetwork函数崩溃从而使整个优化过程中断。用try-catch包裹训练过程给失败组合一个极低的适应度能保证GWO算法稳定运行下去。评估阶段的“轻量级”训练在适应度函数里MaxEpochs不要设得和最终训练一样多。目的是用较少的计算量快速区分参数的好坏。通常10-20个epoch足以看出趋势。离散参数的处理卷积核数量、神经元数量必须是正整数。GWO搜索的是连续空间所以需要用round()函数进行取整。也可以使用floor()或ceil()但round()更符合四舍五入的直觉。学习率的对数空间搜索学习率通常跨越几个数量级如1e-5到1e-1。直接在原始尺度上均匀搜索会导致算法把大部分时间花在数值较大的区域。对学习率取对数log10在log10(lr)这个维度上进行均匀搜索再通过10^X转换回来这样搜索更高效、更合理。3.3 GWO算法实现 (GWO.m)这是灰狼优化算法的标准Matlab实现。你需要理解其更新公式并能将其适配到我们的超参数优化问题上。function [Alpha_score, Alpha_pos, Convergence_curve] GWO(SearchAgents_no, Max_iter, lb, ub, dim, fobj) % 初始化Alpha, Beta, Delta狼的位置和分数 Alpha_pos zeros(1, dim); Alpha_score inf; % 对于最小化问题这里应为-inf最大化问题。我们约定fobj返回准确率越大越好所以这里先初始化为负无穷。 Alpha_score -inf; Beta_pos zeros(1, dim); Beta_score -inf; Delta_pos zeros(1, dim); Delta_score -inf; % 初始化狼群位置 Positions initialization(SearchAgents_no, dim, ub, lb); Convergence_curve zeros(1, Max_iter); % 主循环 for iter 1:Max_iter for i 1:size(Positions, 1) % 1. 边界检查确保狼的位置在搜索空间内 Flag4ub Positions(i, :) ub; Flag4lb Positions(i, :) lb; Positions(i, :) (Positions(i, :) .* (~(Flag4ub Flag4lb))) ub .* Flag4ub lb .* Flag4lb; % 2. 计算当前狼的适应度 fitness fobj(Positions(i, :)); % 3. 更新Alpha, Beta, Delta狼 if fitness Alpha_score Alpha_score fitness; % 更新最佳分数 Alpha_pos Positions(i, :); % 更新最佳位置 end if fitness Alpha_score fitness Beta_score Beta_score fitness; Beta_pos Positions(i, :); end if fitness Alpha_score fitness Beta_score fitness Delta_score Delta_score fitness; Delta_pos Positions(i, :); end end % 4. 计算收敛因子a从2线性递减到0 a 2 - iter * (2 / Max_iter); % 5. 更新所有omega狼的位置 for i 1:size(Positions, 1) for j 1:dim r1 rand(); r2 rand(); A1 2 * a * r1 - a; % 公式中的A系数 C1 2 * r2; % 公式中的C系数 D_alpha abs(C1 * Alpha_pos(j) - Positions(i, j)); X1 Alpha_pos(j) - A1 * D_alpha; r1 rand(); r2 rand(); A2 2 * a * r1 - a; C2 2 * r2; D_beta abs(C2 * Beta_pos(j) - Positions(i, j)); X2 Beta_pos(j) - A2 * D_beta; r1 rand(); r2 rand(); A3 2 * a * r1 - a; C3 2 * r2; D_delta abs(C3 * Delta_pos(j) - Positions(i, j)); X3 Delta_pos(j) - A3 * D_delta; % 新位置是Alpha, Beta, Delta引导位置的平均值 Positions(i, j) (X1 X2 X3) / 3; end end Convergence_curve(iter) Alpha_score; fprintf(迭代 %d / %d 最佳适应度 %f \n, iter, Max_iter, Alpha_score); end end % 种群初始化函数 function Positions initialization(SearchAgents_no, dim, ub, lb) Boundary_no size(ub, 2); % 边界数量应等于dim Positions zeros(SearchAgents_no, dim); for i 1:SearchAgents_no for j 1:dim Positions(i, j) lb(j) (ub(j) - lb(j)) * rand(); end end end关键公式解读A和C系数A控制狼的探索|A|1时分散搜索与开发|A|1时集中攻击。C是一个随机权重为猎物位置增加随机性有助于在迭代后期跳出局部最优。a从2线性递减到0使得算法前期侧重全局探索后期侧重局部开发。位置更新每只ω狼的新位置由α、β、δ狼的位置共同决定(X1X2X3)/3。这模拟了狼群协作围攻猎物的行为。边界处理在更新狼的位置后必须检查其是否超出预设的lb和ub边界如果超出则将其拉回边界。这是保证搜索在合理空间内进行的关键步骤。4. 项目实战从数据准备到结果分析4.1 数据准备与预处理模块一个鲁棒的模型离不开干净、规范的数据。在Matlab中我们通常需要将数据整理成imageDatastore或4D数组对于图像的形式。这里以MNIST手写数字为例展示一个典型的数据准备脚本data_preprocess.m%% 加载原始数据假设已有MNIST的mat文件包含train_x, train_y, test_x, test_y load(mnist.mat); %% 数据重塑与标准化 % 原始数据可能是784xN的向量需要重塑为28x28x1xN的4D数组 trainImages reshape(train_x, [28, 28, 1, size(train_x, 2)]); testImages reshape(test_x, [28, 28, 1, size(test_x, 2)]); % 将标签转换为分类向量categorical trainLabels categorical(train_y); testLabels categorical(test_y); % 数据标准化将像素值从[0, 255]缩放到[0, 1]有助于训练稳定 trainImages single(trainImages) / 255; testImages single(testImages) / 255; %% 划分训练集和验证集例如80%训练20%验证 numTrain size(trainImages, 4); idx randperm(numTrain); valRatio 0.2; numVal floor(valRatio * numTrain); valIndices idx(1:numVal); trainIndices idx(numVal1:end); valImages trainImages(:, :, :, valIndices); valLabels trainLabels(valIndices); trainImages trainImages(:, :, :, trainIndices); trainLabels trainLabels(trainIndices); %% 保存预处理后的数据 save(preprocessed_data.mat, trainImages, trainLabels, valImages, valLabels, testImages, testLabels, -v7.3); disp(数据预处理完成并已保存。);注意事项验证集的重要性绝对不能使用测试集来指导超参数优化包括GWO的适应度评估否则会导致模型对测试集“过拟合”评估结果不真实。必须从训练集中再独立划分出一部分作为验证集。数据标准化/归一化这是深度学习中的标准操作。对于图像除以255是最简单的方法。也可以计算数据集的均值和标准差进行标准化。这能加速模型收敛。数据存储格式对于非常大的数据集使用imageDatastore是更好的选择它可以动态从磁盘读取数据节省内存。但对于MNIST这种小数据集直接加载到内存中速度更快。4.2 自定义CNN结构生成函数为了让适应度函数更灵活我们可以将CNN结构的创建独立出来形成一个函数createCNN.m。这样主脚本和适应度函数都可以调用它。function layers createCNN(learnRate, numF1, numF2, fcUnits, dropoutProb) % 这是一个简单的两层卷积池化全连接层的CNN模板 % 输入参数学习率卷积核数1卷积核数2全连接单元数dropout率 % 注意此函数仅返回层数组学习率在trainingOptions中设置 layers [ imageInputLayer([28 28 1], Name, input) % 输入层 convolution2dLayer(3, numF1, Padding, same, Name, conv1) batchNormalizationLayer(Name, bn1) reluLayer(Name, relu1) maxPooling2dLayer(2, Stride, 2, Name, pool1) convolution2dLayer(3, numF2, Padding, same, Name, conv2) batchNormalizationLayer(Name, bn2) reluLayer(Name, relu2) maxPooling2dLayer(2, Stride, 2, Name, pool2) fullyConnectedLayer(fcUnits, Name, fc1) reluLayer(Name, relu_fc) dropoutLayer(dropoutProb, Name, dropout) fullyConnectedLayer(10, Name, fc2) % 10分类输出 softmaxLayer(Name, softmax) classificationLayer(Name, output) ]; % 可视化网络结构可选 % analyzeNetwork(layerGraph(layers)); end结构设计经验Padding ‘same’这可以保证卷积后特征图的空间尺寸不变当步长为1时简化了后续层的尺寸计算。对于小尺寸图像如28x28很友好。Batch Normalization (BN)在卷积层和激活函数之间加入BN层几乎是现代CNN的标配。它能稳定训练过程允许使用更大的学习率并有一定正则化效果。实测中加入BN后模型收敛速度和最终性能通常都有提升。Dropout的位置通常放在全连接层之后、最终分类层之前。Dropout在训练时随机“关闭”一部分神经元是防止过拟合的有效手段。注意在测试阶段Dropout层是不起作用的。4.3 运行、调试与结果解读将上述所有文件放在同一工作目录后运行main.m。你会看到命令行窗口输出GWO的迭代过程以及最终的最优参数和测试准确率。如何解读结果GWO收敛曲线这是最重要的诊断工具。一个健康的曲线应该是在迭代初期快速上升然后逐渐趋于平稳。如果曲线一直在剧烈震荡没有明显上升趋势可能意味着狼群数量(SearchAgents_no)太少搜索能力不足。最大迭代次数(Max_iteration)不够算法还没收敛。学习率等参数的搜索范围(lb,ub)设置不合理。最优参数组合记录下GWO找到的最佳参数。你可以用这组参数作为基准进行微调。例如如果最优学习率是0.003你可以尝试0.002和0.004看看是否有进一步提升。最终测试准确率这是模型的最终成绩单。务必与一个基线模型对比。基线模型可以是你手动调的一组“还不错”的参数或者是用默认参数的简单CNN。如果GWO优化后的模型显著优于基线说明优化是有效的。5. 常见问题、优化技巧与扩展方向5.1 实战中遇到的典型问题与解决方案在多次运行这个项目的过程中我踩过不少坑这里总结一下问题现象可能原因解决方案GWO收敛曲线早熟很快平缓但适应度很低1. 狼群数量太少。2. 参数搜索范围(lb,ub)太窄错过了全局最优区。3. 适应度函数中的训练轮次(MaxEpochs)太少无法区分“慢热型”参数。1. 增加SearchAgents_no如从30增加到50。2. 适当放宽参数边界特别是学习率的对数范围。3. 在适应度评估中适当增加MaxEpochs如从20增加到30但会延长单次评估时间。程序运行非常慢1. 狼群数量或迭代次数设置过高。2. 适应度函数中每次训练的数据量太大或epoch太多。3. 没有使用GPU加速。1. 权衡精度与时间适当降低SearchAgents_no和Max_iteration。2. 确保适应度评估是“轻量级”的。可以使用数据子集进行快速评估。3. 在trainingOptions中设置ExecutionEnvironment, gpu并确保Matlab已配置好CUDA。训练过程中出现NaN损失1. 学习率设置过高导致梯度爆炸。2. 数据没有进行归一化/标准化。3. 网络结构太深或不稳定。1. 缩小学习率的搜索上界如从1e-1降到1e-2。2. 检查数据预处理步骤确保输入数据被缩放到了合理范围如[0,1]或[-1,1]。3. 在卷积层后加入BN层或者加入梯度裁剪(GradientThreshold, 1)。最终模型在测试集上过拟合1. GWO优化过程只用了验证集可能验证集和测试集分布有差异或模型容量过大。2. Dropout率搜索到的值偏低。1. 在GWO优化时可以尝试使用K折交叉验证的准确率作为适应度但这会极大增加计算量。更实际的方法是增加数据增强。2. 在createCNN函数中增加L2正则化(l2Regularization)或手动调高Dropout率。Matlab报错“内存不足”1. 一次性将整个数据集加载为4D数组数据太大。2. 狼群数量多同时存在多个网络在内存中。1. 使用imageDatastore和augmentedImageDatastore来流式读取数据。2. 在适应度函数末尾使用clear net等命令及时清理不再需要的变量。在trainingOptions中设置Verbose, false也能减少内存开销。5.2 高级优化技巧当你熟悉基本流程后可以尝试以下技巧进一步提升效果动态参数边界GWO搜索后期可以在当前最优解附近缩小搜索边界进行更精细的局部搜索。混合优化策略将GWO与其他局部搜索算法如拟牛顿法结合。先用GWO进行全局粗搜再用局部搜索算法对找到的最优解进行微调。优化更多超参数除了结构参数还可以将优化器类型Adam vs SGD、动量、L2正则化系数等也纳入GWO的搜索空间。并行计算加速GWO中每只狼的适应度评估是相互独立的。可以使用Matlab的并行计算工具箱parfor循环来并行评估整个狼群能大幅缩短运行时间。注意使用parfor时要确保适应度函数和内部的数据加载是线程安全的。% 在主循环中替换原有的for循环 parfor i 1:size(Positions, 1) % ... 适应度计算 ... end早停机制Early Stopping在适应度函数的训练选项中可以加入ValidationPatience, 5。如果验证集损失在5个epoch内不再下降则停止训练以节省不必要的计算。5.3 项目扩展方向这个“CNNGWO”的框架具有很强的扩展性应用于1D-CNN处理时序信号、文本序列数据。只需将imageInputLayer和convolution2dLayer替换为sequenceInputLayer和convolution1dLayer并调整数据维度即可。结合注意力机制在网络结构中插入SENet、CBAM等注意力模块并将注意力模块的超参数如压缩比也作为GWO的优化对象。多目标优化目前我们只优化了准确率最大化。在实际中我们可能还希望模型更小、推理更快。可以将模型参数量或浮点运算数(FLOPs)作为第二个优化目标使用多目标GWO来寻找帕累托最优解集。迁移学习微调对于小数据集可以固定预训练模型如ImageNet上训练的ResNet的底层特征提取层只优化顶部分类层的超参数和学习率这样搜索空间小收敛快。这个项目提供了一个强大的自动化调参工具箱。它的价值不在于提供一个“放之四海而皆准”的最优网络而在于提供一种方法论和可复现的代码框架让你在面对新的数据集和任务时能够高效地找到属于那个特定任务的最优模型配置。记住没有最好的算法只有最合适的参数。而GWO就是帮你寻找“最合适”的那个智能助手。本文还有配套的精品资源点击获取
网站建设高端定制企业官网