亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何使用python的plot繪制loss、acc曲線并存儲成圖片

 更新時間:2024年03月14日 10:49:46   作者:githubcurry  
在數(shù)據(jù)可視化中曲線圖是一種常見的展示數(shù)據(jù)趨勢的方式,Python作為一種強大的編程語言,提供了豐富的數(shù)據(jù)處理和可視化庫,使得繪制曲線圖變得非常簡單,下面這篇文章主要給大家介紹了關(guān)于如何使用python的plot繪制loss、acc曲線并存儲成圖片的相關(guān)資料,需要的朋友可以參考下

前言

使用 python的plot 繪制網(wǎng)絡(luò)訓(xùn)練過程中的的 loss 曲線以及準(zhǔn)確率變化曲線,這里的主要思想就時先把想要的損失值以及準(zhǔn)確率值保存下來,保存到 .txt 文件中,待網(wǎng)絡(luò)訓(xùn)練結(jié)束,我們再拿這存儲的數(shù)據(jù)繪制各種曲線。

其大致步驟為:數(shù)據(jù)讀取與存儲 - > loss曲線繪制 - > 準(zhǔn)確率曲線繪制

一、數(shù)據(jù)讀取與存儲部分

我們首先要得到訓(xùn)練時的數(shù)據(jù),以損失值為例,網(wǎng)絡(luò)每迭代一次都會產(chǎn)生相應(yīng)的 loss,那么我們就把每一次的損失值都存儲下來,存儲到列表,保存到 .txt 文件中。

1.3817585706710815, 
1.8422836065292358, 
1.1619832515716553, 
0.5217241644859314, 
0.5221078991889954, 
1.3544578552246094, 
1.3334463834762573, 
1.3866571187973022, 
0.7603049278259277

上圖為部分損失值,根據(jù)迭代次數(shù)而異,要是迭代了1萬次,這里就會有1萬個損失值。
而準(zhǔn)確率值是每一個 epoch 產(chǎn)生一個值,要是訓(xùn)練100個epoch,就有100個準(zhǔn)確率值。

這里的損失值是怎么保存到文件中的呢?首先,找到網(wǎng)絡(luò)訓(xùn)練代碼,就是項目中的 main.py,或者 train.py ,在文件里先找到訓(xùn)練部分,里面經(jīng)常會有這樣一行代碼:

for epoch in range(resume_epoch, num_epochs):   # 就是這一行
	####
	...
	loss = criterion(outputs, labels.long())              # 損失樣例
	...
    epoch_acc = running_corrects.double() / trainval_sizes[phase]    # 準(zhǔn)確率樣例
    ...
    ###

從這一行開始就是訓(xùn)練部分了,往下會找到類似的這兩句代碼,就是損失值和準(zhǔn)確率值了。

這時候?qū)⒁韵麓a加入源代碼就可以了:

train_loss = []
train_acc = []
for epoch in range(resume_epoch, num_epochs):          # 就是這一行
	###
	...
	loss = criterion(outputs, labels.long())           # 損失樣例
	train_loss.append(loss.item())                     # 損失加入到列表中
	...
	epoch_acc = running_corrects.double() / trainval_sizes[phase]    # 準(zhǔn)確率樣例
	train_acc.append(epoch_acc.item())                 # 準(zhǔn)確率加入到列表中
	... 
with open("./train_loss.txt", 'w') as train_los:
    train_los.write(str(train_loss))

with open("./train_acc.txt", 'w') as train_ac:
     train_ac.write(str(train_acc))

這樣就算完成了損失值和準(zhǔn)確率值的數(shù)據(jù)存儲了!

二、繪制 loss 曲線

主要需要 numpy 庫和 matplotlib 庫。

pip install numpy malplotlib

首先,將 .txt 文件中的存儲的數(shù)據(jù)讀取進(jìn)來,以下是讀取函數(shù):

import numpy as np

