pytorch訓練過程中Loss的保存與讀取、繪制Loss圖


在訓練神經網絡的過程中往往要定時記錄Loss的值,以便查看訓練過程和方便調參。一般可以借助tensorboard等工具實時地可視化Loss情況,也可以手寫實時繪制Loss的函數。基於自己的需要,我要將每次訓練之后的Loss保存到文件夾中之后再統一整理,因此這里總結兩種保存loss到文件的方法以及讀取Loss並繪圖的方法。

一、采用torch.save(tensor, 'file_name')方法:

for epoch in range(config.NUM_EPOCH)
    #...中間略
    loss = criterion(outputs,ground_truth)  # 計算損失值
    running_loss = loss.item()  # loss累加
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()  # 反向傳播后參數更新
    if i % 200 == 199:
        Loss.append(running_loss)
        print('Epoch '+str(epoch)+' : '+str(i//200)+' , LOSS ='+str(running_loss))
Loss0 = torch.tensor(Loss)
torch.save(Loss0,'/home/wangshuyu/MobileNet_v1/loss2/epoch_{}'.format(epoch))        

將每個epoch中的Loss存在一個list中,最后轉成tensor類型存到文件中。

二、采用np.save('file_name', np_array)方法

for epoch in range(config.NUM_EPOCH)
    #...中間略
    loss = criterion(outputs,ground_truth)  # 計算損失值
    running_loss = loss.item()  # loss累加
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()  # 反向傳播后參數更新
    if i % 200 == 199:
        Loss.append(running_loss)
        print('Epoch '+str(epoch)+' : '+str(i//200)+' , LOSS ='+str(running_loss))
Loss0 = np.array(Loss)
np.save('/home/wangshuyu/MobileNet_v1/loss2/epoch_{}'.format(epoch),Loss0) 

np.save默認保存為.npy格式

另外,也可以使用np.savez方法將每個epoch的Loss數據壓縮保存在同一個文件中(.npz文件),詳情可以參考博客:numpy數據存儲(save、savetxt、savez)的區別

三、讀取並繪制Loss曲線

import matplotlib.pyplot as plt
import torch
import numpy as np

def plot_loss(n):
    y = []
    for i in range(0,n):
        enc = np.load('D:\MobileNet_v1\plan1-AddsingleLayer\loss\epoch_{}.npy'.format(i))
        # enc = torch.load('D:\MobileNet_v1\plan1-AddsingleLayer\loss\epoch_{}'.format(i))
        tempy = list(enc)
        y += tempy
    x = range(0,len(y))
    plt.plot(x, y, '.-')
    plt_title = 'BATCH_SIZE = 32; LEARNING_RATE:0.001'
    plt.title(plt_title)
    plt.xlabel('per 200 times')
    plt.ylabel('LOSS')
    # plt.savefig(file_name)
    plt.show()

if __name__ == "__main__":
    plot_loss(20)

得到曲線如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM