<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用 python 繪製網路訓練過程中的的 loss 曲線以及準確率變化曲線,這裡的主要思想就時先把想要的損失值以及準確率值儲存下來,儲存到 .txt 檔案中,待網路訓練結束,我們再拿這儲存的資料繪製各種曲線。
其大致步驟為:資料讀取與儲存 - > loss曲線繪製 - > 準確率曲線繪製
我們首先要得到訓練時的資料,以損失值為例,網路每迭代一次都會產生相應的 loss,那麼我們就把每一次的損失值都儲存下來,儲存到列表,儲存到 .txt 檔案中。儲存的檔案如下圖所示:
[1.3817585706710815, 1.8422836065292358, 1.1619832515716553, 0.5217241644859314, 0.5221078991889954, 1.3544578552246094, 1.3334463834762573, 1.3866571187973022, 0.7603049278259277]
上圖為部分損失值,根據迭代次數而異,要是迭代了1萬次,這裡就會有1萬個損失值。
而準確率值是每一個 epoch 產生一個值,要是訓練100個epoch,就有100個準確率值。
(那麼問題來了,這裡的損失值是怎麼儲存到檔案中的呢? 很少有人講這個,也有一些小夥伴們來諮詢,這裡就統一記錄一下,包括損失值和準確率值。)
首先,找到網路訓練程式碼,就是專案中的 main.py,或者 train.py ,在檔案裡先找到訓練部分,裡面經常會有這樣一行程式碼:
for epoch in range(resume_epoch, num_epochs): # 就是這一行 #### ... loss = criterion(outputs, labels.long()) # 損失樣例 ... epoch_acc = running_corrects.double() / trainval_sizes[phase] # 準確率樣例 ... ###
從這一行開始就是訓練部分了,往下會找到類似的這兩句程式碼,就是損失值和準確率值了。
這時候將以下程式碼加入原始碼就可以了:
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] # 準確率樣例 train_acc.append(epoch_acc.item()) # 準確率加入到列表中 ... 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))
這樣就算完成了損失值和準確率值的資料儲存了!
主要需要 numpy 庫和 matplotlib 庫,如果不會安裝可以自行百度,很簡單。
首先,將 .txt 檔案中的儲存的資料讀取進來,以下是讀取函數:
import numpy as np # 讀取儲存為txt檔案的資料 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"E:relate_codeGaitpart-mastertrain_loss.txt" # 儲存檔案路徑 y_train_loss = data_read(train_loss_path) # loss值,即y軸 x_train_loss = range(len(y_train_loss)) # loss的數量,即x軸 plt.figure() # 去除頂部和右邊框框 ax = plt.axes() ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) plt.xlabel('iters') # x軸標籤 plt.ylabel('loss') # y軸標籤 # 以x_train_loss為橫座標,y_train_loss為縱座標,曲線寬度為1,實線,增加標籤,訓練損失, # 預設顏色,如果想更改顏色,可以增加引數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()
這樣就算把損失影象畫出來了!如下:
有了上面的基礎,這就簡單很多了。
只是有一點要記住,上面的x軸是迭代次數,這裡的是訓練輪次 epoch。
if __name__ == "__main__": train_acc_path = r"E:relate_codeGaitpart-mastertrain_acc.txt" # 儲存檔案路徑 y_train_acc = data_read(train_acc_path) # 訓練準確率值,即y軸 x_train_acc = range(len(y_train_acc)) # 訓練階段準確率的數量,即x軸 plt.figure() # 去除頂部和右邊框框 ax = plt.axes() ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) plt.xlabel('epochs') # x軸標籤 plt.ylabel('accuracy') # y軸標籤 # 以x_train_acc為橫座標,y_train_acc為縱座標,曲線寬度為1,實線,增加標籤,訓練損失, # 增加引數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()
這樣就把準確率變化曲線畫出來了!如下:
以下是完整程式碼,以繪製準確率曲線為例,並且將x軸換成了iters,和損失曲線保持一致,供參考:
import numpy as np import matplotlib.pyplot as plt # 讀取儲存為txt檔案的資料 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) # 不同長度資料,統一為一個標準,倍乘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"E:relate_codeGaitpart-masterfile_txttrain_loss.txt" train_acc_path = r"E:relate_codeGaitpart-mastertrain_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()
到此這篇關於Python繪製loss曲線和準確率曲線的文章就介紹到這了,更多相關Python繪製loss曲線 準確率曲線內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45