可以弄一个计时器代码如下
# config.py
import time
class Config:
def __init__(self):
# 初始化参数为False
self.save_flag = False
# 设置超时时间为1个小时
self.timeout = 1 * 60 * 60
# 记录上次保存的时间
self.last_save_time = time.time()
# 检查是否超过超时时间,如果是,则将保存参数设置为True
def check_timeout(self):
current_time = time.time()
if current_time - self.last_save_time > self.timeout:
self.save_flag = True
self.last_save_time = current_time
在train之前创建config对象中,然后设置每隔多少批次调用check_timeout函数,本质上是一个计时器,可以更简单一点,
另一个问题是如何手动保存呢,方法一创建一个qt窗口,比较复杂。可以参考https://github.com/xiyu1007/Myimagecaptioning里的win_qt.py
方法二:简单粗暴最好用,利用文件,每次在train里读取文件is_save.json初始内容如下data={"is_save":false},然后可以在建一个py文件(值得一提的是pycharm可以同时运行多个py文件)来进行写保存data={"is_save":true},如果手动的话太慢可能导致文件被打开中train打不开情况。所以新建一个py来操作。主要代码如下:
写入(在新的py文件进行写入,self换成你的文件路径随便一个.json结尾就行)
log_data = {"save_flag": True}
with open(self.log_path, "w") as file:
json.dump(log_data, file)
读取
save_flag = false
try:
with open(self.log_path, "r") as file:
log_data = json.load(file)
save_flag = log_data.get("save_flag",false)#false表示读取失败返回false
except FileNotFoundError:
pass
if save_flag:
torch.save
记得在这里重新写入false不然会一直保存