最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

記錄模型訓(xùn)練時(shí)loss值的變化情況

 更新時(shí)間:2020年06月16日 11:18:20   作者:暴躁的猴子  
這篇文章主要介紹了記錄模型訓(xùn)練時(shí)loss值的變化情況,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

記錄訓(xùn)練過程中的每一步的loss變化

 if verbose and step % verbose == 0:
 sys.stdout.write('\r{} / {} : loss = {}'.format(
  step, total_steps, np.mean(total_loss)))
 sys.stdout.flush()
 if verbose:
 sys.stdout.write('\r') 
 sys.stdout.flush() 

一般我們在訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的時(shí)候,都是每隔多少步,輸出打印一下loss或者每一步打印一下loss,今天發(fā)現(xiàn)了另一種記錄loss變化的方法,就是用

sys.stdout.write('\r{} / {} : loss = {}')

如圖上的代碼,可以記錄每一個(gè)在每個(gè)epoch中記錄用一行輸出就可以記錄每個(gè)step的loss值變化,

\r就是輸出不會(huì)換行,因此如果你想同一樣輸出多次,在需要輸出的字符串對象里面加上"\r",就可以回到行首了。

sys.stdout.flush() #一秒輸出了一個(gè)數(shù)字

具體的實(shí)現(xiàn)就是下面的圖:

這樣在每個(gè)epoch中也可以觀察loss變化,但是只需要打印一行,而不是每一行都輸出。

補(bǔ)充知識:訓(xùn)練模型中損失(loss)異常分析

前言

訓(xùn)練模型過程中隨時(shí)都要注意目標(biāo)函數(shù)值(loss)的大小變化。一個(gè)正常的模型loss應(yīng)該隨訓(xùn)練輪數(shù)(epoch)的增加而緩慢下降,然后趨于穩(wěn)定。雖然在模型訓(xùn)練的初始階段,loss有可能會(huì)出現(xiàn)大幅度震蕩變化,但是只要數(shù)據(jù)量充分,模型正確,訓(xùn)練的輪數(shù)足夠長,模型最終會(huì)達(dá)到收斂狀態(tài),接近最優(yōu)值或者找到了某個(gè)局部最優(yōu)值。在模型實(shí)際訓(xùn)練過程中,可能會(huì)得到一些異常loss值,如loss等于nan;loss值忽大忽小,不收斂等。

下面根據(jù)自己使用Pythorh訓(xùn)練模型的經(jīng)驗(yàn),分析出一些具體原因和給出對應(yīng)的解決辦法。

一、輸入數(shù)據(jù)

1. 數(shù)據(jù)的預(yù)處理

輸入到模型的數(shù)據(jù)一般都是經(jīng)過了預(yù)處理的,如用pandas先進(jìn)行數(shù)據(jù)處理,尤其要注意空值,缺失值,異常值。

缺失值:數(shù)值類型(NaN),對象類型(None, NaN),時(shí)間類型(NaT)

空值:""

異常值:不再正常區(qū)間范圍的值

例如對缺失值可以進(jìn)行判斷df.isnull()或者df.isna();丟棄df.dropna();填充df.fillna()等操作。

輸入到模型中的數(shù)據(jù)一般而言都是數(shù)值類型的值,一定要保證不能出現(xiàn)NaN, numpy中的nan是一種特殊的float,該值數(shù)值運(yùn)算的結(jié)果是不正常的,所以可能會(huì)導(dǎo)致loss值等于nan??梢杂胣umpy.any(numpy.isnan(x))檢查一下input和target。

2. 數(shù)據(jù)的讀寫

例如使用Pandas讀取.csv類型的數(shù)據(jù)得到的DataFrame會(huì)添加默認(rèn)的index,再寫回到磁盤會(huì)多一列。如果用其他讀取方式再讀入,可能會(huì)導(dǎo)致數(shù)據(jù)有問題,讀取到NaN。

import pandas as pd
 
Output = pd.read_csv('./data/diabetes/Output.csv')
trainOutput, testOutput = Output[:6000], Output[6000:]
trainOutput.to_csv('./data/diabetes/trainOutput.csv')
testOutput.to_csv('./data/diabetes/testOutput.csv')

3. 數(shù)據(jù)的格式

Pythorch中的 torch.utils.data.Dataset 類是一個(gè)表示數(shù)據(jù)集的抽象類。自己數(shù)據(jù)集的類應(yīng)該繼承自 Dataset 并且重寫__len__方法和__getitem__方法:

__len__ : len(dataset) 返回?cái)?shù)據(jù)集的大小

__getitem__ :用以支持索引操作, dataset[idx]能夠返回第idx個(gè)樣本數(shù)據(jù)

然后使用torch.utils.data.DataLoader 這個(gè)迭代器(iterator)來遍歷所有的特征。具體可以參見這里

在構(gòu)造自己Dataset類時(shí),需要注意返回的數(shù)據(jù)格式和類型,一般不會(huì)出現(xiàn)NaN的情況但是可能會(huì)導(dǎo)致數(shù)據(jù)float, int, long這幾種類型的不兼容,注意轉(zhuǎn)換。

二、學(xué)習(xí)率

基于梯度下降的優(yōu)化方法,當(dāng)學(xué)習(xí)率太高時(shí)會(huì)導(dǎo)致loss值不收斂,太低則下降緩慢。需要對學(xué)習(xí)率等超參數(shù)進(jìn)行調(diào)參如使用網(wǎng)格搜索,隨機(jī)搜索等。

三、除零錯(cuò)