# 讀取存儲為txt文件的數(shù)據(jù)
def data_read(dir_path):
    with open(dir_path, "r") as f:
        raw_data = f.read()
        data = raw_data[1:-1].split(", ")   # [-1:1]是為了去除文件中的前后中括號"[]"

    return np.asfarray(data, float)

然后,就是繪制 loss 曲線部分:

if __name__ == "__main__":

	train_loss_path = r"/train_loss.txt"   # 存儲文件路徑
	
	y_train_loss = data_read(train_loss_path)        # loss值,即y軸
	x_train_loss = range(len(y_train_loss))			 # loss的數(shù)量,即x軸

	plt.figure()

    # 去除頂部和右邊框框
    ax = plt.axes()
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)

    plt.xlabel('iters')    # x軸標(biāo)簽
    plt.ylabel('loss')     # y軸標(biāo)簽
	
	# 以x_train_loss為橫坐標(biāo),y_train_loss為縱坐標(biāo),曲線寬度為1,實線,增加標(biāo)簽,訓(xùn)練損失,
	# 默認(rèn)顏色,如果想更改顏色,可以增加參數(shù)color='red',這是紅色。
    plt.plot(x_train_loss, y_train_loss, linewidth=1, linestyle="solid", label="train loss")
    plt.legend()
    plt.title('Loss curve')
    plt.show()
    pit.savefig("loss.png")

這樣就算把損失圖像畫出來了!如下:

三、繪制準(zhǔn)確率曲線

有了上面的基礎(chǔ),這就簡單很多了。

只是有一點要記住,上面的x軸是迭代次數(shù),這里的是訓(xùn)練輪次 epoch。

if __name__ == "__main__":

	train_acc_path = r"/train_acc.txt"   # 存儲文件路徑
	
	y_train_acc = data_read(train_acc_path)       # 訓(xùn)練準(zhǔn)確率值,即y軸
	x_train_acc = range(len(y_train_acc))			 # 訓(xùn)練階段準(zhǔn)確率的數(shù)量,即x軸

	plt.figure()

    # 去除頂部和右邊框框
    ax = plt.axes()
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)

    plt.xlabel('epochs')    # x軸標(biāo)簽
    plt.ylabel('accuracy')     # y軸標(biāo)簽
	
	# 以x_train_acc為橫坐標(biāo),y_train_acc為縱坐標(biāo),曲線寬度為1,實線,增加標(biāo)簽,訓(xùn)練損失,
	# 增加參數(shù)color='red',這是紅色。
    plt.plot(x_train_acc, y_train_acc, color='red',linewidth=1, linestyle="solid", label="train acc")
    plt.legend()
    plt.title('Accuracy curve')
    plt.show()
    pit.savefig("acc.png")

這樣就把準(zhǔn)確率變化曲線畫出來了!如下:

以下是完整代碼,以繪制準(zhǔn)確率曲線為例,并且將x軸換成了iters,和損失曲線保持一致,供參考:

import numpy as np
import matplotlib.pyplot as plt

# 讀取存儲為txt文件的數(shù)據(jù)
def data_read(dir_path):
    with open(dir_path, "r") as f:
        raw_data = f.read()
        data = raw_data[1:-1].split(", ")

    return np.asfarray(data, float)


# 不同長度數(shù)據(jù),統(tǒng)一為一個標(biāo)準(zhǔn),倍乘x軸
def multiple_equal(x, y):
    x_len = len(x)
    y_len = len(y)
    times = x_len/y_len
    y_times = [i * times for i in y]
    return y_times


if __name__ == "__main__":

    train_loss_path = r"/train_loss.txt"
    train_acc_path = r"/train_acc.txt"

    y_train_loss = data_read(train_loss_path)
    y_train_acc = data_read(train_acc_path)

    x_train_loss = range(len(y_train_loss))
    x_train_acc = multiple_equal(x_train_loss, range(len(y_train_acc)))

    plt.figure()

    # 去除頂部和右邊框框
    ax = plt.axes()
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)

    plt.xlabel('iters')
    plt.ylabel('accuracy')

    # plt.plot(x_train_loss, y_train_loss, linewidth=1, linestyle="solid", label="train loss")
    plt.plot(x_train_acc, y_train_acc,  color='red', linestyle="solid", label="train accuracy")
    plt.legend()

    plt.title('Accuracy curve')
    plt.show()
    pit.savefig("acc.png")

