一小時(shí)學(xué)會(huì)TensorFlow2之大幅提高模型準(zhǔn)確率
過擬合
當(dāng)訓(xùn)練集的的準(zhǔn)確率很高, 但是測(cè)試集的準(zhǔn)確率很差的時(shí)候就, 我們就遇到了過擬合 (Overfitting) 的問題. 如圖:
過擬合產(chǎn)生的一大原因是因?yàn)槟P瓦^于復(fù)雜. 下面我們將通過講述 5 種不同的方法來解決過擬合的問題, 從而提高模型準(zhǔn)確度.
Regulation
Regulation 可以幫助我們通過約束要優(yōu)化的參數(shù)來防止過擬合.
公式
未加入 regulation 的損失:
加入 regulation 的損失:
λ 和 lr (learning rate) 類似. 如果 λ 的值越大, regularion 的力度也就越強(qiáng), 權(quán)重的值也就越小.
例子
添加了 l2 regulation 的網(wǎng)絡(luò):
network = tf.keras.Sequential([ tf.keras.layers.Dense(256, kernel_regularizer=tf.keras.regularizers.l2(0.001), activation=tf.nn.relu), tf.keras.layers.Dense(128, kernel_regularizer=tf.keras.regularizers.l2(0.001), activation=tf.nn.relu), tf.keras.layers.Dense(64, kernel_regularizer=tf.keras.regularizers.l2(0.001), activation=tf.nn.relu), tf.keras.layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l2(0.001), activation=tf.nn.relu), tf.keras.layers.Dense(10) ])
動(dòng)量
動(dòng)量 (Momentum) 是指運(yùn)動(dòng)物體的租用效果. 在梯度下降的過程中, 通過在優(yōu)化器中加入動(dòng)量, 我們可以減少擺動(dòng)從而達(dá)到更優(yōu)的效果.
未添加動(dòng)量:
添加動(dòng)量:
公式
未加動(dòng)量的權(quán)重更新:
- w: 權(quán)重 (weight)
- k: 迭代的次數(shù)
- α: 學(xué)習(xí)率 (learning rate)
- ∇f(): 微分
添加動(dòng)量的權(quán)重更新:
- β: 動(dòng)量權(quán)重
- z: 歷史微分
例子
添加了動(dòng)量的優(yōu)化器:
optimizer = tf.keras.optimizers.SGD(learning_rate=0.02, momentum=0.9) optimizer = tf.keras.optimizers.RMSprop(learning_rate=0.02, momentum=0.9)
注: Adam 優(yōu)化器默認(rèn)已經(jīng)添加動(dòng)量, 所以無需自行添加.
學(xué)習(xí)率遞減
簡(jiǎn)單的來說, 如果學(xué)習(xí)率越大, 我們訓(xùn)練的速度就越大, 但找到最優(yōu)解的概率也就越小. 反之, 學(xué)習(xí)率越小, 訓(xùn)練的速度就越慢, 但找到最優(yōu)解的概率就越大.
過程
我們可以在訓(xùn)練初期把學(xué)習(xí)率調(diào)的稍大一些, 使得網(wǎng)絡(luò)迅速收斂. 在訓(xùn)練后期學(xué)習(xí)率小一些, 使得我們能得到更好的收斂以獲得最優(yōu)解. 如圖:
例子
learning_rate = 0.2 # 學(xué)習(xí)率 optimizer = tf.keras.optimizers.SGD(learning_rate=learning_rate, momentum=0.9) # 優(yōu)化器 # 迭代 for epoch in range(iteration_num): optimizer.learninig_rate = learning_rate * (100 - epoch) / 100 # 學(xué)習(xí)率遞減
Early Stopping
之前我們提到過, 當(dāng)訓(xùn)練集的準(zhǔn)確率仍在提升, 但是測(cè)試集的準(zhǔn)確率反而下降的時(shí)候, 我們就遇到了過擬合 (overfitting) 的問題.
Early Stopping 可以幫助我們?cè)跍y(cè)試集的準(zhǔn)確率下降的時(shí)候停止訓(xùn)練, 從而避免繼續(xù)訓(xùn)練導(dǎo)致的過擬合問題.
Dropout
Learning less to learn better
Dropout 會(huì)在每個(gè)訓(xùn)練批次中忽略掉一部分的特征, 從而減少過擬合的現(xiàn)象.
dropout, 通過強(qiáng)迫神經(jīng)元, 和隨機(jī)跳出來的其他神經(jīng)元共同工作, 達(dá)到好的效果. 消除減弱神經(jīng)元節(jié)點(diǎn)間的聯(lián)合適應(yīng)性, 增強(qiáng)了泛化能力.
例子:
network = tf.keras.Sequential([ tf.keras.layers.Dense(256, activation=tf.nn.relu), tf.keras.layers.Dropout(0.5), # 忽略一半 tf.keras.layers.Dense(128, activation=tf.nn.relu), tf.keras.layers.Dropout(0.5), # 忽略一半 tf.keras.layers.Dense(64, activation=tf.nn.relu), tf.keras.layers.Dropout(0.5), # 忽略一半 tf.keras.layers.Dense(32, activation=tf.nn.relu), tf.keras.layers.Dense(10) ])
到此這篇關(guān)于一小時(shí)學(xué)會(huì)TensorFlow2之大幅提高模型準(zhǔn)確率的文章就介紹到這了,更多相關(guān)TensorFlow2模型準(zhǔn)確率內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
讀取json格式為DataFrame(可轉(zhuǎn)為.csv)的實(shí)例講解
今天小編就為大家分享一篇讀取json格式為DataFrame(可轉(zhuǎn)為.csv)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06python 實(shí)現(xiàn)將list轉(zhuǎn)成字符串,中間用空格隔開
今天小編就為大家分享一篇python 實(shí)現(xiàn)將list轉(zhuǎn)成字符串,中間用空格隔開,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12基于Python利用Faker批量測(cè)試數(shù)據(jù)
這篇文章主要介紹了基于Python利用Faker批量測(cè)試數(shù)據(jù)。測(cè)試過程中,經(jīng)常需要批量去造數(shù)據(jù),方法有很多,最簡(jiǎn)單方便的應(yīng)該是使用python?的一個(gè)三方庫Faker。下面我們就來看看三方庫Faker如何批量測(cè)試數(shù)據(jù),需要的朋友可以參考一下2022-03-03Python使用SQLAlchemy模塊實(shí)現(xiàn)操作數(shù)據(jù)庫
SQLAlchemy 是用Python編程語言開發(fā)的一個(gè)開源項(xiàng)目,它提供了SQL工具包和ORM對(duì)象關(guān)系映射工具,使用SQLAlchemy可以實(shí)現(xiàn)高效和高性能的數(shù)據(jù)庫訪問,下面我們就來學(xué)習(xí)一下SQLAlchemy模塊的具體應(yīng)用吧2023-11-11python使用wxpython開發(fā)簡(jiǎn)單記事本的方法
這篇文章主要介紹了python使用wxpython開發(fā)簡(jiǎn)單記事本的方法,涉及Python使用wxPython實(shí)現(xiàn)桌面圖形應(yīng)用程序的技巧,需要的朋友可以參考下2015-05-05詳解python和matlab的優(yōu)勢(shì)與區(qū)別
在本文中小編給大家分享的是關(guān)于python和matlab的優(yōu)勢(shì)與區(qū)別的知識(shí)點(diǎn)以及實(shí)例代碼,需要的朋友們參考學(xué)習(xí)下。2019-06-06Python實(shí)現(xiàn)基本數(shù)據(jù)結(jié)構(gòu)中隊(duì)列的操作方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)基本數(shù)據(jù)結(jié)構(gòu)中隊(duì)列的操作方法,結(jié)合實(shí)例形式演示了Python針對(duì)數(shù)據(jù)結(jié)構(gòu)中隊(duì)列的初始化、插入、刪除、判斷隊(duì)列滿及隊(duì)列空等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12python運(yùn)用sklearn實(shí)現(xiàn)KNN分類算法
這篇文章主要為大家詳細(xì)介紹了python運(yùn)用sklearn實(shí)現(xiàn)KNN分類算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10ChatGPT 幫我自動(dòng)編寫 Python 爬蟲腳本的詳細(xì)過程
ChatGPT是一種基于大語言模型的生成式AI,換句話說它可以自動(dòng)生成類似人類語言的文本,把梳理好的有邏輯的答案呈現(xiàn)在你面前,這完全不同于傳統(tǒng)搜索工具,這篇文章主要介紹了ChatGPT 幫我自動(dòng)編寫 Python 爬蟲腳本,需要的朋友可以參考下2023-02-02