對于回歸問題,可能出現(xiàn)了除0 的計(jì)算,加一個(gè)很小的余項(xiàng)可能可以解決。類似于計(jì)算概率時(shí)進(jìn)行的平滑修正,下面的代碼片段中l(wèi)oss使用交叉混合熵(CossEntropy),計(jì)算3分類問題的AUC值,為了避免概率計(jì)算出現(xiàn)NaN而采取了相應(yīng)的平滑處理。

from sklearn.metrics import roc_auc_score
 
model_ft, y_true, losslists = test_model(model_ft, criterion, optimizer)
n_class = 3
y_one_hot = np.eye(n_class)[y_true.reshape(-1)]
# solve divide zero errot
eps = 0.0000001
y_scores = losslists / (losslists.sum(axis=1, keepdims=True)+eps)
#print(y_scores)
#print(np.isnan(y_scores))
"""
metrics.roc_auc_score(y_one_hot, y_pred)
"""
print("auc: ")
roc_auc_score(y_one_hot, y_scores)

四、loss函數(shù)

loss函數(shù)代碼編寫不正確或者已經(jīng)編寫好的loss函數(shù)API使用不清楚

五、某些易錯(cuò)代碼

Pytorch在進(jìn)行自動(dòng)微分的時(shí)候,默認(rèn)梯度是會(huì)累加的,所以需要在每個(gè)epoch的每個(gè)batch中對梯度清零,否則可能會(huì)導(dǎo)致loss值不收斂。不要忘記添加如下代碼

optimizer.zero_grad()

以上這篇記錄模型訓(xùn)練時(shí)loss值的變化情況就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python如何篩選序列中的元素的方法實(shí)現(xiàn)

    Python如何篩選序列中的元素的方法實(shí)現(xiàn)

    這篇文章主要介紹了Python如何篩選序列中的元素的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python之str操作方法(詳解)

    Python之str操作方法(詳解)

    下面小編就為大家?guī)硪黄狿ython之str操作方法(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python3多線程版TCP端口掃描器

    Python3多線程版TCP端口掃描器

    這篇文章主要為大家詳細(xì)介紹了Python3多線程版TCP端口掃描器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 利用Python改正excel表格數(shù)據(jù)

    利用Python改正excel表格數(shù)據(jù)

    這篇文章主要介紹了利用Python改正excel表格數(shù)據(jù),運(yùn)用面向過程寫的,將每一步都放在了不同的函數(shù)中,下文詳細(xì)過程介紹需要的小伙伴可以參考一下
    2022-06-06
  • Python集合的增刪改查操作

    Python集合的增刪改查操作

    這篇文章主要介紹了Python集合的增刪改查操作,其增刪改查操作要看集合的類型來決定,不可變的數(shù)據(jù)當(dāng)然不能增刪改,只能查詢,可變集合則限制稍微少點(diǎn)。下面和小編一起進(jìn)放入文章了解更多相關(guān)內(nèi)容吧
    2022-03-03
  • python實(shí)現(xiàn)超級馬里奧

    python實(shí)現(xiàn)超級馬里奧

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)超級馬里奧,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python實(shí)現(xiàn)手寫一個(gè)類似django的web框架示例

    Python實(shí)現(xiàn)手寫一個(gè)類似django的web框架示例

    這篇文章主要介紹了Python實(shí)現(xiàn)手寫一個(gè)類似django的web框架,結(jié)合具體實(shí)例形式分析了Python自定義簡單控制器、URL路由、視圖模型等功能,實(shí)現(xiàn)類似Django框架的web應(yīng)用相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • python中的內(nèi)置函數(shù)max()和min()及mas()函數(shù)的高級用法

    python中的內(nèi)置函數(shù)max()和min()及mas()函數(shù)的高級用法

    這篇文章主要介紹了python中的內(nèi)置函數(shù)max()和min()的相關(guān)知識及python中內(nèi)置函數(shù)max()的高級用法,需要的朋友可以參考下
    2018-03-03
  • PyCharm+Qt Designer+PyUIC安裝配置教程詳解

    PyCharm+Qt Designer+PyUIC安裝配置教程詳解

    這篇文章主要介紹了PyCharm+Qt Designer+PyUIC安裝配置教程詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • Python異步編程入門之實(shí)現(xiàn)文件批處理的并發(fā)處理方式

    Python異步編程入門之實(shí)現(xiàn)文件批處理的并發(fā)處理方式

    本文以Python初級程序員為對象,介紹了如何使用asyncio和logging模塊實(shí)現(xiàn)一個(gè)異步批處理文件的并發(fā)處理系統(tǒng),以提高處理大量文件或數(shù)據(jù)時(shí)的效率,其中,通過配置日志系統(tǒng)記錄處理文件的日志信息,定義AsyncBatchProcessor類控制并發(fā)任務(wù)的數(shù)量
    2024-10-10

最新評論

焉耆| 大足县| 盘锦市| 锡林郭勒盟| 台安县| 洛宁县| 辰溪县| 比如县| 大新县| 璧山县| 庄浪县| 杭州市| 织金县| 沅陵县| 元谋县| 濮阳县| 湟中县| 额济纳旗| 苍南县| 康定县| 江阴市| 深州市| 舞钢市| 巩义市| 南雄市| 阿荣旗| 息烽县| 商都县| 从化市| 沙湾县| 新源县| 光山县| 潞城市| 珠海市| 阜康市| 西乌珠穆沁旗| 韩城市| 体育| 寿阳县| 广南县| 江津市|