日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习--Matlab使用LSTM长短期记忆网络对负荷进行分类

發布時間:2023/12/10 pytorch 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习--Matlab使用LSTM长短期记忆网络对负荷进行分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

關于LSTM同系列的前一篇文章寫的是利用LSTM網絡對電力負荷進行預測【LSTM預測】,其本質是sequence-to-sequence problems,序列到序列的預測應用。這里做一下sequence-to-label classification problems,序列到標簽的分類應用【LSTM分類】。關于LSTM的網絡特性不再贅述。

本篇博文的具體示例是對給定的電力負荷進行分類,電力負荷數據格式為每日96個數據點的一維時間序列值,每條負荷數據均對應一個類型標簽,總共類別為6類。其他的例子可以參考官網給定的japaneseVowelsTrainData 案例。

負荷數據是某電力公司內部數據,鑒于保密要求,這里僅描述數據格式,負荷數據集不提供。

  • 類別:6
  • 數據長度:96
  • 訓練數據條數:9821
  • 測試數據條數:2456

二、數據格式轉換

首先看一下需要傳到LSTM網絡的訓練參數格式。

trainedNet = trainNetwork(C, Y, layers, options);

它必須從序列輸入層開始,C是一個包含序列或時間序列預測器的元胞數組。C是d行1列,d代表有多少個訓練樣本,每個訓練樣本又包括N行M列,N代表訓練樣本的數據維度,M代表序列長度,y是標簽的分類向量,是categorical類型。

因此,訓練數據應該轉換成元胞數組,訓練數據標簽應該轉換成categorical類型。

2.1 訓練數據格式轉換

代碼如下所示,用XTrain和YTrain來代替上述訓練網絡中的C和Y。

dataStandardlized是原始數據標準化后的數據,dataStandardlizedLable是每條數據對應的類別標簽,num型。獲得XTrain需要通過XTrainData轉換成元胞數組,XTrain每一行是一條負荷訓練樣本數據,即1*96的數據。

YTrain是categorical類別數組,可以通過categorial函數轉換,但是輸入參數時字符元胞數組,因此現將XTrainLabel轉換成字符矩陣,然后再將矩陣轉換成元胞數組,最后轉換成categorical類型。

%提取訓練樣本數據 XTrainSize = 9821; XTrainData = dataStandardlized(1:XTrainSize,:); XTrainLabel = dataStandardlizedLable(1:XTrainSize,:);%XTrain for i = 1:size(XTrainData,1)XTrain{i,1} = XTrainData(i,:); end%YTrain TrainstrLable = num2str(XTrainLabel);% num to str for i = 1:size(XTrainData,1)% str matrix to cellTraincellLable{i,1} = TrainstrLable(i,1); end YTrain = categorical(TraincellLable);%cell to categorical

2.2 測試數據格式轉換

測試數據格式轉換方法與訓練數據格式轉換相同,見代碼。

%提取測試樣本 XTestData = dataStandardlized(1+XTrainSize:end,:); XTestLabel = dataStandardlizedLable(1+XTrainSize:end,:); %XTest for i = 1:size(XTestData,1)XTest{i,1} = XTestData(i,:); end %YTest TeststrLable = num2str(TestLabel);% num to str for i = 1:size(XTestData,1)TestcellLable{i,1} = TeststrLable(i,1);% str matrix to cell end YTest = categorical(TestcellLable);%cell to categorical

三、網絡參數設置

前面講到了TrainNetwork的C和Y,這里描述一下網絡參數?layers和options的具體配置。

3.1 layers

layers用于定義訓練網絡的架構,按照網絡架構的先后,依次填寫到layers的每一行。

首先定義LSTM網絡架構:

  • 將輸入大小指定為序列大小 1(輸入數據的維度,指同一時間下的數據維度)
  • 指定具有 100 個隱含單元的雙向 LSTM 層,并輸出序列的最后一個元素。
  • 指定六個類,包含大小為 1 的全連接層,后跟 softmax 層和分類層。
inputSize = 1; numHiddenUnits = 100; numClasses = 6;layers = [ ...sequenceInputLayer(inputSize)bilstmLayer(numHiddenUnits,'OutputMode','last')fullyConnectedLayer(numClasses)softmaxLayerclassificationLayer]

具體地:??

  • sequenceInputLayer(inputSize):序列輸入層,指定輸入維度
  • bilstmLayer(numHiddenUnits,'OutputMode','last'):雙向LSTM層,指定隱藏節點,輸出模式為‘last’即輸出最后一個分類值
  • fullyConnectedLayer(numClasses):全連接層,指定輸出類別的個數
  • softmaxLayer:這層是輸出各類別分類的的概率
  • classificationLayer:分類層,輸出最后的分類結果,類似于概率競爭投票。
  • 3.2 options

    options用于指定訓練網絡的優化選項,通過調用trainingOptions進行設置。

    此處指定訓練選項:

    • 求解器為 'adam'
    • 梯度閾值為 1,最大輪數為 100。
    • 100作為小批量數。
    • 填充數據以使長度與最長序列相同,序列長度指定為 'longest'。
    • 數據保持按序列長度排序的狀態,不打亂數據。
    • 'ExecutionEnvironment' 指定為 'cpu',設定為'auto'表明使用GPU。
    maxEpochs = 100; miniBatchSize = 100;options = trainingOptions('adam', ...'ExecutionEnvironment','cpu', ...'GradientThreshold',1, ...'MaxEpochs',maxEpochs, ...'MiniBatchSize',miniBatchSize, ...'SequenceLength','longest', ...'Shuffle','never', ...'Verbose',0, ...'Plots','training-progress');

    四、訓練LSTM網絡

    將前面準備好的參數送入訓練網絡,等待訓練結束。

    net = trainNetwork(XTrain,YTrain,layers,options);

    我這里的訓練時間非常長,當然訓練過程與隱藏節點數,訓練數據的維度和訓練次數以及電腦配置有關系,我這里單CPU訓練耗時112分鐘。

    五、利用LSTM網絡進行分類

    利用標準結果和分類結果計算分類的正確率。

    使用classify函數進行分類,同訓練過程一樣,仍然要指定小批量大小為100,指定組內數據按照最長的數據填充。

    miniBatchSize = 100; YPred = classify(net,XTest, ...'SequenceLength','longest','MiniBatchSize',miniBatchSize); %計算分類準確度 acc = sum(YPred == YTest)./numel(YTest)

    可以看到分類精度達到92%,還是很不錯了。

    ------分享知識,讓人愉悅,原創博文,支持請點贊。

    總結

    以上是生活随笔為你收集整理的深度学习--Matlab使用LSTM长短期记忆网络对负荷进行分类的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。