知识点回顾:
- 随机种子
- 内参的初始化
- 神经网络调参指南
- 参数的分类
- 调参的顺序
- 各部分参数的调整心得
作业:对于day'41的简单cnn,看看是否可以借助调参指南进一步提高精度。
对于day41的CNN进行调参:
早停类:
# 早停类
class EarlyStopping:
"""如果验证损失在给定轮数内没有改善,则提前停止训练"""
def __init__(self, patience=7, verbose=False, delta=0):
"""
参数:
patience (int): 在最后一次验证损失改善后等待的轮数
默认: 7
verbose (bool): 如果为True,每次验证损失改善时打印消息
默认: False
delta (float): 监控指标的最小变化,以视为改善
默认: 0
"""
self.patience = patience
self.verbose = verbose
self.counter = 0 # 记录验证损失未改善的连续轮数
self.best_score = None # 记录历史最佳分数(通常是负的验证损失,因为我们希望最大化这个值)
self.early_stop = False # 触发早停的标志
self.val_loss_min = np.Inf # 记录历史最低验证损失
self.delta = delta # 改善阈值
def __call__(self, val_loss, model):
score = val_loss
if self.best_score is None:
self.best_score = score
self.save_checkpoint(val_loss, model)
elif score < self.best_score + self.delta:
self.counter += 1
print(f'早停计数器: {self.counter} / {self.patience}')
if self.counter >= self.patience:
self.early_stop = True
else:
self.best_score = score
self.save_checkpoint(val_loss, model)
self.counter = 0
def save_checkpoint(self, val_loss, model):
'''当验证损失降低时保存模型'''
if self.verbose:
print(f'测试集损失降低 ({self.val_loss_min:.6f} --> {val_loss:.6f})')
# torch.save(model.state_dict(), 'checkpoint.pth')
self.val_loss_min = val_loss
4770

被折叠的 条评论
为什么被折叠?



