<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:56179|
      • 收錄網站:177815|

      IT精英團

      利用學習率衰減找到最優結果

      利用學習率衰減找到最優結果

      瀏覽次數:
      評論次數:
      編輯: mb5ffd6eef9281a
      信息來源: 51CTO博客
      更新日期: 2021-03-04 06:24:58
      摘要

      學習一時爽,一直學習一直爽Hello,大家好,我是 もうり,一個從無到有的技術+語言小白。學習率是深度學習中的一個重要的超參,如何調整學習率是訓練出好模型的關鍵要素之一。關于學習率的大小在訓練過程中,一般根據訓練輪數設置動態變化的學習率。剛開始訓練時:學習率以 0.01 ~ 0.001 為宜。一定輪數過后:逐漸減緩。接近訓練結束:學習速率的衰減應該在 100 倍以上。兩種學習率衰減模式,一種為線性

      • 正文開始
      • 相關閱讀
      • 推薦作品

      學習一時爽,一直學習一直爽

      Hello,大家好,我是 もうり,一個從無到有的技術+語言小白。

      學習率是深度學習中的一個重要的超參,如何調整學習率是訓練出好模型的關鍵要素之一。

      關于學習率的大小

      圖片

      在訓練過程中,一般根據訓練輪數設置動態變化的學習率。

      • 剛開始訓練時:學習率以 0.01 ~ 0.001 為宜。

      • 一定輪數過后:逐漸減緩。

      • 接近訓練結束:學習速率的衰減應該在 100 倍以上。

      • 兩種學習率衰減模式,一種為線性衰減,一種為指數衰減。

        如果學習率過小,梯度下降很慢,如果學習率過大,如 Andrew Ng 的 Stanford 公開課程所說梯度下降的步子過大可能會跨過最優值。不同的學習率對 loss 的影響如下圖所示:

      圖片

      常見學習率衰減方式

      https://www.jianshu.com/p/125fe2ab085b

      線性衰減

      momentum 動量法

      網絡權值時,存在一些不確定因素,并不能保證每一次初始化操作都能使得網絡的初始權值處在一個合適的狀態。不恰當的初始權值可能使得網絡的損失函數在訓練過程中陷入局部最小值,達不到全局最優的狀態。

      momentum 動量能夠在一定程度上解決這個問題。momentum 動量是依據物理學的勢能與動能之間能量轉換原理提出來的。

      當 momentum 動量越大時,其轉換為勢能的能量也就越大,就越有可能擺脫局部凹域的束縛,進入全局凹域。momentum 動量主要用在權重更新的時候。

      一般,神經網絡在更新權值時,采用如下公式:

      w = w - learning_rate * dw

      引入 momentum 后,采用如下公式:

      v = mu * v - learning_rate * dw

      w = w + v

      其中,v 初始化為 0,mu 是設定的一個超變量,最常見的設定值是 0.9。

      先看源碼,其實主要改幾個參數就可以
      圖片

      基于 Iris 數據集

      '''
      @authot:?毛利
      '''
      from?sklearn?import?datasets
      import?numpy?as?np
      from?keras.models?import?Sequential
      from?keras.layers?import?Dense
      from?keras.optimizers?import?SGD
      from?keras.wrappers.scikit_learn?import?KerasClassifier
      dataset?=?datasets.load_iris()
      x?=?dataset.data
      Y?=?dataset.target
      seed?=?4
      np.random.seed(seed)
      def?create_model():
      ????model?=?Sequential()
      ????model.add(Dense(units=4,?activation='relu',?input_dim=4))
      ????model.add(Dense(units=6,?activation='relu'))
      ????model.add(Dense(units=3,?activation='softmax'?))
      ????#?定義優化器
      ????learningRate?=?0.1
      ????momentum?=?0.9??????#?動量參數
      ????decay_rate?=?0.005??#?學習率衰減
      ????sgd?=?SGD(lr=learningRate,?momentum=momentum,?decay=decay_rate,?nesterov=False)
      ????model.compile(loss='categorical_crossentropy',?optimizer=sgd,?metrics=['accuracy'])
      ????return?model
      model?=?KerasClassifier(build_fn=create_model,?epochs=200,?batch_size=5,?verbose=1)
      model.fit(x,Y)

      線性衰減的最終的結果為:loss: 0.4630 - acc: 0.6467
      圖片

      因此指數衰減相對于線性衰減效果會更好

      通過固定的 epoch 周期將學習速率降低 50% 來實現的。例如,初始學習率設定為 0.1,每 10 個 epochs 降低 50%。前 10 個 epochs 使用 0.1 的學習率,接下來的 10 個 epochs 使用 0.05 的學習率,學習率以指數級進行衰減。

      lrate?=?init_lrate?*?pow(drop,?floor(1?+?epoch)?/?epochs_drop)

      需要導入?from keras.callbacks import LearningRateScheduler用于動態設置學習率

      '''
      @author:毛利
      '''
      from?sklearn?import?datasets
      import?numpy?as?np
      from?keras.models?import?Sequential
      from?keras.layers?import?Dense
      from?keras.optimizers?import?SGD
      from?keras.wrappers.scikit_learn?import?KerasClassifier
      from?keras.callbacks?import?LearningRateScheduler
      from?math?import?pow,?floor
      dataset?=?datasets.load_iris()
      x?=?dataset.data
      Y?=?dataset.target
      seed?=?4
      np.random.seed(seed)
      #?計算學習率
      def?step_decay(epoch):
      ????init_lrate?=?0.01
      ????drop?=?0.05
      ????epochs_drop?=?10
      ????lrate?=?init_lrate?*?pow(drop,?floor(1+epoch)?/?epochs_drop)
      ????return?lrate
      def?create_model(init='glorot_uniform'):
      ????model?=?Sequential()
      ????model.add(Dense(units=4,?activation='relu',?input_dim=4,?kernel_initializer=init))
      ????model.add(Dense(units=6,?activation='relu',?kernel_initializer=init))
      ????model.add(Dense(units=3,?activation='softmax',?kernel_initializer=init))
      ????#?定義優化器
      ????learningRate?=?0.01
      ????momentum?=?0.9??????#?動量參數
      ????decay_rate?=?0.0????#?學習率衰減
      ????sgd?=?SGD(lr=learningRate,?momentum=momentum,?decay=decay_rate,?nesterov=False)
      ????model.compile(loss='categorical_crossentropy',?optimizer=sgd,?metrics=['accuracy'])
      ????return?model
      """
      keras.callbacks.LearningRateScheduler(schedule)?
      該回調函數是用于動態設置學習率?
      參數:?
      ●?schedule:函數,該函數以epoch號為參數(從0算起的整數),返回一個新學習率(浮點數)
      """
      lrate?=?LearningRateScheduler(step_decay)
      model?=?KerasClassifier(build_fn=create_model,?epochs=200,?batch_size=5,?verbose=1,?callbacks=[lrate])
      model.fit(x,?Y)

      指數衰減的最終結果為 loss: 0.3393 - acc: 0.9000

      圖片

      圖片


      圖片


      標簽:python
      利用學習率衰減找到最優結果
      ? 上一篇 2021-03-04
      Leetcode數組題目
      下一篇 ? 2021-03-04
      • 談如何設計未來的倉庫建筑
        4閱讀 0條評論 個贊
        編輯:數據社全文共3758個字,建議10分鐘閱讀大家好,我是峰哥,夏天已經來了,小麥馬上要豐收了,今天分析一篇關于未來數倉架構發展方向的文章。Linked大佬JayKreps曾發表過一篇博客,簡單闡……
      • 高并發服務的幾點優化經驗
        0閱讀 0條評論 個贊
        前言:如何優化高并發服務,這里指的是qps在20萬以上的在線服務,注意不是離線服務,在線服務會存在哪些挑戰呢?①無法做離線緩存,所有的數據都是實時讀的②大量的請求會打到線上服務,對于服務的響應時間要……
      • Java處理異常的9個最佳實踐 你做得對嗎?
        1閱讀 0條評論 個贊
        原文:https://dzone.com/articles/9-best-practices-to-handle-exceptions-in-java譯者:颯然Hang譯文:http://www.r……
      • 提高Java字符串編碼和解碼性能的技巧
        1閱讀 0條評論 個贊
        1常見字符串編碼●常見的字符串編碼有:LATIN1只能保存ASCII字符,又稱ISO-8859-1。UTF-8變長字節編碼,一個字符需要使用1個、2個或者3個byte表示。由于中文通常需要3個字節……
      • Linux預定任務調度(crontab) 好實用!
        0閱讀 0條評論 個贊
        概述crontab命令用于設置周期性被執行的指令。該命令從標準輸入設備讀取指令,并將其存放于“crontab”文件中,以供之后讀取和執行??梢允褂胏rontab定時處理離線任務,比如每天凌晨2點更新數……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • MySQL支持哈希索引嗎?(收藏)
        1閱讀 0條評論 個贊
        經常有朋友問,MySQL的InnoDB到底支不支持哈希索引?對于InnoDB的哈希索引,確切的應該這么說:(1)InnoDB用戶無法手動創建哈希索引,這一層上說,InnoDB確實不支持哈希索引;(2)……
      • Java處理異常的9個最佳實踐 你做得對嗎?
        1閱讀 0條評論 個贊
        原文:https://dzone.com/articles/9-best-practices-to-handle-exceptions-in-java譯者:颯然Hang譯文:http://www.r……
      • 如何執行超過100M的SQL腳本?
        2閱讀 0條評論 個贊
        技術_菜鳥https://www.cnblogs.com/hai-ping/p/3939150.html最近遇到一個問題,在SQLServer的查詢分析器里面執行一個超過100MB的數據庫腳本,發現……
      • 你見過的最全面的Python關鍵知識總結
        1閱讀 0條評論 個贊
        這是一份來自于SegmentFault上的開發者@二十一總結的Python重點。由于總結了太多的東西,所以篇幅有點長,這也是作者"縫縫補補"總結了好久的東西,強烈建議收藏再慢慢看~Py2……
      • Spring Boot內存泄漏 所以很難排除故障!
        1閱讀 0條評論 個贊
        作者|紀兵來源|http://suo.im/5MABXL背景為了更好地實現對項目的管理,我們將組內一個項目遷移到MDP框架(基于SpringBoot),隨后我們就發現系統會頻繁報出Swap區域……
      • 基礎鞏固——至少需要多少行代碼才能實現深度復制?
        1閱讀 0條評論 個贊
        前言深度克?。ㄉ羁截悾┮恢倍际浅?、中級前端面試中經常被問到的題目,網上介紹的實現方式也都各有千秋,大體可以概括為三種方式:JSON.stringify+JSON.parse,這個很好理解;全量判斷類……
      • 1972年的C語言 控制了Windows、Linux、macOS等操作系統的半邊天
        1閱讀 0條評論 個贊
        來源|CSDN(ID:CSDNnews)誕生于1972年的C語言已經50歲了,目前來看,它還像20歲的小伙一樣活力四射,似乎永不會退休,并且正在賦能全世界重量級應用系統的運行。盡管C語言面世多年,……
      • 高并發服務的幾點優化經驗
        0閱讀 0條評論 個贊
        前言:如何優化高并發服務,這里指的是qps在20萬以上的在線服務,注意不是離線服務,在線服務會存在哪些挑戰呢?①無法做離線緩存,所有的數據都是實時讀的②大量的請求會打到線上服務,對于服務的響應時間要……
      • Python字符串深度摘要
        2閱讀 0條評論 個贊
        以下文章來源于公眾號-蘿卜大雜燴,作者周蘿卜今天我們來學習字符串數據類型相關知識,將討論如何聲明字符串數據類型,字符串數據類型與ASCII表的關系,字符串數據類型的屬性,以及一些重要的字符串方法和……
      • 如何用10行bash shell腳本監控Linux?
        1閱讀 0條評論 個贊
        http://985.so/xbtd子沐愛掃地(譯)監控我們的環境對于服務器運維來說至關重要,尤其是在部署新的應用程序時。如今,公司每天都使用開源解決方案來監控系統資源。但是,當出于測試的目的來監控……
      • Kubernetes網絡模型基本指南
        1閱讀 0條評論 個贊
        Kubernetes是為運行分布式集群而建立的,分布式系統的本質使得網絡成為Kubernetes的核心和必要組成部分,了解Kubernetes網絡模型可以使你能夠正確運行、監控和排查應用程序……
      • 內存數據庫如何利用內存?
        1閱讀 0條評論 個贊
        與以磁盤存儲為主的普通數據庫相比,內存數據庫的數據訪問速度可以高出幾個數量級,能大幅提高運算性能,更適合高并發、低延時的業務場景。不過,當前大部分內存數據庫仍然采用SQL模型,而SQL缺乏一些……
      • 碼頭工人搭建彈性搜索集群教程
        0閱讀 0條評論 個贊
        寫在前面:為什么要用ElasticSearch?我們的應用經常需要添加檢索功能,開源的ElasticSearch是目前全文檢索引擎的首選。它可以快速的存儲、搜索和分析海量數據。ElasticSear……
      • 不容錯過的20個ES6技巧
        5閱讀 0條評論 個贊
        前言大家好,我是xieyezi,好久不見,我又重新回歸掘金啦,這次為大家整理了20個使用頻率很高的ES6代碼塊,希望大家喜歡……
      • 微服務架構下基于Prometheus構建綜合監控平臺的最佳實踐
        2閱讀 0條評論 個贊
        隨著Prometheus逐漸成為云原生時代的可觀測事實標準,那么今天為大家帶來在微服務架構下基于Prometheus構建一體化監控平臺的最佳實踐和一些相關的思考,內容主要包括以下幾個部分:微服……
      • epoll這個Linux高性能服務的本質真的不簡單
        1閱讀 0條評論 個贊
        設想一個場景:有100萬用戶同時與一個進程保持著TCP連接,而每一時刻只有幾十個或幾百個TCP連接是活躍的(接收TCP包),也就是說在每一時刻進程只需要處理這100萬連接中的一小部分連接。那么,如何才……
      • Python極簡編碼規范
        1閱讀 0條評論 個贊
        本文是閱讀《PythonCodingRule》之后總結的最為精華及簡單的編碼規范,根據每個人不同喜好有些地方會有不同的選擇,我只是做了對自己來說最簡單易行的選擇,僅供大家參考。1、重要原則a.保持……
      • 管理數百個Kubernetes集群需要什么?
        0閱讀 0條評論 個贊
        文章轉載:進擊云原生(版權歸原作者所有,侵刪)要點:部署一個具備生產就緒所需所有依賴關系的Kubernetes集群需要數天時間。如果不自動化這個過程,管理Kubernetes集群的浮動是非常困難的。在……
      • 一行Python代碼實現程序并行
        1閱讀 0條評論 個贊
        Python在程序并行化方面多少有些聲名狼藉。撇開技術上的問題,例如線程的實現和GIL,我覺得錯誤的教學指導才是主要問題。常見的經典Python多線程、多進程教程多顯得偏"重"。而且往往隔靴搔……
      • Java 9為什么把String的底層實現從char[]改成byte[]?
        8閱讀 0條評論 個贊
        如果你不是Java8的釘子戶,你應該早就發現了:String類的源碼已經由char[]優化為了byte[]來存儲字符串內容,為什么要這樣做呢?開門見山地說,從char[]到byte……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>