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

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

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

記錄訓(xùn)練過(guò)程中的每一步的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() 

一般我們?cè)谟?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ì)換行,因此如果你想同一樣輸出多次,在需要輸出的字符串對(duì)象里面加上"\r",就可以回到行首了。

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

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

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

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

前言

訓(xùn)練模型過(guò)程中隨時(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ù)足夠長(zhǎng),模型最終會(huì)達(dá)到收斂狀態(tài),接近最優(yōu)值或者找到了某個(gè)局部最優(yōu)值。在模型實(shí)際訓(xùn)練過(guò)程中,可能會(huì)得到一些異常loss值,如loss等于nan;loss值忽大忽小,不收斂等。

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

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

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

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

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

空值:""

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

例如對(duì)缺失值可以進(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ù)的讀寫(xiě)

例如使用Pandas讀取.csv類型的數(shù)據(jù)得到的DataFrame會(huì)添加默認(rèn)的index,再寫(xiě)回到磁盤會(huì)多一列。如果用其他讀取方式再讀入,可能會(huì)導(dǎo)致數(shù)據(jù)有問(wèn)題,讀取到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 并且重寫(xiě)__len__方法和__getitem__方法:

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

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

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

在構(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值不收斂,太低則下降緩慢。需要對(duì)學(xué)習(xí)率等超參數(shù)進(jìn)行調(diào)參如使用網(wǎng)格搜索,隨機(jī)搜索等。

三、除零錯(cuò)

對(duì)于回歸問(wèn)題,可能出現(xiàn)了除0 的計(jì)算,加一個(gè)很小的余項(xiàng)可能可以解決。類似于計(jì)算概率時(shí)進(jìn)行的平滑修正,下面的代碼片段中l(wèi)oss使用交叉混合熵(CossEntropy),計(jì)算3分類問(wèn)題的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ù)代碼編寫(xiě)不正確或者已經(jīng)編寫(xiě)好的loss函數(shù)API使用不清楚

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

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

optimizer.zero_grad()

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

相關(guān)文章

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

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

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

    Python之str操作方法(詳解)

    下面小編就為大家?guī)?lái)一篇Python之str操作方法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    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)用面向過(guò)程寫(xiě)的,將每一步都放在了不同的函數(shù)中,下文詳細(xì)過(guò)程介紹需要的小伙伴可以參考一下
    2022-06-06
  • Python集合的增刪改查操作

    Python集合的增刪改查操作

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

龙南县| 姜堰市| 台北县| 新闻| 类乌齐县| 黎城县| 华亭县| 台湾省| 云龙县| 邵阳县| 垣曲县| 四川省| 波密县| 九台市| 河间市| 金塔县| 嘉兴市| 防城港市| 安康市| 仙游县| 福建省| 南昌市| 洪江市| 方城县| 城固县| 乌兰县| 长白| 蒙自县| 梧州市| 泽普县| 曲阳县| 满城县| 望都县| 福泉市| 桂平市| 沈阳市| 白河县| 普兰店市| 石楼县| 璧山县| 宁城县|