總結(jié) 

到此這篇關(guān)于如何使用python的plot繪制loss、acc曲線并存儲成圖片的文章就介紹到這了,更多相關(guān)python plot繪制loss、acc曲線存儲成圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 非極大值抑制(NMS)的四種實現(xiàn)詳解

    Python 非極大值抑制(NMS)的四種實現(xiàn)詳解

    本文主要介紹了非極大值抑制(Non-Maximum Suppression,NMS)的四種實現(xiàn)方式,不同方法對NMS速度的影響各不相同,感興趣的小伙伴可以了解一下
    2021-11-11
  • python?如何獲取文件夾中的全部文件

    python?如何獲取文件夾中的全部文件

    在神經(jīng)網(wǎng)絡(luò)準(zhǔn)備訓(xùn)練集的時候,經(jīng)常需要從文件夾中讀取全部圖片。經(jīng)常遇到的有兩種方式,一種是os.listdir()另一種是glob,本文結(jié)合示例代碼對python獲取文件夾中全部文件講解的非常詳細(xì),需要的朋友參考下吧
    2023-01-01
  • Django1.11自帶分頁器paginator的使用方法

    Django1.11自帶分頁器paginator的使用方法

    這篇文章主要為大家詳細(xì)介紹了Django1.11自帶分頁器Django的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python 正則表達(dá)式大全(推薦)

    Python 正則表達(dá)式大全(推薦)

    正則表達(dá)式是對字符串操作的一種邏輯公式,正則表達(dá)式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串。本文重點給大家介紹Python 正則表達(dá)式大全,感興趣的朋友一起看看吧
    2021-11-11
  • appium+python自動化配置(adk、jdk、node.js)

    appium+python自動化配置(adk、jdk、node.js)

    這篇文章主要介紹了appium+python自動化配置(adk、jdk、node.js),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 解決pyinstaller打包pyqt5的問題

    解決pyinstaller打包pyqt5的問題

    今天小編就為大家分享一篇解決pyinstaller打包pyqt5的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python實現(xiàn)批量提取Word文檔表格數(shù)據(jù)

    Python實現(xiàn)批量提取Word文檔表格數(shù)據(jù)

    在大數(shù)據(jù)處理與信息抽取領(lǐng)域中,Word文檔是各類機構(gòu)和個人普遍采用的一種信息存儲格式,本文將介紹如何使用Python實現(xiàn)對Word文檔中表格的提取,感興趣的可以了解下
    2024-03-03
  • Python迭代器Iterable判斷方法解析

    Python迭代器Iterable判斷方法解析

    這篇文章主要介紹了Python迭代器Iterable判斷方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Python利用psutil庫進(jìn)行監(jiān)控進(jìn)程和資源

    Python利用psutil庫進(jìn)行監(jiān)控進(jìn)程和資源

    psutil是Python系統(tǒng)和進(jìn)程工具庫,它提供了一種跨平臺的方式來獲取系統(tǒng)信息、管理系統(tǒng)進(jìn)程、監(jiān)控系統(tǒng)性能、操作系統(tǒng)資源等,下面就跟隨小編一起來學(xué)習(xí)psutil庫的具體應(yīng)用吧
    2024-01-01
  • Python中input和raw_input的一點區(qū)別

    Python中input和raw_input的一點區(qū)別

    這篇文章主要介紹了Python中input和raw_input的一點區(qū)別,它們都是用來讀取控制臺輸入的函數(shù),需要的朋友可以參考下
    2014-10-10

最新評論