回覆列表
  • 1 # kevin

    深度學習是機器學習研究中的一個新的領域,其動機在於建立、模擬人腦進行分析學習的神經網路,它模仿人腦的機制來解釋資料,例如影象,聲音和文字。

    剛看到中公聯合中科院推出了深度學習課程你可以瞭解一下

  • 2 # 來顆益達把

    深度學習在搜尋技術,資料探勘,機器學習,機器翻譯,自然語言處理,多媒版體學習,語音,推薦和個性化技術,以及其他相關領域都取得了很多成果。深度學習使機器模仿視權聽和思考等人類的活動,解決了很多複雜的模式識別難題,使得人工智慧相關技術取得了很大進步。對比市面上的同類型課程,大都是侷限在某一品類的專案訓練,專案數量控制在3個左右。《AI深度學習》有6大實戰專案,都是來自於企業的專案實操。學員在學習期間,直面複雜的開發環境,擺脫開源專案理想化開發,更加符合企業真實需求。專案包含“手寫數字識別”“文學作品文字特徵向量化實戰”“基於GAN生成人臉圖片”“基於分散式GAN人臉圖片生成”“基於深度強化學習的迷宮遊戲”“企業級車牌識別”6個專案。推薦可以自己聯絡一下中公優就業資訊詳情,個人認為是非常不錯的

  • 3 # IT小敏同學

    深度學習是什麼?

    對於深度學習要怎麼學習的問題?

    由中科院專家傾力研發並且親自授課。直面行業標準制定者。其次呢我們有真實的企業級專案實戰,直面複雜開發環境。涵蓋行業75%的技術要點,落地領域廣泛。直擊一線大廠人才標準。學完可以考取中科院深度學習證書。

  • 4 # 哥廷根數學學派

    深度學習,就是深層神經網路,僅此而已罷了,直接給你個基於深度學習的心音訊號分類的例子。心音訊號(PCG)是人體重要的生理訊號,攜帶大量生理特徵,但這些微弱訊號的提取極易受到外界的干擾,關於心音訊號處理相關的文章,可參考下面幾篇博士論文,講的非常詳細,因此,不再贅述。

    [1]陳堯. 心音心電訊號處理的神經網路方法[D].四川大學,2021.

    [2]李婷. 基於迴圈平穩訊號理論的心音訊號處理方法研究[D].大連理工大學,2015.

    [3]韓威. 小樣本心音分類方法研究[D].廣東工業大學,2020.

    首先進行心音訊號2分類,即正常與異常分類,首先看一下本次試驗用的GoogLeNet網路結構資訊

    看一下Layers結構

    看下輸入層資訊

    看一下兩類PCG樣本的時域波形

    然後定義連續小波變換的濾波器組

    fb = cwtfilterbank("SignalLength",signalLength,"VoicesPerOctave",12)

    將生成的時頻影象匯入資料資料夾中

    allImages = imageDatastore(fullfile(tempdir,dataDir),... "IncludeSubfolders",true,"LabelSource","foldernames");

    80%的樣本用於訓練,20%的樣本用於測試

    rng default [imgsTrain,imgsValidation] = splitEachLabel(allImages,0.8,"randomized"); disp(["Number of training images: ",num2str(numel(imgsTrain.Files))]); disp(["Number of validation images: ",num2str(numel(imgsValidation.Files))]);

    Number of training images: 1673

    Number of validation images: 419

    看一下PCG訊號CWT時頻譜圖的樣子,首先看一下異常樣本

    再看一下正常常樣本

    設定GoogleNet網路的訓練引數,採用sgdm最佳化演算法,小批次尺寸MiniBatchSize=15,最大迭代次數MaxEpochs=20,初始學習率InitialLearnRate=1e-4。

    options = trainingOptions("sgdm",... "MiniBatchSize",15,... "MaxEpochs",20,... "InitialLearnRate",1e-4,... "ValidationData",imgsValidation,... "ValidationFrequency",10,... "Verbose",false,... "ExecutionEnvironment","gpu",... "Plots","training-progress");

    開始訓練網路

    trainedGN = trainNetwork(imgsTrain,lgraph_2,options);

    進行網路測試

    [YPred,probs] = classify(trainedGN,imgsValidation); accuracy = mean(YPred==imgsValidation.Labels); display(["GoogLeNet Accuracy: ",num2str(accuracy)])

    GoogLeNet Accuracy: 0.89948,GoogLeNet的準確率達到了90%左右,不是很高,因為樣本並不是很多。

    看一下混淆矩陣

    計算一下各個類別的分類指標

    %"異常”類別分類指標 RecallAbnormal = Matrice_confusione.NormalizedValues(1,1)/sum(Matrice_confusione.NormalizedValues(1,:)); PrecisionAbnormal = Matrice_confusione.NormalizedValues(1,1)/sum(Matrice_confusione.NormalizedValues(:,1)); F1Abnormal = harmmean([RecallAbnormal PrecisionAbnormal]); fprintf("RecallAbnormal = %2.3f\nPrecisionAbnormal = %2.3f\nF1Abnormal = %2.3f\n",100*RecallAbnormal,100*PrecisionAbnormal,100*F1Abnormal); %"正常"類別分類指標 RecallNormal = Matrice_confusione.NormalizedValues(2,2)/sum(Matrice_confusione.NormalizedValues(2,:)); PrecisionNormal = Matrice_confusione.NormalizedValues(2,2)/sum(Matrice_confusione.NormalizedValues(:,2)); F1Normal = harmmean([RecallNormal PrecisionNormal]); fprintf("RecallNormal = %2.3f\nPrecisionNormal = %2.3f\nF1Normal = %2.3f\n",100*RecallNormal,100*PrecisionNormal,100*F1Normal);

    RecallAbnormal = 82.470 PrecisionAbnormal = 86.250 F1Abnormal = 84.318 RecallNormal = 93.592 PrecisionNormal = 91.635 F1Normal = 92.603

    因為本例只是個示範,所用的樣本相對於GoogleNet結構並不多,所以分類準確率並不高。

    下面進行心音訊號5分類,即正常normal,主動脈瓣反流 AR,主動脈瓣狹窄AS,二尖瓣反流MR,二尖瓣狹窄MS五類,同樣本例只是個示範,所用的樣本較少,所以分類準確率並不高。看一下5類PCG樣本的時域波形

    然後定義連續小波變換的濾波器組

    fb = cwtfilterbank("SignalLength",signalLength,"VoicesPerOctave",12)

    看一下生成的CWT時頻譜圖

    將生成的時頻影象匯入資料資料夾中

    allImages = imageDatastore(fullfile(tempdir,dataDir),... "IncludeSubfolders",true,"LabelSource","foldernames");

    70%的樣本用於訓練,30%的樣本用於測試

    rng default [imgsTrain,imgsValidation] = splitEachLabel(allImages,0.7,"randomized"); disp(["Number of training images: ",num2str(numel(imgsTrain.Files))]); disp(["Number of validation images: ",num2str(numel(imgsValidation.Files))]);

    設定GoogleNet網路的訓練引數

    options = trainingOptions("sgdm",... "MiniBatchSize",15,... "MaxEpochs",20,... "InitialLearnRate",1e-4,... "ValidationData",imgsValidation,... "ValidationFrequency",10,... "Verbose",false,... "ExecutionEnvironment","gpu",... "Plots","training-progress");

    開始訓練

    trainedGN = trainNetwork(imgsTrain,lgraph_2,options);

    進行影象樣本分類

    [YPred,probs] = classify(trainedGN,imgsValidation); accuracy = mean(YPred==imgsValidation.Labels); display(["GoogLeNet Accuracy: ",num2str(accuracy)])

    GoogLeNet Accuracy: 0.9

    看一下各類別的分類指標

    %"normal" 類別分類指標 RecallNormal = Matrice_confusione.NormalizedValues(5,5)/sum(Matrice_confusione.NormalizedValues(5,:)); PrecisionNormal = Matrice_confusione.NormalizedValues(5,5)/sum(Matrice_confusione.NormalizedValues(:,5)); F1Normal = harmmean([RecallNormal PrecisionNormal]); fprintf("RecallNormal = %2.3f\nPrecisionNormal = %2.3f\nF1Normal = %2.3f\n",100*RecallNormal,100*PrecisionNormal,100*F1Normal); %"AR"類別分類指標 RecallAR = Matrice_confusione.NormalizedValues(1,1)/sum(Matrice_confusione.NormalizedValues(1,:)); PrecisionAR = Matrice_confusione.NormalizedValues(1,1)/sum(Matrice_confusione.NormalizedValues(:,1)); F1AR = harmmean([RecallAR PrecisionAR]); fprintf("RecallAR = %2.3f\nPrecisionAR = %2.3f\nF1AR = %2.3f\n",100*RecallAR,100*PrecisionAR,100*F1AR); % "AS"類別分類指標 RecallAS = Matrice_confusione.NormalizedValues(2,2)/sum(Matrice_confusione.NormalizedValues(2,:)); PrecisionAS = Matrice_confusione.NormalizedValues(2,2)/sum(Matrice_confusione.NormalizedValues(:,2)); F1AS = harmmean([RecallAS PrecisionAS]); fprintf("RecallAS = %2.3f\nPrecisionAS = %2.3f\nF1AS = %2.3f\n",100*RecallAS,100*PrecisionAS,100*F1AS); %"MR"類別分類指標 RecallMR = Matrice_confusione.NormalizedValues(3,3)/sum(Matrice_confusione.NormalizedValues(3,:)); PrecisionMR = Matrice_confusione.NormalizedValues(3,3)/sum(Matrice_confusione.NormalizedValues(:,3)); F1MR = harmmean([RecallMR PrecisionMR]); fprintf("RecallMR = %2.3f\nPrecisionMR = %2.3f\nF1MR = %2.3f\n",100*RecallMR,100*PrecisionMR,100*F1MR); %"MS"類別分類指標 RecallMS = Matrice_confusione.NormalizedValues(4,4)/sum(Matrice_confusione.NormalizedValues(4,:)); PrecisionMS = Matrice_confusione.NormalizedValues(4,4)/sum(Matrice_confusione.NormalizedValues(:,4)); F1MS = harmmean([RecallMS PrecisionMS]); fprintf("RecallMS = %2.3f\nPrecisionMS = %2.3f\nF1MS = %2.3f\n",100*RecallMS,100*PrecisionMS,100*F1MS);

    RecallNormal = 100.000 PrecisionNormal = 100.000 F1Normal = 100.000 RecallAR = 100.000 PrecisionAR = 75.000 F1AR = 85.714 RecallAS = 83.333 PrecisionAS = 100.000 F1AS = 90.909 RecallMR = 80.000 PrecisionMR = 100.000 F1MR = 88.889 RecallMS = 83.333 PrecisionMS = 83.333 F1MS = 83.333

    由於小樣本原因,準確率不是很高。重點來了,更重要的是看看如何進行改進

    改進方向:訊號前處理

    1.可以使用合適的訊號降噪方法,移不變小波去噪方法對於PCG,ECG等訊號來說還是不錯的

    2.根據PCG訊號的波形,可以自適應的構造更合適的小波

    3.使用時頻譜圖更加集中的同步壓縮變換

    在網路選取方面

    GoogLeNet相對於本文樣本來說太大了,同時我並不推薦遷移學習和樣本生成方法,不要問我為什麼

    碼字不易,且行且珍惜

  • 中秋節和大豐收的關聯?
  • 準大學生,喜歡攝影,三千出頭買什麼手機好?