任務1- 讀取.txt檔案畫折線圖(曲線圖)
任務2- 將.txt檔案轉換成.xls(excel)檔案
任務3- 將.xls(excel)檔案轉換成.txt檔案
任務4- 讀取.txt檔案畫折線圖(曲線圖)
最近在做目標檢測的任務,但是由于自己訓練的損失函式不是自己想要的,但是自己的程式在訓練的時候每個 E p o c h Epoch Epoch都會生成一個模型的損失數值,所以想根據這些數值自己畫圖,
任務1:根據 t x t txt txt檔案內的數值,生成損失曲線,
t
x
t
txt
txt檔案內的資料樣例如下圖所示:

因為我的模型訓練了150次,所以這樣的資料有150個,且只有一列,直接在代碼里詳細敘述:
#匯入必須的包
import matplotlib.pyplot as plt
import numpy as np
#----------- 打開txt檔案 ----------
file = open('YOLOV4.txt')
#----------- 逐行讀取檔案內的資料 ------------
data = file.readlines()
#----------- 根據自己的需要查看data的內容 ---------
#print(data)
'''
txt檔案的數值為y軸的資料
所以x要根據y的個數有序生成
'''
#------ x軸資料有序生成150個(根據自己的橫坐標范圍自己修改范圍) ----
x = np.arange(0,150)
#---------- 新建一個空的串列,用于存盤上一步逐行讀取的data ------------
y = []
#---------- 用回圈的方式添加進串列 -----------
for num in data:
#------split用于將每一行資料用逗號分割成多個物件-----
#------取分割后的第0列,轉換成float格式后添加到串列中-------
y.append(float(num.split(',')[0]))
#--------------- 輸出圖 ----------------------
#--------- 可以理解為在圖上加載x和y的資料 label為關于x和y曲線的標簽------------
pic = plt.plot(x,y,label='Yolov4')
#--------- x軸的小標題 -------------
plt.xlabel('Epoch')
#--------- y軸的小標題 -------------
plt.ylabel('Loss')
#--------- 整個圖的標題 ----------
plt.title('yolov4-loss')
plt.legend()
plt.show()
代碼關于畫圖的每個細節寫的很詳細,下面生成的折線圖,

任務2- 將.txt檔案轉換成.xls(excel)檔案
需要的同學直接復制代碼,代碼中注釋了你需要修改的地方,
import xlwt
def txt_xls(filename, xlsname):
try:
f = open(filename, 'r', encoding='utf-8')
xls = xlwt.Workbook()
sheet = xls.add_sheet('sheet1', cell_overwrite_ok=True)
x = 0
while True:
# 按行回圈,讀取文本檔案
line = f.readline()
if not line:
break
for i in range(len(line.split('\t'))):
item = line.split('\t')[i]
sheet.write(x, i, item)
x += 1
f.close()
# 保存xls檔案
xls.save(xlsname)
except:
raise
'''
下面的地址中就是自己根據自己的需要修改的地方
為什么看上去沒有路徑呢?因為我是把txt檔案和運行的此程式放在了同一個檔案夾中
所以生成的.xls檔案也在同級檔案下,也就是他們在同一個檔案夾中
如果你沒放在一起,建議使用E://Path//...
'''
if __name__ == "__main__":
#---------- 需要轉化的.txt檔案 -----------
filename = "YOLOV4.txt"
#---------- 轉換后的.xls檔案名 -----------
xlsname = "YOLOV4.xls" # 保存及命名
txt_xls(filename, xlsname)
任務3- 將.xls(excel)檔案轉換成.txt檔案
將 . x l s .xls .xls檔案轉換成 . t x t .txt .txt檔案,
python
import pandas as pd
#---------- 如果你的.xls檔案開了多個視窗檔案(sheet1,sheet2,sheet3....)使用下面的代碼 -----------
#df = pd.read_excel('YOLOV4.xls', sheet_name='Sheet1',header=None)
#---------- 如果你的.xls檔案沒有開多個視窗(沒有sheet1,sheet2,sheet3....)試用下面的代碼
data = pd.read_excel('YOLOV4.xls', sheet_name='Sheet1',header=None)
print('正在讀取將.xls檔案內容')
#---------- 寫入txt檔案,seq表示逗號分隔 --------------
data.to_csv('YOLOV4.txt', header=None, sep=',', index=False)
print('.xls檔案轉換成.txt檔案成功')
任務4- 讀取.txt檔案畫折線圖(曲線圖)
該任務算是任務一的進階版,通過檔案資料的轉換,我的
.
t
x
t
.txt
.txt檔案的內容不再是一列,而是兩列,第一列為序號,第二列為數值,基于此種情況,讀取
.
t
x
t
.txt
.txt檔案,將其以折線圖(曲線圖)表示出來,
下圖是我現在
.
t
x
t
.txt
.txt資料的圖例,

可以發現和任務一資料唯一不同就是多了一列的序列號,下面的是基于任務一改進的,就是改了幾行,修改后的內容以注釋的形式保存,話不多說直接代碼中詳細介紹:
#匯入必須的包
import matplotlib.pyplot as plt
import numpy as np
#----------- 打開txt檔案 ----------
file = open('file2.txt')
#----------- 逐行讀取檔案內的資料 ------------
data = file.readlines()
#----------- 根據自己的需要查看data的內容 ---------
#print(data)
'''
txt檔案的數值為y軸的資料
所以x要根據y的個數有序生成
'''
#------ x軸資料有序生成150個(根據自己的橫坐標范圍自己修改范圍) ----
#x = np.arange(0,150)
#---------- 新建一個空的串列,用于存盤上一步逐行讀取的data ------------
x = []
y = []
#---------- 用回圈的方式添加進串列 -----------
for num in data:
#------split用于將每一行資料用逗號分割成多個物件-----
#------x讀取data資料的第一列(也就是序列號)
x.append(float(num.split(',')[0]))
#------取分割后的第0列,轉換成float格式后添加到串列中-------
#------y讀取data資料的第二列(也就是數值)
y.append(float(num.split(',')[1]))
#--------------- 輸出圖 ----------------------
#--------- 可以理解為在圖上加載x和y的資料 label為關于x和y曲線的標簽------------
pic = plt.plot(x,y,label='Yolov4')
#--------- x軸的小標題 -------------
plt.xlabel('Epoch')
#--------- y軸的小標題 -------------
plt.ylabel('Loss')
#--------- 整個圖的標題 ----------
plt.title('yolov4-loss')
plt.legend()
plt.show()
下面是得到的折線圖(曲線圖),和任務一得到的一模一樣,

總結:
- 如果你的資料是 . t x t .txt .txt檔案,資料只有一列,那么任務一就可以解決你的問題
- 如果你有 . x l s .xls .xls格式的檔案,你可以通過任務三將其轉換成 . t x t .txt .txt檔案,然后通過任務一或者四解決你的問題
- 如果你將 . t x t .txt .txt檔案轉換成 . x l s .xls .xls檔案,任務二可以解決你的問題
如果對您有用,不妨點個贊吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/394106.html
標籤:其他
上一篇:Java專案畢業設計:基于springboot+vue的電影視頻網站系統
下一篇:Achieving on-Mobile Real-Time Super-Resolution with Neural Architecture and Pruning Search
