在深度學習方法中我們不可避免地會遇到大量超參數如(batch_size、learning_rate等)。不同的超參數組合可以得到不同的訓練/測試結果。所以在訓練和測試過程中我們需要不斷調整超參數獲得理想的結果(煉丹),如果每一次去找分布在不同的函數里的超參數是一個及其麻煩的過程,為了管理大量的超參數提高煉丹效率,出現了許多超參數管理方法,我將自己遇到的朝參管理方法在此記錄,方便自己回顧。
1.?argparse模塊管理超參
argparse 模塊是 Python 中用于解析命令行參數的標準庫工具。它允許你定義你的腳本應該接受哪些命令行參數,以及這些參數的類型和默認值。通過使用 argparse,你可以輕松地從命令行獲取用戶輸入,并在腳本中使用這些輸入。
argparse 幫助你創建一個用戶友好的命令行界面,使得你的腳本能夠更加靈活地與用戶交互。例如,你可以定義腳本接受的選項,設置默認值,提供幫助信息,等等。
1.1 設置超參
假設我們有幾個超參數:
我們創建腳本傳入參數進行測試:
import argparse# 創建 ArgumentParser 實例
parser = argparse.ArgumentParser(description="用來介紹parser!!")# 添加命令行參數
#help用于在命令行中打印“--batch_size”的用法,可以提醒自己和其他使用此程序的人
parser.add_argument('--batch_size', type=int, default=64, help="定義batch")
parser.add_argument('--epoch', type=int, default=200, help="定義訓練輪數")
parser.add_argument('--learning_rate', type=float, default=0.001, help="定義學習率")# 解析命令行參數
args = parser.parse_args()# 訪問命令行參數的值
model_batch_size = args.batch_size
model_epoch = args.epoch
model_learning_rate = args.learning_rate# 輸出batch_size參數的值
print(model_batch_size)
print(model_epoch)
print(model_learning_rate)
輸出結果:
1.2 使用命令行管理傳參
可以使用help方法查看參數說明:
使用命令行傳入參數:
可以看出batch_size和epoch在手動更新參數之后打印修改后的值,learning_rate沒有修改保持默認參數。
記錄一個錯誤:文件名不可以與import中的包名一直,會導致python誤判導入的包和文件報錯:
AttributeError: module 'argparse' has no attribute 'ArgumentParser'
1.3 解析方法
parser.parse_args()
- 解析命令行參數。如果存在未定義在
ArgumentParser
中的參數,會引發錯誤。 - 只返回解析后的命名空間(包含所有已知參數的值)。
parser.parse_known_args()
- 解析命令行參數,并返回一個命名空間和一個未知參數列表。如果存在未定義在
ArgumentParser
中的參數,這些參數會被存儲在返回的未知參數列表中,而不會引發錯誤。 parse_known_args()
方法返回一個包含兩個元素的元組,第一個元素是解析后的命名空間(包含已知參數的值),第二個元素是未知參數列表。parse_known_args()[0]
只返回解析后的命名空間(已知參數的值),忽略未知參數列表。
import argparse# 創建 ArgumentParser 實例
parser = argparse.ArgumentParser("用來介紹parser!!")# 添加命令行參數
#help用于在命令行中打印“--batch_size”的用法,可以提醒自己和其他使用此程序的人
parser.add_argument('--batch_size', type=int, default=64, help="定義batch")
parser.add_argument('--epoch', type=int, default=200, help="定義訓練輪數")
parser.add_argument('--learning_rate', type=float, default=0.001, help="定義學習率")# 解析命令行參數
args = parser.parse_args()
print(args)# 解析命令行參數2
args_known = parser.parse_known_args()
print(args_known)
print(args_known[0])
print(args_known[1])
輸出:
參考:【Python】【深度學習】使用argparse模塊和JSON管理深度學習模型的超參數_深度學習代碼中用的argparse是什么意思,能不能不用-CSDN博客