操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    計算機視覺life”,選擇“星標”

    快速獲得最新干貨

    作者丨黃星源、奉現

    來源丨,文章僅用于學術分享。

    導讀

    本文從構建數據驗證集、模型訓練、模型加載和模型調參四個部分對深度學習中模型訓練的全流程進行講解。

    本文從構建數據驗證集、模型訓練、模型加載和模型調參四個部分對深度學習中模型訓練的全流程進行講解。

    一個成熟合格的深度學習訓練流程至少具備以下功能:在訓練集上進行訓練;在驗證集上進行驗證;模型可以保存最優的權重,并讀取權重;記錄下訓練集和驗證集的精度,便于調參。

    本文CNN模型構建參考:

    數據及背景

    構建驗證集

    機器學習模型(特別是深度學習模型)的訓練過程中,模型是非常容易過擬合的。深度學習模型在不斷的訓練過程中訓練誤差會逐漸降低,但測試誤差的走勢則不一定。

    在模型的訓練過程中,模型只能利用訓練數據來進行訓練,并不能接觸到測試集上的樣本,故需要構建驗證數據集對模型進行驗證。

    過擬合與欠擬合

    擬合():就是說這個曲線能不能很好的描述某些樣本,并且有比較好的泛化能力。

    欠擬合():模型沒有很好地捕捉到數據特征,不能夠很好地擬合數據,或者是模型過于簡單無法擬合或區分樣本。

    防止過擬合方法

    正則化方法。正則化方法包括L0正則、L1正則和L2正則,而正則一般是在目標函數之后加上對于的范數。但是在機器學習中一般使用L2正則。

    數據增強(Data ),增大數據的訓練量,還有一個原因就是我們用于訓練的數據量太小導致的,訓練數據占總數據的比例過小。

    重新清洗數據,導致過擬合的一個原因也有可能是數據不純導致的,如果出現了過擬合就需要我們重新清洗數據。

    提前終止法(Early ),對模型進行訓練的過程即是對模型的參數進行學習更新的過程,這個參數學習的過程往往會用到一些迭代方法,如梯度下降( )學習算法。提前終止法便是一種迭代次數截斷的方法來防止過擬合的方法,即在模型對訓練數據集迭代收斂之前停止迭代來防止過擬合。

    丟棄法()。這個方法在神經網絡里面很常用。丟棄法是中提出的一種方法,通俗一點講就是丟棄法在訓練的時候讓神經元以一定的概率不工作。具體看下圖:

    左側為全連接網絡,右側的網絡以 0.5 的概率丟棄神經元。輸出層并沒有應用

    方法1:L1正則化

    在原始的代價函數后面加上一個L1正則化項,即全部權重 的絕對值的和, 再乘以 (這里不像 正 則化項那樣, 須要再乘以 )。

    先計算導數:

    上式中 表示 的符號, 那么權重 的更新規則為:

    比原始的更新規則多出了 這一項。當 為正時, , 則更新后的 變小; 當 為負時, , 則更新后的 變大 因 此它的效果就是讓 往 0 靠, 使網絡中的權重盡可能為 0 , 也就相當于減小了網絡復雜度, 防止過擬合。

    另外, 上面沒有提到一個問題, 當 為 0 時怎么辦? 當 等于 0 時, 是不可導的。所以我們僅僅能依照原始的末經正則化的方法去更新 , 這就相當于去掉 這一項, 所以我們能夠規定 , 這樣就把 的情況也統一進來了。(編程時, 令

    L2正則化就是在代價函數后面再加上一個正則化項:

    前一項代表原始的代價函數, 后面那一項就是L2正則化項。它是這樣來的:全部參數 的平方和, 除以訓練集的樣本大小 。

    機器學習防止過擬合_決策樹如何防止過擬合_防止過擬合

    就是正則項系數, 權衡正則項與 項的比重。另外另一個系數 經常會看到, 主要是為了 后面求導的結果方便, 后面那一項求導會產生一個2,與 相乘剛好湊整。L2正則化項是怎么避免過 擬合的呢? 我們推導一下看看, 先求導:

    能夠發現 正則化項對 的更新沒有影響, 可是對于 的更新有影響:

    在不使用 正則化時。求導結果中 前系數為 1, 經變化后 前面系數為 , 由于 、 、 都是正的。所以 小于1, 它的效果是減小 , 這也就是權重衰減 ( decay)的由來。

    當然考慮到后面的導數項, 終于的值可能增大也可能減小。

    另外, 必須提一下, 對于基于mini-batch的隨機梯度下降, 和 更新的公式跟上面給出的有點不 同:

    對照上面參數 的更新公式。能夠發現后面那一項變了, 變成全部導數加和, 乘以 再除以 是 一個mini-batch中樣本的個數。

    在此我們僅僅是解釋了L2正則化項有讓 變 小 的效果, 可是還沒解釋為什么 “變小”能夠防過擬合?

    一個所謂“顯而易見”的解釋就是:更小的權值 ,從某種意義上說,表示網絡的復雜度更低,對數據的擬合剛剛好(這個法則也叫做奧卡姆剃刀),而在實際應用中,也驗證了這一點,L2正則化的效果往往好于未經正則化的效果。當然,對于非常多人(包含我)來說,這個解釋似乎不那么顯而易見,所以這里加入一個略微數學一點的解釋(引自知乎):過擬合的時候,擬合函數的系數往往非常大,為什么?過擬合,就是擬合函數須要顧忌每個點。終于形成的擬合函數波動非常大。在某些非常小的區間里,函數值的變化非常劇烈。

    這就意味著函數在某些小區間里的導數值(絕對值)非常大,由于自變量值可大可小,所以僅僅有系數足夠大,才干保證導數值非常大。而L2正則化是通過約束參數的范數使其不要太大,所以能夠在一定程度上降低過擬合情況。

    方法3:數據增強(Data )

    在深度學習方法中,海量的訓練數據,意味著能夠用更深的網絡,訓練出更好的模型。所以,能夠在原始數據上做些改動,得到很多其它的數據,以圖片數據集舉例,能夠做各種變換,如:

    方法4:提前終止法(Early )

    對模型進行訓練的過程即是對模型的參數進行學習更新的過程,這個參數學習的過程往往會用到一些迭代方法,如梯度下降( )學習算法。提前終止法便是一種迭代次數截斷的方法來防止過擬合的方法,即在模型對訓練數據集迭代收斂之前停止迭代來防止過擬合。

    提前終止法的具體做法是,在每一個Epoch結束時(一個Epoch集為對所有的訓練數據的一輪遍歷)計算驗證集的正確率,當正確率不再提高時,就停止訓練。這種做法很符合直觀感受,因為正確率都不再提高了,在繼續訓練也是無益的,只會提高訓練的時間。

    那么該做法的一個重點便是怎樣才認為驗證集正確率不再提高了呢?并不是說驗證集正確率一降下來便認為不再提高了,因為可能經過這個Epoch后機器學習防止過擬合,正確率降低了,但是隨后的Epoch又讓正確率又上去了,所以不能根據一兩次的連續降低就判斷不再提高。一般的做法是,在訓練的過程中,記錄到目前為止最好的驗證集正確率,當連續10次Epoch(或者更多次)沒達到最佳正確率時,則可以認為正確率不再提高了。此時便可以停止迭代了(Early )。這種策略也稱為“No--in-n”,n即Epoch的次數,可以根據實際情況取。

    方法5:丟棄法()

    L1、L2正則化是通過改動代價函數來實現的,而丟棄法則是通過改動神經網絡本身來實現的,它是在訓練網絡時用的一種技巧(trike),它的流程例如以下:

    假設我們要訓練上圖這個網絡,在訓練開始時,我們隨機地“刪除”一部分的隱層單元,視它們為不存在。

    保持輸入輸出層不變,如上圖所示,依照BP算法更新上圖神經網絡中的權值(虛線連接的單元不更新,由于它們被“暫時刪除”了)。

    以上就是一次迭代的過程,在第二次迭代中,也用相同的方法,僅僅只是這次刪除的那一部分隱層單元,跟上一次刪除掉的肯定是不一樣的。我們每一次迭代都是“隨機”地去刪掉一部分,直至訓練結束。

    以上就是丟棄法t,它為什么有助于防止過擬合呢?能夠簡單地這樣解釋,運用了 丟棄法的訓練過程,相當于訓練了非常多個僅僅有部分隱層單元的神經網絡,每個這種半數網絡,都能夠給出一個分類結果,這些結果有的是正確的,有的是錯誤的。隨著訓練的進行,大部分半數網絡都能夠給出正確的分類結果。那么少數的錯誤分類結果就不會對終于結果造成大的影響。

    刪除神經單元,不工作,通常取0.5,在編程時可以利用中 函數。在訓練過程引入丟棄策略,其層保留節點比例(),每批數據輸入時神經網絡中的每個單元會以1-的概率不工作,防止過擬合。

    = tf..rnn.(cell=, =0.5)

    防止欠擬合方法

    添加其他特征項,有時候我們模型出現欠擬合的時候是因為特征項不夠導致的,可以添加其他特征項來很好地解決。例如,“組合”、“泛化”、“相關性”三類特征是特征添加的重要手段,無論在什么場景,都可以照葫蘆畫瓢,總會得到意想不到的效果。除上面的特征之外,“上下文特征”、“平臺特征”等等,都可以作為特征添加的首選項。

    添加多項式特征,這個在機器學習算法里面用的很普遍,例如將線性模型通過添加二次項或者三次項使模型泛化能力更強。例如上面的圖片的例子。

    減少正則化參數,正則化的目的是用來防止過擬合的,但是現在模型出現了欠擬合,則需要減少正則化參數。

    數據集劃分

    因為訓練集和驗證集是分開的,所以模型在驗證集上面的精度在一定程度上可以反映模型的泛化能力。在劃分驗證集的時候,需要注意驗證集的分布應該與測試集盡量保持一致,不然模型在驗證集上的精度就失去了指導意義。

    既然驗證集這么重要,那么如何劃分本地驗證集呢。在一些比賽中,賽題方會給定驗證集;如果賽題方沒有給定驗證集,那么參賽選手就需要從訓練集中拆分一部分得到驗證集。驗證集的劃分有如下幾種方式:

    決策樹如何防止過擬合_機器學習防止過擬合_防止過擬合

    這些劃分方法是從數據劃分方式的角度來講的,在現有的數據比賽中一般采用留出法和交叉驗證法。如果數據量比較大,留出法還是比較合適的。當然任何的驗證集劃分得到的驗證集都是要保證訓練集-驗證集-測試集的分布一致,所以如果不管劃分何種的劃分方式都是需要注意的。(這里的分布一般指的是與標簽相關的統計分布,如果標簽是帶有時序信息,則驗證集和測試集的時間間隔應該保持一致。)

    模型訓練和驗證訓練神經網絡的流程

    1. 好好檢查數據

    訓練神經網絡的第一步是完全不接觸任何神經網絡代碼,而是從徹底檢查數據開始。此步驟至關重要。花時間去檢查數據是一件比較重要的工作。因為數據中往往可能存在異常值,而且了解它們的分布可以有利于我們找到一個更好的模型。

    2. 評估框架并得到一個并不完美的

    此階段的提示和技巧:

    3. 過度擬合

    找到一個好的模型的方法有兩個階段:首先獲得一個足夠大的模型以使其可以過度擬合(即專注于訓練損失),然后適當地對其進行正則化(放棄一些訓練損失以提高驗證損失)。

    此階段的一些提示和技巧:

    4. 正則化

    此階段的一些提示和技巧:

    5. 微調

    此階段的一些提示和技巧:

    6. 進一步提高精確率

    本節目標是使用來完成CNN的訓練和驗證過程,CNN網絡結構。需要完成的邏輯結構如下:

    # 將自定義的封裝成一個Batch Size大小的,用于后面的訓練。

    # 訓練集封裝 批量處理數據

    = torch.utils.data.(

    , # 數據加載

    =10, # 批處理大小設置

    =True, # 是否進項洗牌操作

    =10, # 是否進行多進程加載數據設置

    )

    # 驗證集封裝

    = torch.utils.data.(

    ,

    =10,

    =False,

    =10,

    )

    防止過擬合_決策樹如何防止過擬合_機器學習防止過擬合

    model =

    = nn. (=False) # 計算交叉熵(交叉熵損失函數

    = torch.optim.Adam(model.) # Adam優化算法

    = 1000.0

    for epoch in range(20):

    train(, model, , , epoch)

    = (, model, )

    # 保存驗證集精度

    if < :

    =

    torch.save(model., './model.pt')

    print('Epoch: ', epoch)

    # 訓練函數

    def train(, model, , , epoch):

    # 切換模型為訓練模式

    model.train

    for i, (input, ) in ():

    c0, c1, c2, c3, c4, c5 = model(data[0])

    loss = (c0, data[1][:, 0]) + \

    (c1, data[1][:, 1]) + \

    (c2, data[1][:, 2]) + \

    (c3, data[1][:, 3]) + \

    (c4, data[1][:, 4]) + \

    (c5, data[1][:, 5])

    loss /= 6

    .

    loss.

    .step

    # 驗證函數

    def (, model, ):

    # 切換模型為預測模型

    決策樹如何防止過擬合_防止過擬合_機器學習防止過擬合

    model.eval

    = []

    # 不記錄模型梯度信息

    with torch.:

    for i, (input, ) in ():

    c0, c1, c2, c3, c4, c5 = model(data[0])

    loss = (c0, data[1][:, 0]) + \

    (c1, data[1][:, 1]) + \

    (c2, data[1][:, 2]) + \

    (c3, data[1][:, 3]) + \

    (c4, data[1][:, 4]) + \

    (c5, data[1][:, 5])

    loss /= 6

    .(loss.item)

    np.mean()

    # 預測函數

    def (, model, tta=10):

    model.eval

    = None

    # TTA 次數

    for _ in range(tta):

    = []

    with torch.:

    for i, (input, ) in ():

    # if :

    # input = input.cuda

    c0, c1, c2, c3, c4, c5 = model(input)

    = np.([

    c0.data.numpy,

    c1.data.numpy,

    c2.data.numpy,

    決策樹如何防止過擬合_防止過擬合_機器學習防止過擬合

    c3.data.numpy,

    c4.data.numpy], axis=1)

    .()

    = np.()

    if is None:

    =

    else:

    +=

    模型保存與加載

    在中模型的保存和加載非常簡單,比較常見的做法是保存和加載模型參數:

    # 保存模型為文件model.pt

    torch.save(., 'model.pt')

    # 讀取文件model.pt載入模型

    model.(torch.load( ' model.pt'))

    模型調參

    深度學習原理少但實踐性非常強,基本上很多的模型的驗證只能通過訓練來完成。同時深度學習有眾多的網絡結構和超參數,因此需要反復嘗試。訓練深度學習模型需要GPU的硬件支持,也需要較多的訓練時間,如何有效的訓練深度學習模型逐漸成為了一門學問。

    深度學習有眾多的訓練技巧,本節挑選了常見的一些技巧來講解,并針對本次賽題進行具體分析。與傳統的機器學習模型不同,深度學習模型的精度與模型的復雜度、數據量、正則化、數據擴增等因素直接相關。所以當深度學習模型處于不同的階段(欠擬合、過擬合和完美擬合)的情況下,大家可以知道可以什么角度來繼續優化模型。在參加本次比賽的過程中建議大家以如下邏輯完成:

    初步構建簡單的CNN模型,不用特別復雜,跑通訓練、驗證和預測的流程。

    簡單CNN模型的損失會比較大,嘗試增加模型復雜度機器學習防止過擬合,并觀察驗證集精度。

    在增加模型復雜度的同時增加數據擴增方法,直至驗證集精度不變。

    寫到最后

    1. 神經網絡訓練并不是一個十全十美的抽象

    據稱,訓練神經網絡很容易上手。許多庫和框架都以顯示30行奇跡片段來解決您的數據問題為榮,給人以假的印象,即這些東西是即插即用的。

    >>> = # plug your here

    >>> model = (.fit, , 0, )

    # world here

    比如說,以上代碼給人一種假象,即只通過一行代碼就可以完成對神經網絡的訓練。但事實上神經網絡的訓練是一件很復雜的事情。如果您堅持使用該技術而不了解其工作原理,則很可能會失敗。

    2. 神經網絡的訓練不知道怎么的就失敗了

    當你錯誤配置代碼時,通常會遇到某種異常:插入了一個整數,該整數應為字符串;該函數僅需要3個參數;導入失敗;該密鑰不存在;兩個列表中的元素數量不相等。此外,通常可以為某些功能創建單元測試。

    這只是訓練神經網絡的開始。可能在語法上,所有內容都是正確的,但還是會訓練失敗,而且也很難看出來到底哪里錯了。例如,也許在數據增強過程中左右翻轉圖像時忘記了翻轉標簽。網絡仍然可以工作良好,因為網絡可以在內部學習檢測翻轉的圖像,然后左右翻轉預測;也許由于一個錯誤,自回歸模型意外地將它試圖預測的東西作為輸入;或者,嘗試修剪漸變,但修剪了損失,導致在訓練過程中忽略了異常示例;或者,從預先訓練的檢查點初始化了權重,但未使用原始均值;或者,只是搞砸了正則化強度,學習率,其衰減率,模型大小等設置。在大多數情況下,它會訓練,但默默地工作會更糟。

    訓練神經網絡的快速而暴力的方法行不通,這往往會令人感到難受。事實上,使得神經網絡正常工作本身就是一件比較困難的事情,可以通過縝密的思考,提高警惕,利用可視化幫助我們訓練神經網絡。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有