MindSpore模型精度調優實踐

2022-02-03 05:34:37 字數 2160 閱讀 4133

mindspore模型精度調優實踐

引論:在模型的開發過程中,精度達不到預期常常讓人頭疼。為了幫助使用者解決模型除錯調優的問題,為mindspore量身定做了視覺化除錯調優元件:mindinsight。還梳理了針對常見精度問題的除錯調優指南,將以「mindspore模型精度調優實戰」系列文章的形式分享出來,希望能幫助使用者輕鬆定位精度問題,快速優化模型精度。

本文將分析精度問題的常見現象和原因,並給出乙個整體的調優思路。本文分享假設指令碼已經能夠執行並算出loss值。如果指令碼還不能執行,請先參考相關報錯提示進行修改。

精度問題的常見現象和原因

模型精度問題和一般的軟體問題不同,定位週期一般也更長。在通常的程式中,程式輸出和預期不符意味著存在bug(編碼錯誤)。但是對乙個深度學習模型來說,模型精度達不到預期,有著更複雜的原因和更多的可能性。由於模型精度要經過長時間的訓練才能看到最終結果,定位精度問題通常會花費更長的時間。

常見現象

精度問題的直接現象一般體現在loss(模型損失值)和metrics(模型度量指標)上。loss現象一般表現為(1)loss跑飛,出現nan,+/- inf,極大值(2)loss不收斂、收斂慢(3)loss為0等。模型metrics一般表現為模型的accuracy、precision等metric達不到預期。

精度問題的直接現象較容易觀察,借助mindinsight等視覺化工具,還可以在梯度、權重、啟用值等張量上觀察到更多現象。常見現象如:(1)梯度消失(2)梯度**(3)權重不更新(4)權重變化過小(5)權重變化過大(6)啟用值飽和等。

常見原因

有果必有因,在現象的背後,是精度問題的原因,可以簡單分為超參問題、模型結構問題、資料問題、演算法設計問題等類別:

超參問題

例如學習率設定不合理,

loss_scale引數不合理,

權重初始化引數不合理等。

模型結構問題

例如運算元使用錯誤(使用的運算元不適用於目標場景),

權重共享錯誤(共享了不應共享的權重),

權重凍結錯誤(凍結了不應凍結的權重),

節點連線錯誤(應該連線到計算圖中的block未連線),

loss函式錯誤,

優化器演算法錯誤(如果自行實現了優化器)等。

資料問題

例如資料缺失值過多,

每個類別中的樣本數目不均衡,

資料中存在異常值,

未對資料進行歸一化,

資料處理引數不正確等。

演算法設計問題

演算法本身設計有缺陷導致精度無法達到預期。

相同現象存在多個可能原因導致精度問題定位難

以loss不收斂為例(下圖),任何可能導致啟用值飽和、梯度消失、權重更新不正確的問題都可能導致loss不收斂。例如錯誤地凍結了部分權重,使用的啟用函式和資料不匹配(使用relu啟用函式,輸入值全部小於0),學習率過小等原因都是loss不收斂的可能原因。

圖 1 相同現象存在多個可能原因導致精度問題定位難

調優思路概述

圖 2精度問題調優思路概述

針對上述精度問題的現象和原因,常用的幾個調優思路如下:檢查**和超參、檢查模型結構、檢查輸入資料、檢查loss曲線。若上述思路都未發現問題,可以讓訓練執行到最後,檢查精度(主要是模型metrics)是否達到預期。

其中,檢查模型結構和超參重在檢查模型的靜態特徵;檢查輸入資料和loss曲線則是將靜態特徵和動態訓練現象結合檢查;檢查精度是否達到預期則是對整體精度調優過程重新審視,並考慮調整超參、解釋模型、優化演算法等調優手段。

為了幫助使用者高效實施上述的精度調優思路,mindinsight提供了配套的能力,如下圖。後面會展開介紹精度調優的準備工作,每個調優思路的細節,以及如何使用mindinsight的功能實踐這些調優思路。

圖 3精度問題定位思路及mindinsight對應能力

Task3 模型調優

使用網格搜尋法對7個模型進行調優 調參時採用五折交叉驗證的方式 並進行模型評估 import pandas as pd import numpy as np from sklearn.model selection import gridsearchcv from sklearn.model sel...

模型選擇與調優(KNN)

一 交叉驗證 cross validation 將拿到的訓練資料,分為訓練和驗證集。以下圖為例 將資料分成4份,其中乙份作為驗證集。然後經過4次 組 的測試,每次都更換不同的驗證集。即得到4組模型的結果,取平均值作為最終結果。又稱4折交叉驗證。二 超引數搜尋 網格搜尋 通常情況下,有很多引數是需要手...

決策樹模型調優

現在我們來用一些方法進一步提高準確率。fromsklearn.pipelineimportpipeline fromsklearn.decompositionimportpca fromsklearn.grid searchimportgridsearchcv 利用主成分分析嘗試提高準確率 n co...