測(cè):MATLAB實(shí)現(xiàn)與避坑指南)
簡(jiǎn)介這份資源面向光伏發(fā)電預(yù)測(cè)方向的學(xué)習(xí)者與工程人員提供一套基于遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的光伏出力預(yù)測(cè)MATLAB實(shí)現(xiàn)。針對(duì)光伏出力受輻照度、溫度、風(fēng)速等氣象因素影響、傳統(tǒng)BP網(wǎng)絡(luò)易陷入局部最優(yōu)的問題代碼用GA對(duì)網(wǎng)絡(luò)權(quán)值與閾值進(jìn)行全局尋優(yōu)以提升預(yù)測(cè)精度與泛化能力。壓縮包共1個(gè)文件為單個(gè).m腳本大小約1.23MB核心邏輯涵蓋數(shù)據(jù)預(yù)處理、BP網(wǎng)絡(luò)結(jié)構(gòu)定義、遺傳算法種群初始化與選擇交叉變異、模型訓(xùn)練、出力預(yù)測(cè)及MSE、MAE等誤差評(píng)估環(huán)節(jié)結(jié)構(gòu)緊湊便于直接運(yùn)行與二次修改。目前已有1200人學(xué)習(xí)下載適合具備一定MATLAB與神經(jīng)網(wǎng)絡(luò)基礎(chǔ)、需要完成課程設(shè)計(jì)或科研復(fù)現(xiàn)的讀者參考可據(jù)此理解GA-BP混合建模流程并遷移到風(fēng)電、負(fù)荷等同類時(shí)序預(yù)測(cè)任務(wù)中。1. 光伏出力預(yù)測(cè)為什么總在午后翻車GA_BP 能解決什么做過光伏電站運(yùn)維的人都有個(gè)共同體會(huì)早上和傍晚的功率曲線還算聽話一到中午前后就“玄學(xué)”起來——云層飄過、組件溫度飆升、逆變器限功率功率曲線像心電圖一樣上下亂跳。用一條平滑的 BP 神經(jīng)網(wǎng)絡(luò)去擬合這種曲線結(jié)果往往是晴天準(zhǔn)、多云崩午后誤差直接翻倍。GA_BPprediction 這個(gè)方向要解決的正是 BP 神經(jīng)網(wǎng)絡(luò)在光伏出力預(yù)測(cè)里最容易踩的兩個(gè)坑初始權(quán)值隨機(jī)導(dǎo)致訓(xùn)練結(jié)果不穩(wěn)定以及容易陷進(jìn)局部極小值出不來。遺傳算法GA在這里扮演的角色就是替 BP 網(wǎng)絡(luò)先“探路”把一組靠譜的初始權(quán)值和閾值搜出來再交給 BP 做精細(xì)調(diào)優(yōu)。這套組合特別適合做超短期光伏功率預(yù)測(cè)——也就是未來 15 分鐘到 4 小時(shí)這個(gè)尺度因?yàn)檫@段時(shí)間里云層移動(dòng)、溫度變化的影響最劇烈對(duì)模型初始狀態(tài)也最敏感。如果你手頭有歷史功率、輻照度、溫度數(shù)據(jù)又想在 MATLAB 里跑出一套能復(fù)現(xiàn)、能調(diào)參、能解釋的預(yù)測(cè)流程這篇筆記就是按這個(gè)思路展開的。2. GA_BP 預(yù)測(cè)光伏出力的原理與數(shù)據(jù)準(zhǔn)備2.1 BP 神經(jīng)網(wǎng)絡(luò)在光伏預(yù)測(cè)里的結(jié)構(gòu)怎么定光伏出力預(yù)測(cè)本質(zhì)上是一個(gè)非線性回歸問題輸入是歷史功率、輻照度、溫度、濕度、風(fēng)速等氣象與運(yùn)行變量輸出是未來某個(gè)時(shí)刻的功率值。BP 神經(jīng)網(wǎng)絡(luò)通過多層感知機(jī)來逼近這個(gè)映射關(guān)系。常見做法是三層結(jié)構(gòu)輸入層節(jié)點(diǎn)數(shù)等于特征維度一個(gè)隱含層輸出層一個(gè)節(jié)點(diǎn)。隱含層節(jié)點(diǎn)數(shù)沒有鐵律我一般按經(jīng)驗(yàn)公式m sqrt(n l) a來試其中 n 是輸入節(jié)點(diǎn)數(shù)l 是輸出節(jié)點(diǎn)數(shù)a 取 1 到 10 之間的整數(shù)。比如輸入 6 個(gè)特征、輸出 1 個(gè)功率值隱含層可以先從 8 到 12 之間試。這里有個(gè)容易被忽略的點(diǎn)光伏功率是白天有、晚上無的“半日型”序列如果直接把全天數(shù)據(jù)丟進(jìn)去訓(xùn)練網(wǎng)絡(luò)會(huì)花大量精力去擬合夜間零值白天的高波動(dòng)段反而學(xué)不好。常見做法是只取輻照度大于某個(gè)閾值比如 50 W/m2的時(shí)段做訓(xùn)練或者把夜間樣本降采樣。這個(gè)預(yù)處理步驟對(duì)最終誤差的影響往往比換優(yōu)化算法還大。2.2 遺傳算法為什么能補(bǔ) BP 的短板BP 網(wǎng)絡(luò)用梯度下降法更新權(quán)值本質(zhì)上是沿著誤差曲面往下滾。問題在于這個(gè)曲面不是只有一個(gè)谷底隨機(jī)初始化的權(quán)值如果落在某個(gè)小坑里網(wǎng)絡(luò)就再也爬不出來了。遺傳算法不依賴梯度它把一組權(quán)值和閾值編碼成“個(gè)體”通過選擇、交叉、變異來搜索整個(gè)空間。用在 BP 之前就是先讓 GA 跑若干代找出一組適應(yīng)度最好的初始權(quán)值再讓 BP 從這組權(quán)值出發(fā)做精細(xì)訓(xùn)練。適應(yīng)度函數(shù)通常取訓(xùn)練集上的均方誤差倒數(shù)或者直接用預(yù)測(cè)誤差的某種變換。GA 的參數(shù)里種群規(guī)模一般取 20 到 50進(jìn)化代數(shù) 50 到 200交叉概率 0.6 到 0.9變異概率 0.01 到 0.1。這些值不是拍腦袋種群太小容易早熟太大計(jì)算量吃不消變異概率太高會(huì)退化成隨機(jī)搜索太低又跳不出局部最優(yōu)。我一般先用種群 30、代數(shù) 100、交叉 0.7、變異 0.05 跑一輪看收斂曲線再微調(diào)。2.3 數(shù)據(jù)清洗與特征工程的最小可復(fù)現(xiàn)步驟拿到原始數(shù)據(jù)后別急著往網(wǎng)絡(luò)里灌。光伏數(shù)據(jù)常見的臟東西包括逆變器通訊中斷導(dǎo)致的整段缺失、傳感器漂移造成的輻照度異常高值、限電時(shí)段的功率被強(qiáng)行壓平。這些樣本如果混進(jìn)訓(xùn)練集網(wǎng)絡(luò)會(huì)學(xué)到錯(cuò)誤的映射。一個(gè)可復(fù)現(xiàn)的清洗流程是這樣的先按時(shí)間戳排序剔除重復(fù)記錄然后對(duì)功率和輻照度做物理上下限截?cái)啾热绻β什荒艹^裝機(jī)容量輻照度不能超過太陽常數(shù)對(duì)應(yīng)的地面值接著用滑動(dòng)窗口檢測(cè)突變點(diǎn)窗口取 5 到 10 個(gè)點(diǎn)如果某點(diǎn)與窗口均值的偏差超過 3 倍標(biāo)準(zhǔn)差就標(biāo)記為可疑最后對(duì)缺失段短于 3 個(gè)點(diǎn)的用線性插值補(bǔ)長(zhǎng)于 3 個(gè)點(diǎn)的直接整段剔除不要硬補(bǔ)。特征方面除了直接的歷史功率和氣象量我一般會(huì)加兩個(gè)衍生特征一個(gè)是“晴空指數(shù)”即實(shí)際輻照度與理論晴空輻照度的比值它能反映云層遮擋程度另一個(gè)是功率的滑動(dòng)平均值窗口取 4 到 8 個(gè)點(diǎn)用來給網(wǎng)絡(luò)提供短期趨勢(shì)信息。這兩個(gè)特征加進(jìn)去多云天的預(yù)測(cè)誤差通常能降一截。% 數(shù)據(jù)清洗與特征構(gòu)造示例 raw readtable(pv_data.csv); raw sortrows(raw, timestamp); raw rmmissing(raw); % 剔除含 NaN 的行 % 物理限幅 cap 5000; % 裝機(jī)容量 kW raw.power(raw.power cap) cap; raw.power(raw.power 0) 0; raw.irradiance(raw.irradiance 0) 0; % 滑動(dòng)窗口突變檢測(cè) win 6; thresh 3; mu movmean(raw.power, win); sigma movstd(raw.power, win); outlier abs(raw.power - mu) thresh * sigma; raw.power(outlier) mu(outlier); % 用窗口均值替換可疑點(diǎn) % 晴空指數(shù) raw.clear_sky_index raw.irradiance ./ (raw.irradiance_theoretical eps); % 功率滑動(dòng)平均 raw.power_ma movmean(raw.power, 6); % 只保留白天樣本 day_idx raw.irradiance 50; data raw(day_idx, :);這段代碼里movmean和movstd的窗口長(zhǎng)度win控制平滑程度窗口越大對(duì)突變?cè)讲幻舾械矔?huì)把真實(shí)的快速爬坡當(dāng)成異常。thresh取 3 是統(tǒng)計(jì)上的常用值如果數(shù)據(jù)噪聲大可以放寬到 4。clear_sky_index分母加eps是防止除零。最后只保留輻照度大于 50 的樣本這個(gè)閾值可以根據(jù)當(dāng)?shù)貧夂蛘{(diào)整陰天多的地區(qū)可以降到 30。3. MATLAB 里把 GA_BP 跑通從權(quán)值編碼到訓(xùn)練腳本3.1 權(quán)值與閾值的編碼方式在 MATLAB 里用 GA 優(yōu)化 BP 初始權(quán)值第一步是把網(wǎng)絡(luò)的所有權(quán)值和閾值拉成一條向量。假設(shè)網(wǎng)絡(luò)結(jié)構(gòu)是 6-10-1那么輸入層到隱含層的權(quán)值有 6×1060 個(gè)隱含層到輸出層有 10×110 個(gè)隱含層閾值 10 個(gè)輸出層閾值 1 個(gè)總共 81 個(gè)參數(shù)。GA 的每個(gè)個(gè)體就是這 81 維空間里的一個(gè)點(diǎn)。編碼時(shí)要注意權(quán)值的范圍。如果直接用無界實(shí)數(shù)GA 搜索空間太大收斂慢。常見做法是限制在 [-1, 1] 或 [-2, 2] 之間因?yàn)?BP 網(wǎng)絡(luò)在訓(xùn)練前通常會(huì)對(duì)輸入做歸一化權(quán)值本身不會(huì)需要特別大的量級(jí)。MATLAB 的ga函數(shù)可以通過lb和ub參數(shù)設(shè)置下界和上界。% 網(wǎng)絡(luò)結(jié)構(gòu)參數(shù) n_input 6; n_hidden 10; n_output 1; % 參數(shù)總數(shù) n_params n_input * n_hidden n_hidden * n_output n_hidden n_output; % GA 邊界 lb -2 * ones(1, n_params); ub 2 * ones(1, n_params);這里n_params的計(jì)算要仔細(xì)漏掉閾值項(xiàng)是新手常犯的錯(cuò)誤。lb和ub取 ±2 是一個(gè)保守起點(diǎn)如果訓(xùn)練后發(fā)現(xiàn)權(quán)值普遍接近邊界說明范圍設(shè)窄了可以放寬到 ±3 再跑。3.2 適應(yīng)度函數(shù)怎么寫才不翻車適應(yīng)度函數(shù)是 GA 和 BP 之間的橋梁。它接收一個(gè)參數(shù)向量把它還原成權(quán)值和閾值賦給 BP 網(wǎng)絡(luò)然后用訓(xùn)練集跑一遍前向傳播算出誤差返回適應(yīng)度值。這里有個(gè)效率問題如果每次評(píng)估都重新創(chuàng)建網(wǎng)絡(luò)、重新訓(xùn)練計(jì)算量會(huì)大到無法接受。正確做法是只做前向傳播不調(diào)用train因?yàn)?GA 階段只需要評(píng)估當(dāng)前權(quán)值下的誤差不需要反向傳播。function fitness ga_fitness(params, inputs, targets, n_input, n_hidden, n_output) % 參數(shù)還原 idx 1; iw reshape(params(idx:idx n_input*n_hidden - 1), n_hidden, n_input); idx idx n_input*n_hidden; lw reshape(params(idx:idx n_hidden*n_output - 1), n_output, n_hidden); idx idx n_hidden*n_output; b1 params(idx:idx n_hidden - 1); idx idx n_hidden; b2 params(idx:idx n_output - 1); % 前向傳播 hidden tansig(iw * inputs b1); output purelin(lw * hidden b2); % 均方誤差 mse mean((output - targets).^2); fitness 1 / (mse eps); % 適應(yīng)度越大越好 end這段代碼里tansig和purelin是 MATLAB 神經(jīng)網(wǎng)絡(luò)工具箱的傳遞函數(shù)分別用于隱含層和輸出層。eps防止除零。注意inputs和targets的維度要匹配inputs是n_input × n_samplestargets是1 × n_samples。如果數(shù)據(jù)沒歸一化這里的誤差會(huì)大得離譜GA 會(huì)誤以為所有個(gè)體都很差所以歸一化要在調(diào)用 GA 之前完成。3.3 用 ga 函數(shù)驅(qū)動(dòng)優(yōu)化并接回 BP 訓(xùn)練MATLAB 的ga函數(shù)調(diào)用格式比較直接把適應(yīng)度函數(shù)句柄、變量個(gè)數(shù)、邊界傳進(jìn)去就行。跑完 GA 之后取返回的最優(yōu)個(gè)體還原成權(quán)值和閾值賦給 BP 網(wǎng)絡(luò)再用train做精細(xì)訓(xùn)練。% 假設(shè) inputs_norm 和 targets_norm 已歸一化 fitness_fun (p) ga_fitness(p, inputs_norm, targets_norm, n_input, n_hidden, n_output); % GA 參數(shù) options optimoptions(ga, ... PopulationSize, 30, ... MaxGenerations, 100, ... CrossoverFraction, 0.7, ... MutationFcn, {mutationadaptfeasible, 0.05}, ... Display, iter); [best_params, best_fitness] ga(fitness_fun, n_params, [], [], [], [], lb, ub, [], options); % 還原最優(yōu)參數(shù) idx 1; iw reshape(best_params(idx:idx n_input*n_hidden - 1), n_hidden, n_input); idx idx n_input*n_hidden; lw reshape(best_params(idx:idx n_hidden*n_output - 1), n_output, n_hidden); idx idx n_hidden*n_output; b1 best_params(idx:idx n_hidden - 1); idx idx n_hidden; b2 best_params(idx:idx n_output - 1); % 構(gòu)建 BP 網(wǎng)絡(luò) net feedforwardnet(n_hidden); net.inputs{1}.processFcns {removeconstantrows, mapminmax}; net.outputs{2}.processFcns {removeconstantrows, mapminmax}; net.layers{1}.transferFcn tansig; net.layers{2}.transferFcn purelin; % 賦初值 net.IW{1,1} iw; net.LW{2,1} lw; net.b{1} b1; net.b{2} b2; % BP 訓(xùn)練 net.trainParam.epochs 1000; net.trainParam.lr 0.01; net.trainParam.goal 1e-5; net.trainParam.showWindow false; [net, tr] train(net, inputs_norm, targets_norm);PopulationSize和MaxGenerations是最影響耗時(shí)的兩個(gè)參數(shù)。30 和 100 的組合在普通筆記本上大概跑幾分鐘到十幾分鐘取決于樣本量。如果趕時(shí)間可以先把代數(shù)降到 50 看趨勢(shì)。CrossoverFraction取 0.7 意味著每代有 70% 的個(gè)體參與交叉剩下的保留到下一代。mutationadaptfeasible是帶自適應(yīng)可行性的變異函數(shù)后面的 0.05 是初始變異率。BP 訓(xùn)練階段lr取 0.01 是保守值如果收斂太慢可以提到 0.05但再高容易震蕩。4. 避坑與排查GA_BP 光伏預(yù)測(cè)最常見的 5 個(gè)翻車點(diǎn)4.1 現(xiàn)象GA 收斂曲線早早走平BP 訓(xùn)練后誤差依然很大原因GA 的搜索空間被邊界卡死了。如果lb和ub設(shè)得太窄比如只給 ±0.5而實(shí)際需要的權(quán)值量級(jí)在 1.5 左右GA 根本找不到可行解只能在一堆被截?cái)嗟闹道锾粢粋€(gè)相對(duì)好的適應(yīng)度自然上不去。解決先跑一輪 GA看最優(yōu)個(gè)體的參數(shù)分布。如果有大量參數(shù)貼在邊界上就把邊界放寬一倍再跑。另一個(gè)可能是種群多樣性不足把PopulationSize從 30 提到 50或者把變異率從 0.05 提到 0.1。4.2 現(xiàn)象訓(xùn)練集誤差很小測(cè)試集誤差大得離譜原因過擬合。光伏數(shù)據(jù)本身噪聲大如果網(wǎng)絡(luò)容量過大隱含層節(jié)點(diǎn)太多或者訓(xùn)練輪數(shù)太多網(wǎng)絡(luò)會(huì)把噪聲也學(xué)進(jìn)去。GA 階段如果適應(yīng)度函數(shù)只盯著訓(xùn)練誤差也會(huì)選出過度擬合的初始權(quán)值。解決把隱含層節(jié)點(diǎn)數(shù)降下來從 10 降到 6 或 8 試試。BP 訓(xùn)練加早停用驗(yàn)證集監(jiān)控誤差連續(xù)若干輪不下降就停。GA 的適應(yīng)度函數(shù)里可以加一個(gè)正則項(xiàng)比如fitness 1 / (mse lambda * sum(params.^2) eps)lambda取 1e-4 到 1e-3。4.3 現(xiàn)象預(yù)測(cè)曲線整體偏高或偏低像是被平移了原因歸一化沒做對(duì)或者訓(xùn)練集和測(cè)試集用了不同的歸一化參數(shù)。光伏功率的日峰值受季節(jié)影響很大如果訓(xùn)練集只用了夏季數(shù)據(jù)測(cè)試集是冬季網(wǎng)絡(luò)學(xué)到的映射關(guān)系根本不適用。解決歸一化參數(shù)必須從訓(xùn)練集計(jì)算然后應(yīng)用到測(cè)試集。如果數(shù)據(jù)跨季節(jié)要么按季節(jié)分別建模要么在特征里加入日期或太陽高度角信息。mapminmax的ymin和ymax設(shè)成 -1 和 1 還是 0 和 1 影響不大但一定要統(tǒng)一。4.4 現(xiàn)象GA 跑一次一個(gè)結(jié)果沒法復(fù)現(xiàn)原因遺傳算法本身有隨機(jī)性ga函數(shù)默認(rèn)用當(dāng)前時(shí)間做隨機(jī)種子。如果不固定種子每次運(yùn)行的選擇、交叉、變異都不同最優(yōu)個(gè)體自然不一樣。解決在調(diào)用ga之前設(shè)置隨機(jī)種子比如rng(42)。但要注意固定種子只是讓結(jié)果可復(fù)現(xiàn)不代表結(jié)果一定好。更穩(wěn)妥的做法是跑多次 GA取適應(yīng)度最好的那組參數(shù)或者把多次的最優(yōu)個(gè)體做平均。4.5 現(xiàn)象MATLAB 報(bào)錯(cuò)“輸入?yún)?shù)太多”或“維度不一致”原因ga_fitness函數(shù)里的 reshape 順序和參數(shù)還原順序不匹配。比如編碼時(shí)先放了輸入權(quán)值再放輸出權(quán)值解碼時(shí)卻先取輸出權(quán)值維度就對(duì)不上。另一個(gè)常見原因是inputs和targets的轉(zhuǎn)置沒處理好ga_fitness里用了inputs但傳進(jìn)去的已經(jīng)是轉(zhuǎn)置過的。解決在編碼和解碼之間加一個(gè)斷言檢查numel(params)是否等于n_params。inputs統(tǒng)一用n_input × n_samples的格式targets用1 × n_samples在函數(shù)內(nèi)部再轉(zhuǎn)置。調(diào)試時(shí)先把n_hidden設(shè)成 2跑通流程再放大。5. 讓 GA_BP 真正可用的幾個(gè)進(jìn)階技巧5.1 用滾動(dòng)預(yù)測(cè)代替單點(diǎn)預(yù)測(cè)單點(diǎn)預(yù)測(cè)是給一個(gè)輸入出一個(gè)輸出但光伏功率是時(shí)間序列前后時(shí)刻強(qiáng)相關(guān)。更實(shí)用的做法是滾動(dòng)預(yù)測(cè)用過去 4 到 8 個(gè)時(shí)刻的數(shù)據(jù)預(yù)測(cè)下一時(shí)刻然后把預(yù)測(cè)值反饋回去繼續(xù)預(yù)測(cè)下下時(shí)刻。這樣模型能捕捉到爬坡趨勢(shì)而不是孤立地看每個(gè)點(diǎn)。實(shí)現(xiàn)上把輸入特征從“當(dāng)前時(shí)刻的氣象量”改成“過去 N 個(gè)時(shí)刻的功率和氣象量”輸出仍然是下一時(shí)刻功率。N 取 4 到 8 之間太少捕捉不到趨勢(shì)太多引入冗余。滾動(dòng)預(yù)測(cè)的誤差會(huì)累積所以一般只往前滾 4 到 16 步對(duì)應(yīng) 1 到 4 小時(shí)。5.2 分季節(jié)或分天氣類型建模光伏出力的統(tǒng)計(jì)特性隨季節(jié)和天氣類型變化很大。晴天曲線平滑多云天波動(dòng)劇烈雨天整體偏低。用一個(gè)模型通吃所有天氣網(wǎng)絡(luò)會(huì)傾向于學(xué)晴天模式因?yàn)榍缣鞓颖径唷7诸愋徒5乃悸肥窍扔靡粋€(gè)分類器判斷當(dāng)天天氣類型再調(diào)用對(duì)應(yīng)的 GA_BP 模型。分類器可以用簡(jiǎn)單的閾值規(guī)則比如晴空指數(shù)均值大于 0.7 算晴天0.3 到 0.7 算多云小于 0.3 算陰雨。也可以用一個(gè)小的神經(jīng)網(wǎng)絡(luò)做分類。分類型之后每個(gè)模型的訓(xùn)練樣本變少但針對(duì)性更強(qiáng)整體誤差通常能降 10% 到 20%。5.3 用誤差指標(biāo)反向調(diào) GA 參數(shù)GA 的參數(shù)不是拍一次就完事。跑完一輪之后看三個(gè)指標(biāo)訓(xùn)練集 MSE、測(cè)試集 MSE、以及兩者的比值。如果訓(xùn)練 MSE 很小但測(cè)試 MSE 大說明過擬合要降隱含層節(jié)點(diǎn)或加正則。如果兩個(gè)都大說明欠擬合要加節(jié)點(diǎn)或加特征。如果測(cè)試 MSE 波動(dòng)很大說明 GA 搜索不穩(wěn)定要加種群規(guī)?;蚬潭ǚN子多跑幾次。我一般會(huì)做一個(gè)簡(jiǎn)單的參數(shù)掃描表種群代數(shù)交叉率變異率測(cè)試 MSE301000.70.05基準(zhǔn)501000.70.05看是否降302000.70.05看是否降301000.80.1看是否降每次只動(dòng)一個(gè)參數(shù)記錄測(cè)試 MSE找到下降最明顯的方向再細(xì)調(diào)。這個(gè)笨辦法比盲目試參數(shù)靠譜得多。5.4 一個(gè)我踩過的坑別用測(cè)試集調(diào) GA剛開始做的時(shí)候我圖省事直接把測(cè)試集誤差當(dāng)成 GA 的適應(yīng)度。結(jié)果 GA 把測(cè)試集“背”下來了測(cè)試誤差看著很美換一批新數(shù)據(jù)就原形畢露。血淚經(jīng)驗(yàn)是GA 的適應(yīng)度只能用訓(xùn)練集或驗(yàn)證集測(cè)試集必須鎖在抽屜里直到最后評(píng)估才能碰。如果數(shù)據(jù)量實(shí)在少就用交叉驗(yàn)證把訓(xùn)練集分成 K 折輪流做驗(yàn)證取平均適應(yīng)度。5.5 保存模型和參數(shù)別讓工作白費(fèi)MATLAB 的train每次都會(huì)重新初始化一些東西如果不保存關(guān)掉窗口就全沒了。我習(xí)慣在訓(xùn)練結(jié)束后把net、歸一化參數(shù)、GA 最優(yōu)參數(shù)一起存成.mat文件文件名帶上日期和關(guān)鍵參數(shù)比如ga_bp_6_10_1_pop30_gen100_20250101.mat。下次要復(fù)現(xiàn)或者對(duì)比直接load進(jìn)來就行。這個(gè)習(xí)慣幫我省了無數(shù)次重跑的時(shí)間。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取